C語言繪制余弦、正弦曲線
繪制余弦曲線
要求:在屏幕上用“*”(星號)顯示0°~360°的余弦函數(shù)cos(x)曲線。(不使用數(shù)組)
問題分析與算法設(shè)計
對一般的顯示器來說,只能按行輸出,即:輸出第一行信息后,想能向下一行輸出,不能再返回到上一行。為了獲得一個周期(0°~360°)的余弦函數(shù)圖形,j就必須在一行中一次輸出兩個“*”。
為了同時得到余弦函數(shù)cos(x)圖形在一行上的兩個點(diǎn),考慮利用cos(x)的左右對稱性。將屏幕行方向定義為x,列方向定義為y。若定義圖形的總寬度為62行,計算出x行0°~180°時y點(diǎn)坐標(biāo)m,那么在同一行與之對稱的180°~360°的y點(diǎn)坐標(biāo)就應(yīng)為62-m。程序中利用反余弦函數(shù)acos計算坐標(biāo)(x,y)的對用關(guān)系。
程序說明與注釋
/****************繪制0~2PI區(qū)間內(nèi)的余弦曲線****************/ /***********編者:董炳政******編寫時間2018/07/20**********/ /*******************************************************/ #include <stdio.h> #include <math.h> int main() { double y; /*縱坐標(biāo)y*/ int x,m; /*橫坐標(biāo)x*/ for(y = 1;y >= -1;y -= 0.1) /*縱軸y從1~-1,步長為0.1*/ { m=acos(y)*10; /*利用math.h中的反余弦函數(shù),求對應(yīng)橫坐標(biāo)的值,此時m為int型變量*/ for(x = 1;x < m;x++) /*開始逐行打點(diǎn)*/ printf(" "); /*在曲線定點(diǎn)右側(cè),打印空格*/ printf("*"); /*第一個曲線定點(diǎn)打印“*”*/ for(;x < 62-m;x++) /*開始打印對稱曲線定點(diǎn),由于對稱性x的終值為62-m*/ printf(" "); /*在兩定點(diǎn)之間打印空格*/ printf("*\n"); /*第二個曲線定點(diǎn)打印“*”,并換行*/ } return 0; }
運(yùn)行結(jié)果:
[root@localhost 1_drawingcos]# ./drawingcos * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
繪制正弦曲線
在已經(jīng)會繪制余弦曲線的基礎(chǔ)上,我們來進(jìn)一步探索如何利用C語言繪制正弦函數(shù)。
問題分析:
很自然的,我們想到將acos(y)換成asin(y),不就可以把畫余弦函數(shù)換成畫正弦函數(shù)了嗎??墒?,事實并沒有那么簡單。首先,0°~360°的正弦函數(shù)并不是一個簡單的左右對稱的圖形;其次,反三角函數(shù)x=asin(y)的值域為(-π/2,π/2),所以并不能通過簡單的求反三角函數(shù)值計算出(π,2π)這一段圖形的橫坐標(biāo)。
這里提供一種方法。我們可以通過計算asin(y)來得到(0,π/2)這一段圖形的橫坐標(biāo);利用(0,π/2)的圖形和(π/2,π)關(guān)于x=π/2軸對稱,來得到(π/2,π)這一段圖形的橫坐標(biāo);通過計算π+asin(-y)的值,來得到(π,2π)這一段圖形的橫坐標(biāo)。
/****************繪制0~2PI區(qū)間內(nèi)的弦曲線****************/ /***********編者:董炳政******編寫時間2018/07/20**********/ /*******************************************************/ #include <stdio.h> #include <math.h> #define PI 3.14159 int main() { double y; /*縱坐標(biāo)y*/ int x,m; /*橫坐標(biāo)x*/ for(y = 1;y >= 0;y -= 0.1) /*先求0~PI,縱軸y從1~0,步長為0.1*/ { m=asin(y)*10; /*利用math.h中的反正弦函數(shù),求對應(yīng)橫坐標(biāo)的值,此時m為int型變量*/ for(x = 1;x < m;x++) /*開始逐行打點(diǎn)*/ printf(" "); /*在曲線定點(diǎn)右側(cè),打印空格*/ printf("*"); /*第一個曲線定點(diǎn)打印“*”*/ for(;x < 31-m;x++) /*開始打印對稱曲線定點(diǎn),由于0~PI的對稱性x的終值為31-m*/ printf(" "); /*在兩定點(diǎn)之間打印空格*/ printf("*\n"); /*第二個曲線定點(diǎn)打印“*”,并換行*/ } for(y -= 0.1;y >= -1;y -= 0.1) { m=(PI+asin(-y))*10; for(x=1;x<m;x++) printf(" "); printf("*\n"); for(;x<(62-(m-31));x++) printf(" "); printf("*\n"); } return 0; }
運(yùn)行結(jié)果:
[root@localhost 1_drawingcos]# ./drawingsin * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言詳細(xì)分析貪心策略中最小生成樹的Prime算法設(shè)計與實現(xiàn)
最小生成樹的問題還是比較熱門的,最經(jīng)典的莫過于Prime算法和Kruskal算法了,這篇博文我會詳細(xì)講解Prime算法的設(shè)計思想與具體代碼的實現(xiàn),不要求數(shù)據(jù)結(jié)構(gòu)學(xué)的有多好,只要跟著我的思路來,一步一步的分析,調(diào)試,終能成就自己,那就讓我們開始吧2022-05-05C語言動態(tài)規(guī)劃點(diǎn)殺dp算法LeetCode炒股習(xí)題案例解析
這篇文章主要介紹為了C語言動態(tài)規(guī)劃點(diǎn)殺dp算法,本文以LeetCode炒股習(xí)題案例來為大家進(jìn)行詳細(xì)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02C語言中g(shù)etchar和putchar的使用方法詳解
我們知道scanf函數(shù)可以從鍵盤輸入信息,而printf則可以輸出信息,同樣地,getchar和putchar也有同樣的功能,下面我來給大家介紹putchar和getchar的使用方法,需要的朋友可以參考下2023-08-08