设计一统计某班级考试成绩中的最高分、最低分和平均分的程序
一、简单一版的成绩管理,循环语句,并未要求保留每位学生的成绩(这就应该需要用数组了)。
1.已知人数,for循环:
#include <iostream>using namespace std;int main(){int num, value, max, min, all;//value存放当前输入成绩double ave;//变量的初始化max = 0;min = 100;all = 0;cout << "请输入学生人数:";cin >> num;for (int i = 0; i < num; ++i)//num次循环{cout << "请输入第"<<i+1<<"个人的成绩:";cin >> value;max = value > max ? value : max;// if(value > max) max = value;min = value < min ? value : min;//if(value < min) min = value;all += value;}ave = (double)all / num;cout << "最高分:" << max << endl;cout << "最低分:" << min << endl;cout << "平均分:" << ave << endl;return 0;}
最后运行结果:
2.不知人数,while循环(-1作为结束标志):
#include <iostream>using namespace std;int main(){int num, value, max, min, all;//value存放当前输入成绩,num为学生人数double ave;//变量的初始化max = 0;min = 100;all = 0;num = 0;cout << "请输入第1位同学的成绩:";cin >> value;while(value != -1){++num;max = value > max ? value : max;// if(value > max) max = value;min = value < min ? value : min;//if(value < min) min = value;all += value;cout << "请输入第" << num + 1 << "位同学的成绩:";cin >> value;}ave = (double)all / num;cout << "最高分:" << max << endl;cout << "最低分:" << min << endl;cout << "平均分:" << ave << endl;return 0;}
运行结果:
二、利用数组存储每位同学的成绩
题目:统计某次考试的最高分、最低分、平均成绩和方差(要求方差,就必须保存每一位同学的成绩)
#include <iostream>#include <cmath>using namespace std;int main(){const int nummax = 100; //定义一个班同学的最大人数int score[nummax], num;double max = 0, min = 100, ave, total = 0, var = 0;//var表示方差cout << "请输入本次考试的人数:";cin >> num;for (int i = 0; i < num; ++i){cout << "请输入第" << i + 1 << "位同学的成绩:";cin >> score[i];total += score[i];if (max < score[i]) max = score[i];if (min > score[i]) min = score[i];}ave = total / num;for (int i = 0; i < num; ++i){var += (score[i] - ave) * (score[i] - ave);}cout << "此次考试的最高分为:" << max << endl;cout << "此次考试的最低分为:" << min << endl;cout << "此次考试的平均分为:" << ave << endl;cout << "此次考试的方差为:" << var << endl;return 0;}
运行结果:
三、利用函数进行计算
函数将不同的计算模块进行封装,可以使程序较容易理解 题目(同上):统计某次考试的最高分、最低分、平均成绩和方差 运行代码如下:
#include <iostream>using namespace std;//函数原型声明double ave(int n,double array[]); //求平均值double max(int n, double array[]);//求最大值double min(int n, double array[]);//求最小值double var(double ave, int n, double array[]);//求方差//主函数int main(){const int nummax = 100; //定义一个班同学的最大人数double score[nummax];double num;double average;cout << "请输入本次考试的人数:";cin >> num;for (int i = 0; i < num; ++i){cout << "请输入第" << i + 1 << "位同学的成绩:";cin >> score[i];}average = ave(num, score);//当数组作为函数参数时,要注意只需写入数组名(本质上是数组首位的地址)cout << "此次考试的最高分为:" << max(num,score) << endl;cout << "此次考试的最低分为:" << min(num,score) << endl;cout << "此次考试的平均分为:" << ave(num,score) << endl;cout << "此次考试的方差为:" << var(average, num, score) << endl;return 0;}//函数定义double ave(int n,double array[]){int i;double sum = 0;for (i = 0; i < n; ++i){sum += array[i];}return sum / n;}double max(int n, double array[]){double max = 0;int i;//不断更新max值,若array[i]大于当前max值则进行max值的更新for (i = 0; i < n; ++i){max = ( array[i] > max ? array[i] : max );}return max;}double min(int n, double array[]){double min = 100;int i;for (i = 0; i < n; ++i){min = ( array[i] < min ? array[i] : min );}return min;}double var(double ave, int n, double array[]){double variance = 0;for (int i = 0; i < n; ++i){variance += (array[i] - ave) * (array[i] - ave);}return variance;}
运行结果:
四、利用指针计算
题目:程序运行时,先输入学生数,然后输入每位同学的成绩,统计某次考试的最高分、最低分、平均成绩和方差(要求方差,就必须保存每一位同学的成绩)
在第二种数组和函数方法中,我们虽然实现了每个学生的成绩存储,但是对于学生人数做了限定,最多为100人,这有两个问题:
如果某次考试的人数超过100人,该程序将无法工作如果参加考试的人数很少,如只有十个,该程序将造成90%空间的浪费
解决这两个问题的途径就是使用动态数组,我们可以根据实际参加考试的人数申请一个存放考试成绩的动态数组。
运行代码如下:
#include <iostream>#include <cmath>using namespace std;int main(){int num;double max = 0, min = 100, ave, total = 0, var = 0;//var表示方差cout << "请输入本次考试的人数:";cin >> num;int* score;//定义指针数组score = new int[num];//动态申请空间for (int i = 0; i < num; ++i){cout << "请输入第" << i + 1 << "位同学的成绩:";cin >> score[i];total += score[i];if (max < score[i]) max = score[i];if (min > score[i]) min = score[i];}ave = total / num;for (int i = 0; i < num; ++i){var += (score[i] - ave) * (score[i] - ave);}cout << "此次考试的最高分为:" << max << endl;cout << "此次考试的最低分为:" << min << endl;cout << "此次考试的平均分为:" << ave << endl;cout << "此次考试的方差为:" << var << endl;delete[]score;//动态回收空间return 0;}
运行结果:
完结撒花!!!