在屏幕上用“*”显示0°~360°的余弦函数cos(x)的曲线
分析思路: 余弦函数曲线在0°~360°的区间里,每一行是要显示两个“*” ,所以必须两个点要同时得到,要考虑到该图形的左右对称性,将屏幕的行方向定义为x,列方向定义为y,区间0°~180°和180°~360°是左右对称的,两个点的y相同,定义图形的总宽度为62,求得左边一个点的x值为m(通过反余弦函数求),则改点对称的点的x值为62 - m。
例程如下:
#include <stdio.h>
#include <math.h>
int main()
{
int x;
int m;
double y;
for(y = 1;y >= -1;y = y - 0.1)
{
m = acos(y) * 10;
for(x = 1;x < m;x++)
{
printf(" ");
}
printf("*");
for(;x < 62 - m;x++)
{
printf(" ");
}
printf("*\n");
}
return 0;
}
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
**
注意:要把y的数据类型定义为double,如果定义为int类型,则会出现死循环和下面的图形
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
同时,如果空格打印的时候是printf("");则会下面的错误:
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
**
思考拓展:用“*”显示0°~360°的余弦函数sin(x)的曲线
分析思路:sin(x)的图形可从x = 180°处划分开,左右两边又分别关于x = 90°和x = 270°对称
#include <stdio.h>
#include <math.h>
int main()
{
int x;
int m;
double y;
for(y = 1;y >= -1;y = y - 0.1)
{
if(y >= 0)
{
m = asin(y) * 10;
for(x = 1;x < m; x++)
{
printf(" ");
}
printf("*");
for(;x < 31 - m;x++)
{
printf(" ");
}
printf("*\n");
}
else
{
m = asin(y) * 10;
for(x = 1;x < 31 - m;x++)
{
printf(" ");
}
printf("*");
for(;x < 62 + m;x++)
{
printf(" ");
}
printf("*\n");
}
}
return 0;
}
调试结果为:
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
在打印sin(x)图形时,因为没有留意到y在0到-1之间求得的m值是负值,所以在打印空格的时候取值范围就错误了,没有出来正确图像,而且在y的两种取值范围里都要在打印的语句里加'\n',进入下一行打印。