2021年11月21日

  这次上机还是类中有多个对象,对二维数组的数据进行处理。比上次上机多了一个比较大小排序的要求,一开始尝试冒泡法一个一个比较很容易就做了出来;后面又尝试选择法,代码如下,只需要两个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;
}

。就是让第一个数据和后面的所有数据轮流比较,把最大的交换到数组的第一个位置,然后再用第二个数据重复上述过程,以此类推,在这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值