您的位置:首页 > 其它

趣味C程序100.1 .1 绘制余弦曲线

2015-02-02 16:21 274 查看
说明:1.本问题来源于《C语言经典、趣味、实用程序设计编程百例精解》,所有程序为本人自己编写。与原程序不同之处作有标记。

2.本系列所有程序均使用codeblocks编译,操作系统为Windows XP。

问题:在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线(不使用数组)

分析:如果在程序中使用数组,这个问题十分简单。但若规定不能使用数组,问题就变得不容易了。关键在于余弦曲线在0~360度的区间内,一行中 要显示两个点,而对于控制台程序来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回上一行。为了获得本问题所要求的图形,就必须在一行中一次输出两个“*”。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
int radian; //10倍弧度
double y;  //y为y轴,值为-1到+1,步长为0.1;
int x; //用62列值代表x轴;62来源于2Pi*10约等于2*3.1*10;

//用反余弦值求x更加方便
for(y=1; y>=-1; y-=0.1)
{
radian=acos(y)*10;

for(x=0;x<=62;x++)
{
if((x==radian)||(x==(62-radian))) //反余弦函数值域[0,pi],左右对称
printf("*");
else
printf(" ");
}
printf("\n");

/*
书中的方法
for(x=1; x<radian; x++)
printf(" ");
printf("*");
for(; x<62-radian; x++)
printf(" ");
printf("*\n");
*/
}

return 0;
}




图1. 我的程序运行图片



图2. 书中程序运行图片

附加:这里尝试了下用数组写这个程序。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
char cosMap[21][62];
int x, m;
double y; //y轴,值为-1到+1,步长为0.1;

for(m=0; m<21; m++)
for(x=0; x<62; x++)
cosMap[m][x] = ' ';

for(y=1; y>=-1; y-=0.1)
{
x=(int)(acos(y)*10);
m=(int)(y*10)+10;
cosMap[20-m][x] = '*';
cosMap[20-m][62-x] = '*';
}

for(m=0; m<21; m++)
{
for(x=0; x<62; x++)
{
printf("%c", cosMap[m][x]);
}
putchar('\n');
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: