c++实验学习笔记(自用)

#include<iostream> 
#include<string>
using namespace std;
class Score
{
public:
	Score()
	{
		times = 2;
		cout << "Coordinate construction1 called!" << endl;
	}
	Score(int times1)
	{
		times = times1;
		cout << "Coordinate construction2 called!" << endl;
	}
	~Score()
	{
		cout << "Score destruction called!" << endl;
	}
	string name[100];
//成绩输入
	void InputGrade()
	{
		for (int i = 0; i < times; i++)
		{
			cout << "请输入学生姓名:" << endl;
			cin >> name[i];
			cout << "请输入科目A成绩:" << endl;
			cin >> Grade[i][0];
			cout << "请输入科目B成绩:" << endl;
			cin >> Grade[i][1];
			cout << "请输入科目C成绩:" << endl;
			cin >> Grade[i][2];
		}

	}
//单科成绩与姓名对应输出
	void ShowGrade()
	{
		cout << "the Grade is:" << endl;
		for (int i = 0; i < times; i++)
		{
			cout << "姓名:" << name[i] << endl;
			cout << " 科目A成绩: " << Grade[i][0] << " 科目B成绩: " << Grade[i][1] << " 科目C成绩: " << Grade[i][2] << endl;
		}
	}
//单科平均成绩计算并输出
	void ShowAvgGrade()
	{
		float avgA = 0;
		float avgB = 0;
		float avgC = 0;
		for (int i = 0; i < times; i++)
		{
			avgA = avgA + Grade[i][0];
			avgB = avgB + Grade[i][1];
			avgC = avgC + Grade[i][2];
		}
		avgA = avgA / times;
		avgB = avgB / times;
		avgC = avgC / times;
		cout << " 科目A的平均成绩:" << avgA << endl;
		cout << " 科目B的平均成绩:" << avgB << endl;
		cout << " 科目C的平均成绩:" << avgC << endl;
	}
//计算每人的平均成绩并输出
	void ShowAvgeveryoneGrade()
	{
		float a[100];
		float avgeveryone;
		for (int i = 0; i < times; i++)
		{
			a[i] = Grade[i][0] + Grade[i][1] + Grade[i][2];
			avgeveryone = a[i] / 3;
			cout << name[i] << "的平均成绩 :" << avgeveryone << endl;
		}
	}
//对每人的成绩从大到小排序输出
	void Showcjpx()
	{
		string name1[100] = {};
		for (int n = 0; n < 3; n++)
		{
			for (int m = 0; m < times; m++) 
			{
				name1[m] = name[m];
			}
			if (n == 0)
			{
				cout << "课程A的成绩排序:" << endl;
			}
			if (n == 1)
			{
				cout << "课程B的成绩排序:" << endl;
			}
			if (n == 2)
			{
				cout << "课程C的成绩排序:" << endl;
			}
			for (int i = 0; i < times; i++)
			{
				float a = {};
				for (int j = i + 1; j < times; j++)
				{
					if (Grade[i][n] < Grade[j][n])
					{
						a = Grade[i][n];
						Grade[i][n] = Grade[j][n];
						Grade[j][n] = a;
						
						string Name;
						Name = name1[i];
						name1[i] = name1[i + 1];
						name1[i + 1] = Name;
						
					}
				}
			}
			for (int z = 0; z < times; z++)
			{
				cout << "姓名:" << name1[z] << "成绩:" << Grade[z][n] << endl;
			}
		}
	}
private:
	float Grade[100][3];
	int times;
};
int main()
{
	Score x;
	x.InputGrade();
	x.ShowGrade();
	x.ShowAvgGrade();
	x.ShowAvgeveryoneGrade();
	x.Showcjpx();
	return 0;
}

运行结果:

 实验碰到的问题:

(1):

private:
	float Grade[100][3];
	int times;

初始写为float Grade[100][100];

导致程序堆栈被占满了,程序的结果无法运行,定义了一大堆无用的堆栈,反复检查了很久才发现错误所在;

(2):

void Showcjpx()
	{
		string name1[100] = {};
		for (int n = 0; n < 3; n++)
		{
			for (int m = 0; m < times; m++) 
			{
				name1[m] = name[m];
			}
			if (n == 0)
			{
				cout << "课程A的成绩排序:" << endl;
			}
			if (n == 1)
			{
				cout << "课程B的成绩排序:" << endl;
			}
			if (n == 2)
			{
				cout << "课程C的成绩排序:" << endl;
			}
			for (int i = 0; i < times; i++)
			{
				float a = {};
				for (int j = i + 1; j < times; j++)
				{
					if (Grade[i][n] < Grade[j][n])
					{
						a = Grade[i][n];
						Grade[i][n] = Grade[j][n];
						Grade[j][n] = a;
						
						string Name;
						Name = name1[i];
						name1[i] = name1[i + 1];
						name1[i + 1] = Name;
						
					}
				}
			}
			for (int z = 0; z < times; z++)
			{
				cout << "姓名:" << name1[z] << "成绩:" << Grade[z][n] << endl;
			}
		}
	}

首先,对于如何将成绩的名字对应起来,尝试了很多方法,例如构造一个结构函数将成绩与人名绑在一起,发现行不通,然后打算重新定义一个数组实现名字的循环,却发现跟成绩无法对应,最后在成绩的循环体内构造姓名循环实现目标。

其次,完成了对姓名的循环之后发现,若第二人比第一人的成绩高,对姓名排序后后面的姓名排名无法与成绩相对应,反复验证后发现是因为第一次循环后,第二次的循环是在第一次的循环的基础上进行的二次排序,就会导致排序混乱。最后,通过在循环内定义一个姓名循环来对排序后的姓名重置,使得每次的排序都可以使成绩和姓名对应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值