您的位置:首页 > 其它

PAT-1077互评成绩计算

2018-02-26 10:25 232 查看
题目描述:
在浙大的计算机专业课中,经常有互评分组报告这个环节。一个组上台介绍自己的工作,其他组在台下为其表现评分。最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一个最高分和一个最低分,剩下的分数取平均分记为 G1;老师给这个组的评分记为 G2。该组得分为 (G1+G2)/2,最后结果四舍五入后保留整数分。本题就要求你写个程序帮助老师计算每个组的互评成绩。输入格式:输入第一行给出两个正整数N(> 3)和M,分别是分组数和满分,均不超过100。随后N行,每行给出该组得到的N个分数(均保证为整型范围内的整数),其中第1个是老师给出的评分,后面 N-1 个是其他组给的评分。合法的输入应该是[0, M]区间内的整数,若不在合法区间内,则该分数须被忽略。题目保证老师的评分都是合法的,并且每个组至少会有3个来自同学的合法评分。输出格式:为每个组输出其最终得分。每个得分占一行。
输入样例:
6 50
42 49 49 35 38 41
36 51 50 28 -1 30
40 36 41 33 47 49
30 250 -25 27 45 31
48 0 0 50 50 1234
43 41 36 29 42 29
输出样例:
42
33
41
31
37
39
题目分析:
本题目的要求再读入每一个互评成绩时,进行检查成绩是否有效。无效的成绩需要忽略。笔者设置了一个函数judge对每次的互评成绩进行判断。如果成绩满足要求了,将其加入到求和变量中,并设置max min记录当前录入的有效成绩的最大值和最小值。最后sum-max-min即是小组互评的总成绩。另外需要对有效成绩进行计数。老师的评分单独记录到teacher中。每处理完一个小组的互评成绩,求得其平均分记录到对应的avg[]数组当中。
代码如下:
#include<stdio.h>
#include<math.h>
const int maxn=1000;
bool judge(int a,int m){    //判断所录入的成绩是否有效。 
if(a>=0&&a<=m){
return true;        //在题目要求的范围内,返回true 

else return false;      //无效成绩返回false 
}
int main()
{
int n,m,teacher,avg[maxn];//小组数n,满分m,老师对当前录入成绩的小组的评分teacher,最后每组的平均成绩数组avg[]。 
int max,min,gro,sum,count;  //记录当前录入成绩小组的最高分max min,其他小组对该小组的评分gro,该小组当前的有效成绩和sun,有效成绩个数count 
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){       //循环n次,每次处理一个小组 
scanf("%d",&teacher);   //先读入老师的对该小组评分 
sum=0;         //相应变量置零。 
count=0;
max=0;min=100;
for(int j=1;j<n;j++){    // 每次处理一个互评成绩 
scanf("%d",&gro);    //读入互评成绩 
if(judge(gro,m)){    //判断是否有效 
sum+=gro;        //若有效,则加入到求和项 
count++;          //有效成绩个数加一 
if(max<gro){
max=gro;       //更新max,min 
}
if(min>gro){
min=gro;
}
}
}
//printf("%d %d %d\n",max,min,sum) ;
avg[i]=(int)round((double)((sum-max-min)/(count-2)+teacher)/2);   //sum-max-min即是求小组互评成绩的总分,count要减去最大成绩和最小成绩的两个有效成绩 
}                                       //要记得强制类型转换。 
for(int i=0;i<n;i++){
printf("%d\n",avg[i]);      //按照格式输出每个小组的最终平均成绩。 
}
 } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT