C趣味编程之绘制余弦曲线
上一篇 /
下一篇 2012-08-09 10:03:59
/ 个人分类:C++
51Testing软件测试网&R,e j:]{?,f'R 最近看到一本C趣味编程的书,感觉还挺有趣的,就在这记记吧51Testing软件测试网L hE:w"^
51Testing软件测试网;rZ1vX$v`g)o 1、用“*”绘制0°~360°的余弦曲线。
~9iu b e0:B2_$xPz0 咋一看这个题目有点傻眼,这怎么绘制,简单考虑,在纸上画了下余弦曲线,发现曲线是0~180°和180°~360°对称的。51Testing软件测试网(oCEoea%{
51Testing软件测试网;rq{&?*{1HC$N
本来每一行需要画两个点,由于对称,只需算出一个点的位置,然后对称过去画出就可以了
4OAUW7wtp XR&L0~9O0 假设列宽位62,360°=2π≈6.2,我想大家都懂得。
$QcPqb|5^0 然后我们就可以编程啦51Testing软件测试网X4j%`U]Ex'M$|6Y
51Testing软件测试网5aP~%T?7C #include <stdio.h> D"}n Xf!\XU0#include <math.h>51Testing软件测试网"`_W(HX,[%D%w&iP 51Testing软件测试网H L,E`*@0N Aint main(void) 'R3K/?
aj'lR0{51Testing软件测试网'azYf e9_]:v double y; c8qQ|8j&F)Km0 int x,m;51Testing软件测试网 h6_.X
n Pf)K8C(H7FV*X for (y=1;y>=-1;y-=0.1) //y从1到-1就不解释了吧 ;LA/e#Rwti0 {51Testing软件测试网v&WB#_$qbSw [ m=acos(y)*10; //根据y算出x 10是放大系数51Testing软件测试网 \^K$Or&BD;i for (x=1;x<m;x++)51Testing软件测试网d"l2hLml/_7V printf(" "); /` E"]L4T1} |"w~0 printf("*"); |&mwg*@ob0 for ( ;x<62-m;x++) //做对称处理 wT:?wU'wv0 printf(" ");51Testing软件测试网-Y^al!}cTi^ printf("*\n"); 2p:N M
|*Q4tg!U!Z]5i0 } R7X4Kp]"h%]ve0 return 0;51Testing软件测试网.WeO%`U7V/W#j }51Testing软件测试网`?.k!p6u7k |
得到的图形是这个样子的51Testing软件测试网 V+P|9u@*Fe8CH
51Testing软件测试网r2g8b(^;rO
51Testing软件测试网t~lN#EIO0D
i#};P9Yja4[0 下面是思考时间:51Testing软件测试网JI0L7A+O:w
ard&J1|[
51Testing软件测试网
}1cA:u!{j:@5C 怎么来画sin x的图像?51Testing软件测试网#p\s/_5v(`O g
51Testing软件测试网A ]$[0l+T| J1{'k 来,同样的,先画画标准图像。51Testing软件测试网{|
K!~#R(d cG
51Testing软件测试网*c,H ?0ZVV
我的思路是这样子的。0°~90°,90°到180°是对称的,和上面一样的画法。51Testing软件测试网r+AMmG$|4e3A
由于asin()函数算出的x值是在-180°~180°之间的(反三角函数,高中数学没学好的自闭去),所以可以考虑吧-180°~0°图像移到90°的后面就行了。51Testing软件测试网5Rq9A5]y9s)?
K
我写的程序是这样子的:51Testing软件测试网KlZz7iO0y
z
51Testing软件测试网PX~/~W+lG
Q)f+[.q!^*i0#include <stdio.h>51Testing软件测试网5UnN.Hn:y@b #include <math.h>51Testing软件测试网9z
u&?Du5]@]F(J 51Testing软件测试网E)dU,P9x7CT xVint main(void) )\b;Ge7h u1Z/c0{ +n*\ l{b tON9Y8X0 double y; m6k
g1M Li0 int x,m;51Testing软件测试网 fzOi%n(I1K"V for (y=1;y>=0;y-=0.1) *h D5Z6Q
F)_/k0 {51Testing软件测试网T4f.B(Y2y"}7e m=asin(y)*10;51Testing软件测试网8O
Dt^l for (x=1;x<m;x++)51Testing软件测试网#j-nXi5UMy printf(" "); U[1bg;^*G@p'N;O0H0 printf("*"); 7N:[~4Xt;m~ i&\0 for ( ;x<31-m;x++) R'` L3V6mFn)_+~0 printf(" ");51Testing软件测试网O?rk2| l
j printf("*\n");51Testing软件测试网P H$Tj7iu s }51Testing软件测试网;pb&j |