固然了,這里我們不用數(shù)組……否則就沒技術(shù)含量了。
正弦曲線的特點(diǎn)是左右對稱,且左側(cè)部份的縱坐標(biāo)是從11直降到⑴的,相應(yīng)的右側(cè)的縱坐標(biāo)是從⑴1直遞增到1。難點(diǎn)在于顯示器只能按行輸出,也就是說輸出了1行后不能再掉頭輸出上1行的信息。
我們自定義1個(gè)縮放系數(shù)a為10,用acos(⑴)*10可以算得等于31,因此總寬度為62,出發(fā)點(diǎn)的橫坐標(biāo)為0,終點(diǎn)的橫坐標(biāo)為61。由于余弦曲線對稱,所以在0~180度,也就是左側(cè)部份時(shí),橫坐標(biāo)為k時(shí)對應(yīng)的相同縱坐標(biāo)的180~360度,也就是右側(cè)部份的橫坐標(biāo)為(62-k)。
#include <stdio.h>
#include <math.h>
int main()
{
double y;
int x,k;
for(y=1;y>=-1;y-=0.1)
{
k=acos(y)*10;
for(x=1;x<k;x++)
printf(" ");
printf("*");
for(;x<62-k;x++)
printf(" ");
printf("*
");
}
return 0;
}
正弦曲線就要難很多了……我們照舊沿用余弦曲線示例中的總寬度(62)。
相信對左側(cè)部份大家都可以信手拈來……
if(1<=k&&k<=15)
{
for(x=1;x<k;x++)
printf(" ");
printf("*");
for(;x<30-k;x++)
printf(" ");
printf("*
");
}
右側(cè)部份我也弄了好久,主要是疏忽了asin(⑴)*10是負(fù)數(shù)……哎
所以發(fā)現(xiàn)了這1點(diǎn)以后就應(yīng)當(dāng)將if語句這樣寫:
if(-15<=k&&k<=-1)
但是還有1點(diǎn)要注意的,我們不是在用數(shù)組打印星號,換句話說,對橫坐標(biāo)而言,打印都得從1開始,而我們的坐標(biāo)成了負(fù)值,該怎樣辦呢?
我們應(yīng)當(dāng)轉(zhuǎn)換它:將負(fù)數(shù)k變成(31-k)它就成了1個(gè)公道的正數(shù)了,一樣的,在270度的左右90之間也是對稱的。而270度對應(yīng)的寬度為46,那末180~270度之間的k對稱到270~360度之間的多少呢?設(shè)1個(gè)方程就弄定了:
46-(31- k)= x - 46
=>
x = 61 + k
因而乎:
#include <stdio.h>
#include <math.h>
int main()
{
double y;
int x,k;
for(y=1;y>=-1;y-=0.1)
{
k=asin(y)*10;
if(1<=k&&k<=15)
{
for(x=1;x<k;x++)
printf(" ");
printf("*");
for(;x<30-k;x++)
printf(" ");
printf("*
");
}
else if(-15<=k&&k<=-1)
{
for(x=1;x<31-k;x++)
printf(" ");
printf("*");
for(x;x<61+k;x++)
printf(" ");
printf("*
");
}
}
return 0;
}
【源碼下載,不需要資源積分】
還有下1篇哦:控制臺繪制正弦曲線和余弦曲線同時(shí)顯示
為使本文得到斧正和發(fā)問,轉(zhuǎn)載請注明出處:
http://blog.csdn.net/nomasp