C++ 指针实现成绩排序(二维数组)

题目内容:

编写函数,使用指针对学生成绩单进行冒泡排序,从小到大。成绩单的内容包括学号和成绩,学号和成绩都是整数,成绩相同时学号小的在前。要求函数中不出现下标运算。

编写主函数,输入若干学生的学号和成绩,以0 0 为结束标志。调用函数排序,在主函数中输出。学生总人数不超过100个。

输入格式:

若干行,每行是一个学生的学号和成绩,用空格隔开。以最后一行是0 0 ,为结束标志。

输出格式:

若干行,按成绩从大到小排序的名单。每行是一个学生的学号和成绩,用一个空格隔开。

输入样例:

1 81

2 62

3 67

0 0

输出样例:

2 62

3 67

1 81

#include <iostream>

using namespace std;
void sort(int a[100][2],int n)
{//形参是指向二维数组第一行第一列元素的指针
    int (*p)[2],(*q)[2];//定义两个指向二维数组的行指针
    for(p=a;p<a+n;p++)
    {//遍历每一行
        for(q=p;q<a+n;q++)
        {
            if(*(*q+1)<*(*p+1))
            {//比较每一行的第一列元素
                int tmp=*(*p);*(*p)=*(*q);*(*q)=tmp;//换两行的第零列
                int t=*(*p+1);*(*p+1)=*(*q+1);*(*q+1)=t;//换两行的第一列
            }
            else if(*(*q+1)==*(*p+1))
            {//如果两行第一列相等(成绩相同)
                if(*(*q)<*(*p))
                {
                    int tmp=*(*p);*(*p)=*(*q);*(*q)=tmp;//换两行的第零列
                    int t=*(*p+1);*(*p+1)=*(*q+1);*(*q+1)=t;//换两行的第一列
                }
            }
        }
    }
}
int main()
{
    int a[100][2];//用一个整型的二维数组来存放数据
    int i=0;
    //输入数据
    for(i=0;i<100;i++)
    {
        for(int j=0;j<2;j++)
        {
            cin>>a[i][j];

        }
        if(a[i][0]==0 && a[i][1]==0)
            break;
    }
    sort(a,i);//冒泡排序
    //输出数据
    for(int k=0;k<i;k++)
    {
        for(int j=0;j<2;j++)
        {
            if(j==0)
                cout<<a[k][j];
            else
                cout<<" "<<a[k][j];
        }
        cout<<endl;
    }
}
发布了11 篇原创文章 · 获赞 0 · 访问量 314

猜你喜欢

转载自blog.csdn.net/qiankendeNMY/article/details/105437626
今日推荐