C++ 歌手大奖赛计分系列
来源:互联网 发布:二次型的矩阵的标准型 编辑:程序博客网 时间:2024/05/22 01:52
/* *歌手大奖赛计分系列 *(1)在歌手大奖赛中,有10个评委为参赛的选手打分,分数为0~10分(运行时由人控制)。 * 选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。 *(2)将计算选手成绩的功能(包括输入成绩、计算和显示结果)利用一个函数void calScore(int n)实现。 * 为增大函数的适用面,有评委人数由函数的参数n决定(这样,在main函数调用时,需要将评委人数作为实参)。 *(3)进一步完善(2)的程序。输入时,难免有录入错误发生,如果输入的成绩不在0-10之间, * 要求用户立即重新输入(在函数calScore中修改); * 一次运行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后, * 提示“按任意键计算下一位选手的成绩,退出请选择N:”如果输入的不是N或n, * 可以为下一位选手计算成绩(在main函数中进行控制即可)。 */void callScore(int n){ cout<<"大赛有 "<<n<<" 位评委"<<endl; if(n<=0) { return; } float *aScore = new float[n]; int i=1; while(i<=n) { cout<<"第 "<<i<<" 位评委的分数(0.00-10.00): "<<endl; cin>>aScore[i-1]; // 出错处理,防止输入非数字字符。 if (cin.fail()) { cin.clear(); cin.ignore(); continue; } if(aScore[i-1] < 0 || aScore[i-1] > 10) { cout<<"输入的成绩不再0-10之间,重新输入!"<<endl; continue; } i++; } //去掉一个最高分,去掉一个最低分 float max = 0; float min = aScore[0]; float sum = 0; float score = 0; for(int j=0;j<n;j++) { aScore[j] >= max?max=aScore[j]:max; aScore[j] >= min?min:min=aScore[j]; sum+=aScore[j]; } //最后得分 cout<<"去掉一个最高分: "<<max<<endl; cout<<"去掉一个最低分: "<<min<<endl; score=(sum-max-min)*1.0/n; cout<<"选手最后得分: "<<score<<endl;}
void main(){char ch;while(true){cout<<"按任意键计算选手的成绩,退出请选择N(n):";cin>>ch;if(ch=='N'||ch=='n'){break;}callScore(5);}}