题目:黑马程序员b站课程P49(多维数组记录学生三科目成绩+冒泡排序排出学生成绩排名)
答案:
#include<iostream>
#include<string>
using namespace std;
int main() {
int grade[5][4];
string course_name[4] = { "语文","数学","英语","总成绩" };
for (int line0 = 0; line0 <= 4; ++line0) {
grade[line0][3] = 0;
}
cout << "请为5位同学做好编号,按编号从小到大依次输入6位同学的语文、数学、英语成绩。" << endl <<
"系统会给出5位同学总分数的排序。" << endl <<endl<<
"请输入5位同学分数:" << endl;
//成绩录入与总成绩计算模块
int storage1;
for (int line1 = 0; line1 <= 4; ++line1) {
cout << endl<<"第" << line1 + 1 << "位同学成绩:"<<endl;
for (int column1=0; column1 <= 2; ++column1) {
cout << course_name[column1] << ":";
cin >> storage1;
if (storage1 < 0 || storage1>100) {
cout << "(该成绩有误,请在右侧重新输入:)";
cin >> storage1;
}
grade[line1][column1]=storage1;
grade[line1][3] = grade[line1][3] + grade[line1][column1];
}
}
//成绩打印模块
cout <<endl<< "成绩输入完成,以下是输入的成绩:" << endl;
for (int line2 = 0; line2 <= 4; ++line2) {
cout << "编号" << line2 + 1 << "同学成绩:";
for (int column2 = 0; column2 <= 3; column2++) {
cout << course_name[column2] << ":" << grade[line2][column2] << " ";
}
cout << endl;
}
//总成绩排序与输出
cout <<endl<< "以下是按总成绩排序的学生成绩:" << endl;
int storage2[4];
for (int rank_count = 3; rank_count >= 0; --rank_count) {
for (int line3 = 0; line3 <= rank_count; ++line3) {
if (grade[line3][3] < grade[line3 + 1][3]) {
for (int column3 = 0; column3 <= 3; ++column3) {
storage2[column3] = grade[line3 + 1][column3];
grade[line3 + 1][column3] = grade[line3][column3];
grade[line3][column3] = storage2[column3];
}
}
}
}
for (int line4 = 0; line4 <= 4; ++line4) {
cout << "第"<<line4+1<<"名成绩:";
for (int column4 = 0; column4 <= 3; column4++) {
cout << course_name[column4] << ":" << grade[line4][column4] << " ";
}
cout << endl;
}
return 0;
}
错误总结:
1. 数组下标运算中,数组中元素编号从0开始计算(即第一个元素用[0]访问,第二个元素用[1]访问,……);
2. 数组中的元素若未初始化或进行过赋值,不会被默认为0,此时直接用它进行计算会出bug;
3. 冒泡排序大致流程:对于n组数据,第一次排序确定n组数据中最小(大)的,第二次排序确定剩余(n-1)个数据中最小(大)的,……;