3.绘制圆
在屏幕上用“*”画一个空心的圆
*问题分析与算法设计
打印圆可利用图形的左右对称性。根据圆的方程:
RR=XX+Y*Y
可以算出圆上每一点行和列的对应关系。
*程序说明与注释
#include
#include
void main()
{
double y;
int x,m;
for(y=10;y>=-10;y--)
{
m=2.5sqrt(100-yy); /*计算行y对应的列坐标m,2.5是屏幕纵横比调节系数因为屏幕的
行距大于列距,不进行调节显示出来的将是椭圆*/
for(x=1;x<30-m;x++) printf(" "); /图形左侧空白控制/
printf("*"); /圆的左侧/
for(;x<30+m;x++) printf(" "); /图形的空心部分控制/
printf("* "); /圆的右侧/
}
}
4.歌星大奖赛
在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。
*问题分析与算法实现
这个问题的算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。
*程序说明与注释
#include
void main()
{
int integer,i,max,min,sum;
max=-32768; /先假设当前的最大值max为C语言整型数的最小值/
min=32767; /先假设当前的最小值min为C语言整型数的最大值/
sum=0; /将求累加和变量的初值置为0/
for(i=1;i<=10;i++)
{
printf("Input number %d=",i);
scanf("%d",&integer); /输入评委的评分/
sum+=integer; /计算总分/
if(integer>max)max=integer; /通过比较筛选出其中的最高分/
if(integer }
printf("Canceled max score:%d Canceled min score:%d ",max,min);
printf("Average score:%d ",(sum-max-min)/8); /输出结果/
}
*运行结果
Input number1=90
Input number2=91
Input number3=93
Input number4=94
Input number5=90
Input number6=99
Input number7=97
Input number8=92
Input number9=91
Input number10=95
Canceled max score:99
Canceled min score:90
Average score:92
*思考题
题目条件不变,但考虑同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接返平均分)和最不公平(即与平均分的差距最大)的评委,程序应该怎样实现?
求最大数
问555555的约数中最大的三位数是多少?
*问题分析与算法设计
根据约数的定义,对于一个整数N,除去1和它自身外,凡能整除N的数即为N的约数。因此,最简单的方法是用2到N-1之间的所有数去除N,即可求出N的全部约数。本题只要求取约数中最大的三位数,则其取值范围可限制在100到999之间。
*程序说明与注释
#include
void main()
{
long i;
int j;
printf("Please input number:");
scanf("%ld",&i);
for(j=999;j>=100;j--)
if(i%j==0)
{
printf("The max factor with 3 digits in %ld is:%d, ",i,j);
break;
}
}
*运行结果
输入:555555
输出:The max factor with 3 digits in 555555 is:777