试验要求:
1.连续输入多位学生成绩(float)(成绩=科目A成绩+科目B成绩+科目C成绩)
2.学生数目可以由用户自定义(默认为2,最多100)
3.显示没为同学的每科成绩和平均分
4.显示每门科目的平均成绩
5.对没门科目进行排序并由高到低显示
6.对整个文件进行打包
试验随笔:
首先要建立类,在类里面声明所需要的变量。我们首先需要两个数组来保存分数和学生姓名,还需要一个记录学生数量的变量。
#include<iostream>
using namespace std;
class Student
{
public:
private:
float score[100][100];
int times;
string name[100];
};
之后写上构造函数,要记得写上析构函数。
class Student
{
public:
Student()
{
times = 2;
cout << "学生数量已被设定为:2" << endl;
}
Student(int times1)
{
times = times1;
cout << " 学生数量已被设定为:" << times << endl;
}
~Student(){}
}
然后就可以按照要求逐个写函数了
首先是要输入学生的姓名和成绩
void InputScore()
{
for (int i = 0; i < times; i++)
{
cout << "请输入学生姓名:" << endl;
cin >> name[i];
cout << "请输入科目A成绩:" << endl;
cin >> score[i][0];
cout << "请输入科目B成绩:" << endl;
cin >> score[i][1];
cout << "请输入科目C成绩:" << endl;
cin >> score[i][2];
}
}
这边使用了一个二维数组来对学生成绩进行保存,用一个一维数组储存学生姓名,通过for循环来实现对含有成绩数据的二维数组,和含有姓名数据的一维字符串数组的输入。
之后便是展示之前输入的学生成绩,按照上一个函数录入的原理,同样通过for循环进行
void ShowScore()
{
for (int i = 0; i < times; i++)
{
cout << "学生的姓名为:" << name[i] << endl;
cout << "科目A成绩:"<< score[i][0] << endl;
cout << "科目B成绩:" << score[i][1] << endl;
cout << "科目C成绩:" << score[i][2] << endl;
}
}
这之后是现实学生三科成绩的平均分
void ShowAvg()
{
float avg = 0;
for (int i = 0; i < times; i++)
{
avg = score[i][0] + score[i][1] + score[i][2];
avg = avg / 3;
cout << "同学" << name[i] << "的平均成绩为:" << endl;
cout << avg << endl;
}
}
通过一个for循环将三科成绩都加起来再均分,最后存入一个变量中来得到
最后是将三科成绩按照由高到低顺序进行排序
void ScoreSort()
{
for (int i = 0; i < times; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 3 - j - 1; k++)
{
if (score[i][k] < score[i][k + 1])
{
float temp;
temp = score[i][k];
score[i][k] = score[i][k + 1];
score[i][k + 1] = temp;
}
}
}
cout << "经过排序后同学" << name[i] << "的成绩由高到低为" << score[i][0] << " " << score[i][1] << " " << score[i][2]<<"\n";
}
}
我在这里使用的是冒泡排序,因为嵌套三层循环,所以效率较低,但是胜在简单。
第一层循环用来循环需要排序的同学,第二层、第三层循环建立排序,最里层循环每一次都是前一个数字与后一个数字进行比较,将大的数字交换到前面。
现在所有要求需要的函数已经完成,开始编辑主函数
int main()
{
Student a(3);
a.InputScore();
a.ShowScore();
a.ShowAvg();
a.ScoreSort();
return 0;
}
将初始学生数量设置为3,载入对象,最后得到结果
完整代码如下
#include<iostream>
using namespace std;
class Student
{
public:
Student()
{
times = 2;
cout << "学生数量已被设定为:2" << endl;
}
Student(int times1)
{
times = times1;
cout << " 学生数量已被设定为:" << times << endl;
}
~Student(){}
void InputScore()
{
for (int i = 0; i < times; i++)
{
cout << "请输入学生姓名:" << endl;
cin >> name[i];
cout << "请输入科目A成绩:" << endl;
cin >> score[i][0];
cout << "请输入科目B成绩:" << endl;
cin >> score[i][1];
cout << "请输入科目C成绩:" << endl;
cin >> score[i][2];
}
}
void ShowScore()
{
for (int i = 0; i < times; i++)
{
cout << "学生的姓名为:" << name[i] << endl;
cout << "科目A成绩:"<< score[i][0] << endl;
cout << "科目B成绩:" << score[i][1] << endl;
cout << "科目C成绩:" << score[i][2] << endl;
}
}
void ShowAvg()
{
float avg = 0;
for (int i = 0; i < times; i++)
{
avg = score[i][0] + score[i][1] + score[i][2];
avg = avg / 3;
cout << "同学" << name[i] << "的平均成绩为:" << endl;
cout << avg << endl;
}
}
void ScoreSort()
{
for (int i = 0; i < times; i++)
{
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 3 - j - 1; k++)
{
if (score[i][k] < score[i][k + 1])
{
float temp;
temp = score[i][k];
score[i][k] = score[i][k + 1];
score[i][k + 1] = temp;
}
}
}
cout << "经过排序后同学" << name[i] << "的成绩由高到低为" << score[i][0] << " " << score[i][1] << " " << score[i][2]<<"\n";
}
}
private:
float score[100][100];
int times;
string name[100];
};
int main()
{
Student a(3);
a.InputScore();
a.ShowScore();
a.ShowAvg();
a.ScoreSort();
return 0;
}