课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597
【课后练习1】
完成下面“歌手大奖赛计分程序”的设计(至少一项要求):
1、在歌手大奖赛中,有10位评委为参赛的选手打分,分数为0~10分(运行时由人控制)。选手最后得分为去掉一个最高分和一个最低分后的平均值。请编写一个程序实现计分。
2、做一个更通用的计分程序,评委人数n可以在输入成绩之前输入,从而评委人数可以灵活调整。
3、进一步完善程序。一次运行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后,提示“按任意键继续,退出请选择N:”如果输入的不是N或n,可以为下一位选手计算成绩,从而一次运行程序可以支持多位选手的成绩计算。
提示1:参考例9.24——输入固定数目的数字、求和;参考例9.23——若干数求和、求最大、求最小。
提示2:可以按照下面的界面设计。
参考解答:
1、在歌手大奖赛中,有10位评委为参赛的选手打分,分数为0~10分(运行时由人控制)。选手最后得分为去掉一个最高分和一个最低分后的平均值。请编写一个程序实现计分。
#include<stdio.h> int main( ) { int i; float ave, score, sum, max, min; max=-1; //这儿有技巧,第1位评委给的成绩一定大于-1,max将变成第1个成绩 min=11; //同样和技巧,要学会这样“设圈套” sum=0; printf("请输入选手的成绩(0-10)\n"); for(i=1;i<=10;i++) { printf("第 %d 位评委给分:", i); scanf("%f",&score); sum+=score; if(max<score) max=score; if(min>score) min=score; } ave = (sum-max-min)/8; printf("减去一个最高分: %.2f\n", max); printf("减去一个最低分: %.2f\n", min); printf("当前选手的最后得分是: %.2f\n", ave); return 0; }
#include<stdio.h> int main( ) { int i,n; float ave, score, sum, max, min; max=-1; min=11; sum=0; printf("有几位评委:"); scanf("%d",&n); printf("请输入选手的成绩(0-10)\n"); for(i=1;i<=n;i++) { printf("第 %d 位评委给分:", i); scanf("%f",&score); sum+=score; if(max<score) max=score; if(min>score) min=score; } ave = (sum-max-min)/(n-2); printf("减去一个最高分: %.2f\n", max); printf("减去一个最低分: %.2f\n", min); printf("当前选手的最后得分是: %.2f\n", ave); return 0; }
#include<stdio.h> int main( ) { int i,n; float ave, score, sum, max, min; char ch ='y'; printf("有几位评委:"); scanf("%d",&n); while(ch !='n'&&ch !='N') { max=-1; min=11; sum=0; printf("请输入选手的成绩(0-10)\n"); for(i=1; i<=n; i++) { printf("第 %d 位评委给分:", i); scanf("%f",&score); sum+=score; if(max<score) max=score; if(min>score) min=score; } ave = (sum-max-min)/(n-2); printf("减去一个最高分: %.2f\n", max); printf("减去一个最低分: %.2f\n", min); printf("当前选手的最后得分是: %.2f\n", ave); printf("按任意键继续,退出请输入N"); rewind(stdin);//清空输入缓冲区 ch=getchar(); } return 0; }
#include <stdio.h> int main() { int i,j,k,count=0; for(i=0; i<=100; i++) for(j=0; j<=50; j++) for(k=0; k<=20; k++) { if(i+j*2+k*5==100) //判断是否正好兑换成功 { count++; printf("第%3d种: 1分钱%d枚,2分钱%d枚,5分钱%d枚\n", count, i, j, k); } } return 0; }
#include <stdio.h> int main () { int red,white,black; printf("不同的颜色搭配有:\n"); for(red=0; red<=3; red++) for(white=0; white<=3; white++) { black=8-red-white; if(black<=6) { printf("红球:%d, 白球: %d, 黑球: %d。\n", red, white, black); } } return 0; }
参考解答:
#include <stdio.h> int main() { int dou,yao,xue,c,s;//变量这样取,比有些题解上用i,j,p,q之类的要清晰得多 for(dou=1; dou<3; dou++) for(yao=0; yao<10; yao++) { for(xue=0; xue<10; xue++) for(c=0; c<10; c++) //一个技巧:表示两两不同可以如下表达 if((dou-yao)*(dou-xue)*(dou-c)*(yao-xue)*(yao-c)*(xue-c)!=0) { s=4*c+3*xue*10+2*yao*100+dou*1000; if(2008==s) printf("都:%d 要:%d 学:%d C:%d\n",dou,yao,xue,c); } } return 0; }
能够辨别数量为※9,单价为※3※.00元,而总金额是83※2.00元,其中※处为1个数字,由于被涂改无法辨认。这难不倒学过编程的法133的同学,请编程找出※表示哪个数字。
计算结果为:数量:19,单价:438,金额:8322
参考解答:
#include<stdio.h> int main() { int a,b,c,d; for(a=1; a<=9; a++) { for(b=1; b<=9; b++) { for(c=0; c<=9; c++) { for(d=0; d<=9; d++) { if (((a*10+9)*(b*100+30+c))==(8302+d*10)) { printf("数量:%d,单价量:%d,金额:%d\n",a*10+9,b*100+30+c,8302+d*10); } } } } } return 0; }