这次上机还是类中有多个对象,对二维数组的数据进行处理。比上次上机多了一个比较大小排序的要求,一开始尝试冒泡法一个一个比较很容易就做了出来;后面又尝试选择法,代码如下,只需要两个for循环嵌套在一起就可以。其中也用到了交换指令swap,非常简便,不需要定义中间变量交换值。在写代码时一开始循环的嵌套出了点问题,因为这是一个二维数组,比出第一组的大小之后还要嵌入剩下几组的循环,折腾了一会;尝试第三种插入法比较,就是把第二个数和第一个比较,如果大于第一个数就交换位置,不大于就不变,然后第三个数和前两个比较插入,以此类推,就能由大到小排序,代码如下。选择法和插入法比较来看的话,选择法便于理解一点,形式上比较简单易懂;插入法感觉比较绕一点,尤其是直接看代码没那么好懂,但不需要一个数从头比到尾,代码运行过程会省去一些步骤,运行应该会更快一点。
第一部分代码为插入比较法,第二段代码为整个程序的代码,用的选择法排序。
void showcmpscore()
{
cout << "各科成绩排序为:" << endl;
for(int a=1; a<=3; a++)
{
for(int i=1; i<num; i++)
{
for(int j=i; j>0; j--)
{
if(score[j-1][a]<score[j][a])
swap(score[j-1][a],score[j][a]);
}
}
for(int j=0; j<num; j++)
{
cout << score[j][a] <<",";
}
cout << endl;
}
}
#include<iostream>
using namespace std;
class students {
public:
students()
{
num = 2;
}
students(int num1)
{
num = num1;
}
~students()
{}
void inputscore()
{
for (int i=0; i < num; i++)
{
cout << "请输入姓名:" << endl;
cin >> name;
cout <<"请输入scoreA:" << endl;
cin >> score[i][1];
cout << "请输入scoreB:" << endl;
cin >> score[i][2];
cout << "请输入scoreC:" << endl;
cin >> score[i][3];
}
}
void showscore()
{
cout << "每位同学的成绩是" << endl;
for (int i=0; i < num; i++)
{
cout << score[i][1] << "," << score[i][2] << "," << score[i][3] << endl;
}
}
void showavg1score()
{
float avg1 = 0;
float avg2 = 0;
for (int i = 1; i <= 3 ; i++)
{
avg1 = avg1 + score[0][i];
avg2 = avg2 + score[1][i];
}
avg1 = avg1 / 3;
avg2 = avg2 / 3;
cout << "每位同学的平均成绩为" << endl;
cout << avg1 << ", " << avg2 << endl;
}
void showavg2score()
{
float avgA = 0;
float avgB = 0;
float avgC = 0;
for (int i = 0; i < num; i++)
{
avgA = avgA + score[i][1];
avgB = avgB + score[i][2];
avgC = avgC + score[i][3];
}
avgA = avgA / num;
avgB = avgB / num;
avgC = avgC / num;
cout << "每科平均成绩为:" << endl;
cout << avgA << ", " << avgB << ", " << avgC << endl;
}
void showcmpscore()
{
cout << "各科成绩排序为:" << endl;
for(int a=1; a<=3; a++)
{
for(int i=0; i<num; i++)
{
for(int j=i; j<num; j++)
{
if(score[i][a]<score[j][a])
swap(score[i][a],score[j][a]);
}
}
for(int j=0; j<num; j++)
{
cout <<score[j][a]<<",";
}
cout<<endl;
}
}
private:
float score[100][100];
char name[10];
int num;
};
int main()
{
students x;
x.inputscore();
x.showscore();
x.showavg1score();
x.showavg2score();
x.showcmpscore();
return 0;
}
。就是让第一个数据和后面的所有数据轮流比较,把最大的交换到数组的第一个位置,然后再用第二个数据重复上述过程,以此类推,在这