正文

c语言--绘制正余弦曲线2006-06-14 18:26:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xboy/15816.html

分享到:

问题分析:

0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。为了获得题目要求的图形就必须在一行中一次输出两个“*”。

 

思路:

 

利用sin (x)和cos(x)的左右对称性;

利用反余弦函数asin和acos计算坐标(x,y)的对应关系。

 

程序如下:

#include"stdio.h"

#include"math.h"

void main()
{
double y;
int x,m;
/*先打印0到180度,利用sin (x)在0到90度的左右对称性,
序中利用反正弦函数asin计算坐标(x,y)的对应关系。*/
for(y=1;y>=0;y-=0.1) /*y为列方向,值从1到0,步长为0.1*/
{
m=asin(y)*10; /*计算出y对应的弧度m,乘以10为图形放大倍数*/
for(x=1;x<m;x++) printf(" ");
printf("*"); /*控制打印左侧的 * 号*/
for(;x<31-m;x++)printf(" ");
printf("*\n"); /*控制打印同一行中对称的右侧*号*/
}
/*再打印180到360度,利用cos (x)在90到270度的左右对称性,
序中利用反余弦函数acos计算坐标(x,y)的对应关系,
记得把横坐标x的值右移90度。*/
for(y=0;y>=-1;y-=0.1) /*y为列方向,值从0到-1,步长为0.1*/
{
m=acos(y)*10+15; /*计算出y对应的弧度m,乘以10为图形放大倍数,
                  x的值右移90度*/
for(x=1;x<m;x++)printf(" ");
printf("*"); /*控制打印左侧的 * 号*/
for(;x<92-m;x++)printf(" ");   /*92=62+15+15,why?:)*/
printf("*\n"); /*控制打印同一行中对称的右侧*号*/

}
getch();
}

/*如果你觉得两段曲线的接点的断点不好看,把第9句改为:
for(y=1;y>=0.2;y-=0.1)   再看看结果:)*/

 

 

解决办法2:

若题目规定不能使用数组,这样做的确烦人得很。

如果允许使用数组,这个问题就简单多了。

 

#include"stdio.h"
main()
{
char b[30];
int xx;
double pii,a,sin(),cos();
pii=   3.1415926/180 ;
printf("   -1         0         1\n"); /*空3格,后两个空9格*/
printf("   I..........I...........I\n");  /*空3格,后两个空10格*/
for(a=0;a<=360;a=a+15)
  {strcpy(b,"          I          "); /*空10格*/
  xx=(int)(10+10*sin(pii*a)) ;
  b[xx]='*';
  printf("%3.0f %s\n",a,b);
  }
  getch();
}

/*如果你看不到最上部的头,把第10句改为a<=300,就可以看到最上部的效果*/

 

阅读(3500) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册