设计一统计某班级考试成绩中的最高分、最低分和平均分的程序
一、简单一版的成绩管理,循环语句,并未要求保留每位学生的成绩(这就应该需要用数组了)。
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;
}
运行结果:
完结撒花!!!