①可以实现循环功能选择,输入评委打分、最高分、最低分、最终成绩、显示评分都由函数实现,成绩保存在数组中,数组大小最大20。②显示最终得分函数有4个参数,分别为所有成绩,成绩个数,最高分和最低分,功能为去除一个最高分和一个最低分,然后计算平均分,显示结果保留小数点后两位。
③必须先选择功能1后才能选择2~5功能,否则要提示;输入1-6以外的功能显示输入错误;输入6退出程序。
#include<stdio.h>
int main(){
long int num;
int wan,qian,bai,shi,ge;
int place;
printf("请输入一个不多于5位的正整数:\n");
scanf("%d",&num);
if(num>9999){
place=5;
}else if(num>999){
place=4;
}else if(num>99){
place=3;
}else if(num>9){
place=2;
}else{
place=1;
}
printf("%d是%d位数\n",num,place);
wan=num/10000;
qian=num/1000%10;
bai=num/100%10;
shi=num/10%10;
ge=num%10;
switch(place){
case 5:
printf("分别打印出每位数字:\n");
printf("%d\n%d\n%d\n%d\n%d\n",wan,qian,bai,shi,ge);
printf("逆序打印出每位数字:\n");
printf("%d\n%d\n%d\n%d\n%d\n",ge,shi,bai,qian,wan);
break;
case 4:
printf("分别打印出每位数字:\n");
printf("%d\n%d\n%d\n%d\n",qian,bai,shi,ge);
printf("逆序打印出每位数字:\n");
printf("%d\n%d\n%d\n%d\n",ge,shi,bai,qian);
break;
case 3:
printf("分别打印出每位数字:\n");
printf("%d\n%d\n%d\n",bai,shi,ge);
printf("逆序打印出每位数字:\n");
printf("%d\n%d\n%d\n",ge,shi,bai);
break;
case 2:
printf("分别打印出每位数字:\n");
printf("%d\n%d\n",shi,ge);
printf("逆序打印出每位数字:\n");
printf("%d\n%d\n",ge,shi);
break;
case 1:
printf("分别打印出每位数字:\n");
printf("%d\n",ge);
printf("逆序打印出每位数字:\n");
printf("%d\n",ge);
break;
default:
break;
}
return 0;
}
```C++
//定义评委打分数组 int a[20]; //定义当前数组数量 int len = 0;
/* * 函数:ratingSysMenu * 功能:显示打分系统菜单,返回用户选择的功能号 * 参数:无 * 返回值: * 返回用户选择的功能号,功能号类型为整型 / int ratingSysMenu() { printf("==========================================\n"); printf("1、输入评委打分\n"); printf("2、最高分\n"); printf("3、最低分\n"); printf("4、最终成绩\n"); printf("5、显示评分\n"); printf("==========================================\n"); printf("请输入功能号(1-5):"); int funcNo; scanf("%d", &funcNo); getchar(); //把最后的回车取出 while (funcNo < 1 || funcNo > 5) { printf("输入超出范围,请重新输入(1-5):"); scanf("%d", &funcNo); getchar(); //把最后的回车取出 } return funcNo; }
/* * 函数:inputScores * 功能:输入评委打分,并保存到a数组中 * 参数:无 * 返回值:无 / void inputScores() { if (len >= 20) { printf("输入的评委打分已达到20个,不能再输入!\n"); return; } printf("请输入评委%d的打分:", len + 1); int score; scanf("%d", &score); getchar(); //把最后的回车取出 a[len++] = score; }
/* * 函数:maxScore * 功能:计算并输出数组中的最高分 * 参数:无 * 返回值:无 / void maxScore() { if (len == 0) { printf("评委打分数组为空,无法计算最高分!\n"); return; } //假设最高分是数组的第0个元素 int max = a[0]; //从第1个元素开始循环,依次比较 for (int i = 1; i < len; i++) { if (a[i] > max) { max = a[i]; } } printf("最高分:%d\n", max); }
/* * 函数:minScore * 功能:计算并输出数组中的最低分 * 参数:无 * 返回值:无 / void minScore() { if (len == 0) { printf("评委打分数组为空,无法计算最低分!\n"); return; } //假设最低分是数组的第0个元素 int min = a[0]; //从第1个元素开始循环,依次比较 for (int i = 1; i < len; i++) { if (a[i] < min) { min = a[i]; } } printf("最低分:%d\n", min); }
/* * 函数:finalScore * 功能:计算并输出每个评委的打分,并输出最终成绩 * 参数:无 * 返回值:无 / void finalScore() { if (len == 0) { printf("评委打分数组为空,无法计算最终成绩!\n"); return; } //先输出每个评委的打分 printf("各评委的打分:"); for (int i = 0; i < len; i++) { printf("%d ", a[i]); } printf("\n"); //去掉一个最高分和一个最低分,剩下打分求平均值 //先假设第0个元素是最高分,第1个元素是最低分 int maxIdx = 0, minIdx = 1; //从第2个元素开始循环,依次比较 for (int i = 2; i < len; i++) { if (a[i] > a[maxIdx]) { maxIdx = i; //a[i]是更高的分数,更新最高分索引 } else if (a[i] < a[minIdx]) { minIdx = i; //a[i]是更低的分数,更新最低分索引 } } float sum = 0; for (int i = 0; i < len; i++) { if (i != maxIdx && i != minIdx) { sum += a[i]; //累加剩下的分数求和 } } float finalScore = sum / (len - 2); //求剩下分数的平均值 printf("最终成绩:%.2f\n", finalScore); }
/* * 函数:showScores * 功能:输出所有评委的打分 * 参数:无 * 返回值:无 / void showScores() { if (len == 0) { printf("评委打分数组为空,无可显示的评分!\n"); return; } printf("各评委的打分:"); for (int i = 0; i < len; i++) { printf("%d ", a[i]); } printf("\n"); }
int main() { int funcNo; while (1) { funcNo = ratingSysMenu(); switch (funcNo) { case 1: inputScores(); break; case 2: if (len == 0) { printf("评委打分数组为空,无法计算最高分!\n"); } else { maxScore(); } break; case 3: if (len == 0) { printf("评委打分数组为空,无法计算最低分!\n"); } else { minScore(); } break; case 4: finalScore