题目详情
编写函数,使用指针对学生成绩单进行冒泡排序,从小到大。成绩单的内容包括学号和成绩,学号和成绩都是整数,成绩相同时学号小的在前。要求函数中不出现下标运算。
编写主函数,输入若干学生的学号和成绩,以0 0 为结束标志。调用函数排序,在主函数中输出。学生总人数不超过100个。
输入格式:
若干行,每行是一个学生的学号和成绩,用空格隔开。以最后一行是0 0 ,为结束标志。
输出格式:
若干行,按成绩从大到小排序的名单。每行是一个学生的学号和成绩,用一个空格隔开。
输入样例:
1 81
2 62
3 67
0 0
输出样例:
2 62
3 67
1 81
- 下面代码
#include <iostream>
using namespace std;
struct Student{
int Id;
int Score;
};
int main()
{
Student *p = new Student [100], tmp;
cin>>tmp.Id>>tmp.Score;
int i=0,n,j;
while(tmp.Id||tmp.Score){
*(p+i)=tmp;
cin>>tmp.Id>>tmp.Score;
i++;
}
n=i; //记录学生个数
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if( (p+j)->Score > (p+j+1)->Score ){
tmp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=tmp;
}
}
}
for(i=0;i<n;i++)
cout<<(p+i)->Id<<' '<<(p+i)->Score<<endl;
delete []p;
return 0;
}