【项目2- 成绩处理】
在数组score中将要存储某小组C++程序设计的成绩,请设计实现下面的各功能函数,并在main函数中调用,组合成一个完整的应用:
(1)输入小组人数及成绩,要保证成绩在0-100之间;
(2)输出该小组的最高成绩、最低成绩、平均成绩;
(3)输出考得最高成绩和最低成绩的同学的人数;
(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。
(5)(选做)求出所有同学成绩的标准偏差,标准偏差公式为,其中为xi样本(即某同学成绩),x(上带一横)为均值(前面已经求出),N为样本数目;
提示1:可以采用“渐进式”策略,实现一个功能后调试通过,再实现下一个功能。
提示2:界面参考见图
提示3:请思考,如果这里的同学人数很多,例如500、10000名,这个程序中通过键盘输入的方式,已经显得无能为力!如何解决?见本讲项目7。
参考解答:
#include<iostream> #include<cstdio> #include<Cmath> using namespace std; int main(void) { int score[50]; //保存成绩的数组,不会超过50名 int num,i; //小组人数 //freopen("input.txt","r",stdin); cout<<"小组共有多少名同学?"; cin>>num; cout<<"请输入学生成绩:"<<endl; //输入num名同学的成绩 for(i=0; i<num; i++) do { cout<<"输入第 "<<i<<" 位同学的成绩:"; cin>>score[i]; } while(score[i]<0||score[i]>100); //求最高成绩、最低成绩和平均成绩 int max = -1,min=999,sum=0,ave; for(i=0; i<num; i++) { sum+=score[i]; if(max<score[i]) max= score[i]; if(min>score[i]) min = score[i]; } ave=sum/num; cout<<endl<<"最高成绩为:"<<max <<",最低成绩为:"<<min<<",平均成绩为:"<<ave<<endl; //求考得最高成绩和最低成绩人数 int max_num = 0, min_num =0; for(i=0; i<num; i++) { if(max==score[i]) max_num++; if(min==score[i]) min_num++; } //输出考得最高成绩的人数和学号 cout<<"取得最高成绩"<<max<<"分的共 "<<max_num<<" 人,他们的学号是:"; for(i=0; i<num; i++) { if(max==score[i]) cout<<i<<" "; } cout<<endl; cout<<"取得最低成绩"<<min<<"分的共 "<<min_num<<" 人,他们的学号是:"; //输出考得最低成绩的人数和学号 for(i=0; i<num; i++) { if(min==score[i]) cout<<i<<" "; } cout<<endl; //求出并输出标准偏差(选做) sum = 0; int x; //x表示成绩与均值之差 for(i=0; i<num; i++) { x=score[i]-ave;//ave是前面求出的平均成绩 sum+=x*x; } cout<<"标准偏差为:"<<sqrt(double(sum)/(num-1))<<endl; return 0; }
=================== 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 ===== |