用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类型。加大精确度。

至于原因我下一篇博文会讨论到,关于他们各自的存储格式以及精度。

 

posted on 2013-08-15 12:03  清霜一梦  阅读(2560)  评论(0编辑  收藏  举报