用C语言打印出三角函数
在网上看到一个实例,是用C 中的* 打印出三角函数cos
1 #include<stdio.h> 2 #include<math.h> 3 4 int main() 5 6 { 7 double y; 8 int x,m; 9 10 for(y=1;y>=-1;y-=0.025) 11 { 12 m=acos(y)*40; 13 for(x=1;x<m;x++) printf(" "); 14 printf("*"); 15 for(;x<248-m;x++)printf(" "); 16 printf("*\n"); 17 } 18 system("pause"); 19 }
网络上的是图像扩大10倍,我将它扩大到了40倍。如果你真的要看这个程序的显示结果就要把显示窗口宽度加宽哦。要不显示不正确。
这个题目的下面一个是打印出sinx 。因为cosx 的 反函数的定义域是正。而sinx的反函数的定义域有负数。这个就要分类讨论了。
1 //date: 2013/8/15 2 //designer:pengxiaoen 3 //function printf the function sinx (0 <= x <= 6.2) 4 5 6 #include<stdio.h> 7 #include<math.h> 8 9 10 int main () 11 { 12 double y; 13 int x,i; 14 for (y=1.0;y>=-1.0;y=y-0.1) 15 { 16 x = asin(y) * 10; 17 if(x>=0) 18 { 19 for(i=1;i<x;i++) printf(" "); 20 printf("*"); 21 22 for(;i<31-x;i++) printf(" "); 23 printf ("*\n"); 24 } 25 else 26 { 27 x = abs(x)+32; 28 for(i=1;i<x;i++) printf(" "); 29 printf("*"); 30 31 for(;i<94-x;i++) printf(" "); 32 printf ("*\n"); 33 } 34 } 35 36 printf("\n\n"); 37 system("pause"); 38 }
显示的结果就是
有一个小插曲: 在定义的时候如果将y定义成float 类型。貌似也可以。其实有点区别。单精度处理之后在函数曲线平滑区是显示不了的。
好吧,不卖关子了。直接说现象
如果将y定义成float 类型 第十四行的y将不能取值-1.这样函数图像Y轴最下方的两个*不不见了。
我后来就把 y>=-1 改成y>=-1.01。这样y是可以取值-1了,但是 这两个* 跑到了最左端。
解决办法,将y定义成double类型。加大精确度。
至于原因我下一篇博文会讨论到,关于他们各自的存储格式以及精度。