1004:成绩排名
题略
1.如何输入
C++提供的结构体可以处理不同类型的数据。
struct Student{ //定义一个结构体类型
char name[11];
char number[11];
int score;
};
然后将结构体定义为一维数组,for循环读入学生的姓名、学号、成绩
Student stu[n]; //n为学生人数
for(int i = 0;i < n;i++)
cin>>stu[i].name>>stu[i].number>>stu[i].score;
2.输出问题
最好的办法是对stu数组按成绩进行排序,我是按照从大到小的顺序进行排序的,这样,第一个数组元素就是成绩最高的学生信息,最后一个数组元素就是成绩最低的学生信息,排完序后直接输出即可。
说到排序,就涉及到交换,为了简化程序,定义一个swap函数
void swap(Student *p1,Student *p2){
Student temp;
temp = *p2;
*p2 = *p1;
*p1 = temp;
}
嵌套的for循环实现排序功能
for(int i = 0;i < n;i++){
for(int j = i + 1;j < n;j++){
if(stu[i].score < stu[j].score){
swap(&stu[i],&stu[j]);
}
}
}
完整的代码如下
#include<iostream>
using namespace std;
struct Student{ //定义一个结构体类型
char name[11];
char number[11];
int score;
};
//交换
void swap(Student *p1,Student *p2){
Student temp;
temp = *p2;
*p2 = *p1;
*p1 = temp;
}
int main(){
int n,i,j;
cin>>n;
Student stu[n],temp; //学生人数
for(i = 0;i < n;i++)
cin>>stu[i].name>>stu[i].number>>stu[i].score;
for(int i = 0;i < n;i++){
for(int j = i + 1;j < n;j++){
if(stu[i].score < stu[j].score){
swap(stu[i],stu[j]);
}
}
}
cout<<stu[0].name<<' '<<stu[0].number<<endl;
cout<<stu[n - 1].name<<' '<<stu[n - 1].number<<endl;
}