C语言PTA题目:7-18 1018 成绩排序

文章目录

输入格式

输出格式

输入样例

输出样例

知识点简述:结构体

解题代码


已知某个班有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;
}

猜你喜欢

转载自blog.csdn.net/weixin_63249578/article/details/128530098