趣味C程序100.1 .1 绘制余弦曲线
说明: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; }