文章目录
已知某个班有n(1 <= n <= 100)个学生,输入每行为学生姓名(最多20个字符)和其c语言成绩(0~100),请按照成绩从高到低排序后输出。若有相同的,不能改变其顺序。
输入格式:
输入有多行,每行包括学生姓名和成绩,空格隔开。
输出格式:
按照成绩从高到低排序输出,成绩相同的按照原始顺序。
输入样例:
Zhangsan 80
Lisi 95
Zhouyi 69
Wangwu 73
Zhaoliu 69
输出样例:
Lisi 95
Zhangsan 80
Wangwu 73
Zhouyi 69
Zhaoliu 69
知识点简述:结构体
1.结构体声明的一般形式
struct 结构体名称{
成员列表
};
struct student //结构体 结构体名称
{
char name[20]; //姓名
int score; //成绩
}s[100]; //结构体变量的定义
2.结构体变量定义的一般形式
struct 结构体名 结构体变量名
在本题目的解答中,将结构体变量的定义跟在了结构体声明后面,简化了代码
但要注意的是:这样的定义虽然简便,但是后续不可以再定义新的结构体变量了
3.访问结构体成员的一般形式
结构体变量名.成员名
s[j].score=s[j+1].score; //用此形式访问学生结构体的成绩
解题代码:
#include <stdio.h>
#include <string.h>
struct student
{
char name[20];
int score;
}s[100];
int main()
{
int i,j,b,number;
char a[20];
for(i=0;scanf("%s %d",s[i].name,&s[i].score)!=EOF;i++);
number=i;
for(i=1;i<number;i++)
for(j=0;j<number-1;j++)
if(s[j].score<s[j+1].score)
{
b=s[j].score;
s[j].score=s[j+1].score;
s[j+1].score=b;
strcpy(a,s[j].name);
strcpy(s[j].name,s[j+1].name);
strcpy(s[j+1].name,a);
}
for(i=0;i<number-1;i++)
printf("%s %d\n",s[i].name,s[i].score);
printf("%s %d",s[number-1].name,s[number-1].score);
return 0;
}