清霜一梦

用C语言打印出三角函数

0
阅读(1557)

在网上看到一个实例,是用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     else26     {                                      
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类型。加大精确度。

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