admin管理员组

文章数量:1530518

2024年4月7日发(作者:)

100个经典C语言程序

1.绘制余弦曲线:在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线

分析:在余弦曲线在0~360度的区间内,一行中要显示两个点,为了同时得到余弦函数cos(x)

图形在一行上的两个点,考虑利用cos(x)的左右对称性。将屏幕的行方向定义为x,列方向

定义为y,则0~180度的图形与180~360度的图形是左右对称的,若定义图形总宽度为62列,

计算出x行0~180度时y点的坐标m,则同一行与之对称的180~360度的y点坐标就是62-m。

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

#include

#include

void main( )

{ double y; int x, m;

for(y=1;y>=-1;y-=0.1) //y为列方向,值从1到-1,步长为0.1

{ m=acos(y)*10; //计算出y对应的弧度m,乘以10为图形放大倍数

for(x=1; x

printf("*"); //控制打印左侧的 * 号

for( ; x<62-m; x++) printf(" ");

printf("*n"); //控制打印同一行中对称的右侧*号

}

}

2.绘制余弦曲线和直线:在屏幕上显示0~360度的cos(x)曲线与直线f(x)=45*(y-1)+31的

迭加图形。其中cos(x)图形用“*”表示,f(x)用“+”表示,两个图形相交的点上用“+”。

分析:图形迭加的关键是在分别计算出同一行中两个图形的列方向点坐标后,正确判断相互

的位置关系。可以先判断图形的交点,再分别控制打印两个不同的图形。

#include

#include

void main( )

{ double y; int x, m, n, yy;

for (yy=0; yy<=20; yy++) //对于第一个y坐标进行计算并在一行中打印图形

{ y=0.1*yy; //y:屏幕行方向坐标

m=acos(1-y)*10; //m: cos(x)曲线上y点对应的屏幕列坐标

n=45*(y-1)+31; //n: 直线上y点对应的列坐标

for(x=0;x<=62;x++) //x: 屏幕列方向坐标

if(x==m&&x==n) printf("+"); //直线与cos(x)相交时打印“+”

else if(x==n) printf("+"); //打印不相交时的直线图形

else if (x==m|| x==62-m) printf("*"); //打印不相交时的cos(x)图形

else printf(" "); //其它情况打印空格

printf("n");

}

}

3.绘制圆:在屏幕上用“*”画一个空心的圆

分析:打印圆可利用图形的左右对称性。根据圆的方程:R*R=X*X+Y*Y,可以算出圆上每一

点行和列的对应关系。

#include

#include

void main( )

{ double y;

int x, m;

for(y=10;y>=-10; y--)

{ m=2.5*sqrt(100-y*y); /*计算行y对应的列坐标m,2.5是屏幕纵横比调节系数,

因为屏幕的行距大于列距,不调节显示出来的将是椭圆*/

for(x=1;x<30-m;x++) printf(" "); /*图形左侧空白控制*/

printf("*"); /*圆的左侧*/

for(;x<30+m;x++) printf(" "); /*图形的空心部分控制*/

printf("*n"); /*圆的右侧*/

}

}

4.歌星大奖赛:在歌星大奖赛中,有10个评委为选手打分,分数为1~100分。选手最后得

分为去掉一个最高分和一个最低分后其余8个分数的平均值。请编程实现。

问题分析与算法实现:

#include

void main( )

{ int s ,i, max, min, sum;

max=0; /*设当前的最大值max为0*/

min=100; /*设当前的最小值min为100*/

sum=0; /*将求累加和变量的初值置为0*/

for(i=1;i<=10;i++)

{ printf("Input number %d=", i );

scanf("%d",&s); /*输入评委的评分*/

sum+=s; /*计算总分*/

if(s>max) max=s; /*通过比较筛选出其中的最高分*/

if(s

}

printf("Canceled max score:%dn Canceled min score:%dn",max,min);

printf("Average score:%dn",(sum-max-min)/8); /*输出结果*/

}

-----------------------------------------------------------------------------------------------------------

思考题:题目条件不变,但考虑同时对评委评分进行裁判,即在10个评委中找出最公平(即

评分最接近平均分)和最不公平(即与平均分的差距最大)的评委,程序应该怎样实现?

-----------------------------------------------------------------------------------------------------------

本文标签: 图形屏幕评委打印坐标