C语言期末课程设计 2.大奖赛计分系统

问题及代码:

 

/*烟台大学计算机学院
题目描述:(1)在歌手大奖赛中,有n位评委为参赛的选手打分,分数为0~10分(运行时由人输入)。
选手最后得分为:去掉一个最高分和一个最低分后其余分数的平均值。
请编写一个程序,完成相关的功能。
要求利用一个函数void calScore(int n),对一位选手成绩的输入成绩、计算和显示实现,
其中n为评委人数。这样,在main函数调用时,需要将输入的评委人数n作为实参。
输入:n位评委给选手找的分,n个0-10之间的小数
输出:选手的最后得分,即n个成绩中去掉一个最高,去掉一个最低后的平均成绩。结果输出中,保留3位小数。
作者:景怡乐
完成时间:2016年12月29日
*/
#include <stdio.h>
void calScore (int n);
int main ()
{
	int n;
	printf("输入评委人数:");
	scanf("%d",&n);
	calScore(n);
		return 0;
}
	void calScore (int n)
	{
	    int i;
	    double score,max=-1,min=11,sum=0;
	    double average;
	    printf("请输入选手的成绩(0-10)\n");
	for(i=1;i<=n;i++)
	{
	    printf("第%d位评委给分:",i);
		scanf("%lf",&score);//0=<score<=9.
		sum=sum+score;
		if (score>max)
		max=score;
	    if (score<min)
		min=score;
	}
	average=(sum-max-min)/(n-2);
	printf("减去一个最高分:%.2lf, 减去一个最低分:%.2lf\n",max,min);
	printf("当前选手的最后得分是:");
	printf("%.3f",average);
	}

运行结果:

 

 

/*烟台大学计算机学院
题目描述:(2) 进一步完善(1)的程序。
输入时,难免有录入错误发生,如果输入的成绩不在0-10之间,要求用户立即重新输入(在函数calScore中修改);
一次运行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后,
提示“按任意键计算下一位选手的成绩,退出请选择N:
”如果输入的不是N或n,可以为下 一位选手计算成绩(在main函数中进行控制即可)。
输入:n位评委给选手找的分,n个0-10之间的小数
输出:选手的最后得分,即n个成绩中去掉一个最高,去掉一个最低后的平均成绩。结果输出中,保留3位小数。
作者:景怡乐
完成时间:2016年12月29日
*/
#include <stdio.h>
void calScore (int n);
int main ()
{
	int n;
	char d;
	printf("输入评委人数:");
	scanf("%d",&n);
	calScore(n);
	printf("按任意键计算下一位选手的成绩,退出请选择N\n");
	while((d=getchar()!='n')&&(d=getchar()!='N'))
        calScore(n);
		return 0;
}
	void calScore (int n)
	{
       int i;
	    double score,max=-1,min=11,sum=0;
	    double average;
	    printf("请输入选手的成绩(0-10)\n");
	for(i=1;i<=n;i++)
	{
	    printf("第%d位评委给分:",i);
		scanf("%lf",&score);//0=<score<=9.
		if(score<0||score>10)
     {
         i--;
         continue;//直接跳过本次循环中剩余的语句,即此输入数据作废。
     }
		sum=sum+score;
		if (score>max)
		max=score;
	    if (score<min)
		min=score;
	}
	average=(sum-max-min)/(n-2);//注意运算优先级
	printf("减去一个最高分:%.2lf, 减去一个最低分:%.2lf\n",max,min);
	printf("当前选手的最后得分是:");
	printf("%.3f\n",average);
	}

运行结果:

 

 

再更新一波代码,关于输入非数字情况的处理:

#include <stdio.h>
#include <cctype>
void calScore (int n);
int main () {
	int n;
	char d;
	printf("输入评委人数:");
	scanf("%d",&n);
	getchar();
	calScore(n);
	printf("按任意键计算下一位选手的成绩,退出请选择N\n");
	while((d=getchar()!='n')&&(d=getchar()!='N'))
		calScore(n);
	return 0;
}
void calScore (int n) {
	int i;
	double score,max=-1,min=11,sum=0;
	double average;
	printf("请输入选手的成绩(0-10)\n");
	for(i=1; i<=n; i++) {
		printf("第%d位评委给分:",i);
		char c;
		c=getchar();
		getchar();
		if(isdigit(c)) {
			score=c-'0';
			//	printf("%lf  ",score);
			if(score>0&&score<10) {
				sum=sum+score;
			}
		} else {
			printf("输入有误,请重新输入!\n");
			i--;
			continue;
		}
		if (score>max)
			max=score;
		if (score<min)
			min=score;
	}
	average=(sum-max-min)/(n-2);//注意运算优先级
	printf("减去一个最高分:%.2lf, 减去一个最低分:%.2lf\n",max,min);
	printf("当前选手的最后得分是:");
	printf("%.3f\n",average);
}

知识点总结:要注重程序的实用性,并考虑到各种情况的处理情况。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎曼猜想·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值