日常刷题 zzulioj1197 考试排名(一)(结构体专题)打卡第六天

题目描述
今天浙大研究生复试的上机考试跟传统笔试的打分规则相似,总共有n道题,每道题有对应分值,最后计算总成绩。现给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印。

输入

第1行给出考生人数N ( 1<= N<=100 )、考题数M (1<=M<=10 )、分数线(正整数)G;
第2行排序给出第1题至第M题的正整数分值;
以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号
(题目号由1到M)。

输出

首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考号的升序输出。

样例输入

4 5 25
10 10 12 13 15
CS004 3 5 1 3
CS003 5 2 4 1 3 5
CS002 2 1 2
CS001 3 2 3 5

样例输出

3
CS003 60
CS001 37
CS004 37
代码如下:

#include<stdio.h>
#include<string.h>
struct score
{
    char name[20];
    int n;
    int arr[10];
    int s;
};/*定义结构体变量*/
int main()
{
    int b[10],m,i,j,c,d=0,z;
    struct score a[100],t;
    scanf("%d%d%d",&m,&c,&z);
    for(i=0;i<c;i++)
    {
        scanf("%d",&b[i]);/*输入n门课程各自的分数*/
    }
    for(i=0;i<m;i++)
    {
        a[i].s=0;
        scanf("%s%d",&a[i].name,&a[i].n);/*输入考生的学号和解决的题目数*/
        for(j=0;j<a[i].n;j++)
        {
            scanf("%d",&a[i].arr[j]);/*输入解决的题的题号*/
        }
        }
    for(i=0;i<m;i++)
    {
        for(j=0;j<a[i].n;j++)
        {
            a[i].s+=b[a[i].arr[j]-1];/*计算考生的总分*/
        }
    }
    for(i=1;i<=m;i++)
    {
        for(j=0;j<m-i;j++)
        {
            if(a[j].s<a[j+1].s)
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;/*还是冒泡排序*/
            }
            else if(a[j].s==a[j+1].s&&strcmp(a[j].name,a[j+1].name)>0);
            {
                t=a[j];/*总分相同是按学号升序排列*/
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(i=0;i<m;i++)
    {
        if(a[i].s>=z)/*统计上线考生数*/
            d++;
    }
    printf("%d\n",d);
    for(i=0;i<m;i++)
    {
        if(a[i].s>=z)
            printf("%s %d\n",a[i].name,a[i].s);
    }
    return 0;
}

【补充】

1,****结构类型定义的标准格式如下:
struct 结构标识符
{
数据类型 成员1的名字;
数据类型 成员2的名字;

数据类型 成员n的名字;
}
结构内的成员可以是任何类型的变量,包括数组在内。
注意,结构模板只是声明了一种数据类型,定义了数据的组织形式,并未声明结构类型的变量,因而编译器不为其分配内存,就像编译器不会为int分配内存一样。有了结构模板,就可以用其声明结构变量,C语言定义结构变量:
(1)先声明结构类型,再定义结构变量。
eg:struct student stu;
(2)在声明结构的同时定义结构变量。(此种情况下,结构标识符可以省略。)
eg:struct student
{
char ID[16];
char name[16];
char sex;
float score;
}stu;

2,定义好结构变量后,通常使用sizeof运算符计算结构变量实际所占用的内存量。千万不要想当然地对各成员进行简单求和的方式来计算,否则会降低程序的可移植性。

3,温故字符比较函数strcmp()和strncmp()
调用格式:strcmp(字符串1,字符串2)
功能:比较字符串1和字符串2的大小,若前者大则返回一个正整数,若后者大则返回一个负整数,若两者相等,则返回0
调用格式:strncmp(字符串1,字符串2,n)
功能:将字符串1中最多n个字符与字符串2进行比较

注意:比较两个字符串的大小只能使用此函数,而不能使用”>“”==“”<“等关系符

字符串比较规律:按自左至右的顺序,对应字符比较,若二者相等,则比较下一个字符,直到遇到不同的字符为止。比较的结果由函数返回。eg:strcmp(“abc”,“abc”)返回值是0
strcmp(”b“,”abcd“)返回值为正数
strcmp(“abc”,“abcd”)返回值为负数

寄语

天塌下来,有个高的人帮你顶着,但是你能保证那个高的人没在低头吗?之后还不是要靠你自己!!!

欢迎关注!欢迎私信!!欢迎评论!!!

发布了22 篇原创文章 · 获赞 19 · 访问量 5895

猜你喜欢

转载自blog.csdn.net/qq_45748475/article/details/104263112