IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C++课程学习-实验4 -> 正文阅读

[数据结构与算法]C++课程学习-实验4

实验4 构造函数和析构函数

一、实验内容

实验内容

二、代码

1. .cpp文件

#pragma once

#include "sy4.h"

using namespace std;

class Score {
private:
	int num;
	int panduan;//判断是否采用默认学生人数
	string name[100];
	float chengji[100][4];
	float avg_stu[100];
	float avg_xueke[4];
public:
	Score();//定义构造函数
	~Score();//定义析构函数
	void input();
	void show();
};

Score::Score()
{
	cout << "学生人数默认为2人,若同意则输入“1”,若要自定义学生个数,请输入“0”" << endl;
	cin >> panduan;
	if (panduan)
	{
		num = 2;
	}
	else
	{
		cout << "学生人数为:" << endl;
		cin >> num;
	}

}

Score::~Score()
{
}

void Score::input()
{
	int i = 0;
	int j = 0;
	char z;//将学科1,2,3转化为A,B,C输出
	float sum_A = 0, sum_B = 0, sum_C = 0;
	for (i = 1; i <= num; i++)
	{
		cout << "请输入学生姓名:" << endl;
		cin >> name[i];
		float sum_stu = 0;

		for (j = 1; j <= 3; j++)
		{
			z = j + 64;
			cout << "请输入科目" << z << "的成绩:";
			cin >> chengji[i][j];
			sum_stu = sum_stu + chengji[i][j];
		}
		avg_stu[i] = sum_stu / 3;
		sum_A = sum_A + chengji[i][1];
		sum_B = sum_B + chengji[i][2];
		sum_C = sum_C + chengji[i][3];
	}
	avg_xueke[1] = sum_A / num;
	avg_xueke[2] = sum_B / num;
	avg_xueke[3] = sum_C / num;
}
void Score::show()
{
	int i = 0, j = 0, k = 0;
	char z;//将学科1,2,3转化为A,B,C输出
	float temp = 0;
	string xingming[100];
	string xingming_temp;

	cout << endl;//输出显示上与上边隔开
	for (i = 1; i <= num; i++)//输出每位同学的三科成绩以及平均成绩
	{
		cout << name[i];
		for (j = 1; j <= 3; j++)
		{
			z = j+64;
			cout <<" " << "科目" << z << "的成绩为:" << chengji[i][j];
		}
		cout << " 三科平均成绩为:" << avg_stu[i] << endl;
	}


	cout << endl;//输出显示上与上边隔开
	for (j = 1; j <= 3; j++)//输出每科的平均成绩
	{
		z = j + 64;
		cout << "全体学生科目" << z << "的平均成绩为:" << avg_xueke[j] << endl;
	}


	cout << endl;//输出显示上与上边隔开
	for (j = 1; j <= 3; j++)//对每科成绩由高到低排序,按此顺序输出学生的姓名和成绩
	{
		z = j + 64;
		for (i = 1; i <= num; i++)
		{
			xingming[i] = name[i];
		}
		cout << "科目" << z << "的成绩按由高到低排序为:" << endl;
		for (i = 1; i <= num - 1; i++)//按照成绩由低到高排序,并且成绩变动,名字一起变动
		{
			for (k = i + 1; k <= num; k++)
			{
				if (chengji[i][j] > chengji[k][j])
				{
					temp = chengji[i][j];
					chengji[i][j] = chengji[k][j];
					chengji[k][j] = temp;
					xingming_temp = xingming[i];
					xingming[i] = xingming[k];
					xingming[k] = xingming_temp;
				}
			}
		}
		for (i = num; i >= 1; i--)
		{
			cout << xingming[i] << "  " << chengji[i][j] << endl;
		}
	}
}


int main()
{
	Score stu;
	stu.input();
	stu.show();
	return 0;
}

2. .h文件

#include <iostream>

3.代码运行结果

1.默认人数为2人
默认人数为2人
2.自定义学生人数
自定义学生人数

4.问题汇总

1.该问题的原因请添加图片描述
请添加图片描述
出现该问题的原因是本来要求各个同学的三个平均成绩,但是使用的变量是用来存储全体成员每科平均成绩的,故当学生人数超过该变量数组的大小时会造成内存越界。
2.如此可以正确求出各科的总成绩请添加图片描述
如此不可以请添加图片描述
因为若放在循环中,则重复循环计算了三次,且在第一次由于还未输入科目B和科目C的成绩,此时的chengji[i][2]和chengji[i][3]是随机数。
在这里插入图片描述
3.在对成绩进行排序时,当成绩顺序发生改变时,要想该成绩所对应的名字一起改变位置,并且不能对下面成绩顺序造成影响,需要先把原先输入的名字顺序保存到另一个变量。

for (j = 1; j <= 3; j++)//对每科成绩由高到低排序,按此顺序输出学生的姓名和成绩
	{
		z = j + 64;
		for (i = 1; i <= num; i++)
		{
			xingming[i] = name[i];
		}
		cout << "科目" << z << "的成绩按由高到低排序为:" << endl;
		for (i = 1; i <= num - 1; i++)//按照成绩由低到高排序,并且成绩变动,名字一起变动
		{
			for (k = i + 1; k <= num; k++)
			{
				if (chengji[i][j] > chengji[k][j])
				{
					temp = chengji[i][j];
					chengji[i][j] = chengji[k][j];
					chengji[k][j] = temp;
					xingming_temp = xingming[i];
					xingming[i] = xingming[k];
					xingming[k] = xingming_temp;
				}
			}
		}
		for (i = num; i >= 1; i--)
		{
			cout << xingming[i] << "  " << chengji[i][j] << endl;
		}
	}

4.题目要求是科目A,B,C,而在数组运算中,我们使用的是1,2,3代表,故在输出时通过改变为输出ASCLL码来显示科目A,B,C。

char z;//将学科1,2,3转化为A,B,C输出
for (j = 1; j <= 3; j++)//输出每科的平均成绩
	{
		z = j + 64;
		cout << "全体学生科目" << z << "的平均成绩为:" << avg_xueke[j] << endl;
	}

5.其他的排序方法

排序算法

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:52:03  更:2021-11-19 17:52:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 1:44:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码