6-3 综合成绩排名-结构体三 (100分)

6-3 综合成绩排名-结构体三 (100分)

众所周知,计算机院要对申请转入计算机大类的学生进行考核,考核方式包括机试和面试。学生综合成绩采取百分制,其中50%由机试成绩核算,另50%由学生已获得的加权成绩核算。综合成绩优秀者可进入面试环节。现请你写一个根据学生成绩来确定综合成绩排名的程序。

输入: 第一行为一个整数n(0<n<100),代表学生人数。 后边n行为学生信息,格式为,一个字符串代表学生学号(长度不超过15),后边为两个整数,前边的代表机试成绩,后一个代表学生已获得的加权成绩。(两类成绩均在0到100之间)。

输出: 共n行,按综合成绩(机试成绩加加权成绩)从高到低每行输出每个学生的信息,如果综合成绩相同,则机试成绩高的学生在前。每行的格式为:一个字符串(学生学号)加三个整数(4个数据之间均用一个空格分隔),这三个整数依次为综合成绩,机试成绩和加权成绩,测试用例保证输入合法且不存在成绩完全相同的学生。

程序中用的结构体定义及各成员含义如下:

typedef struct
{
    char    id[16]  ;    //学生账号 
    int    total ;    //综合成绩 
    int    ce ;    //机试成绩 
    int    ws ;    //加权成绩 
}STUDENT;

程序中用到3个函数,分别为:

void Swap(STUDENT * s1,STUDENT * s2)

其中参数s1,s2为指向两个结构体的指针,其功能是将这两个指针指向的结构体内的值互相交换。

int Comp(STUDENT * s1,STUDENT * s2) ;

其中参数s1,s2为指向两个结构体的指针,其功能是比较两个结构体, 如果s1>s2则返回1,否则返回0。这里s1>s2指的是s1的总分高,或者总分相同时指的是s1的机试成绩高。测试用例保证输入合法且不存在成绩完全相同的学生。

void Sort(STUDENT a[],int size) ;

其中参数a为待排序的结构体数组,size为数组中学生的数量。其功能是将a按题目指定规则排序。

函数接口定义:
本题中大家只需实现第三个函数(实现此函数时可以直接调用题中另外两个函数),函数接口如下:

void Sort(STUDENT a[],int size) ;

裁判测试程序样例:
函数被调用进行测试的例子如下:

#include <stdio.h>

typedef struct
{
    char    id[16]  ;//学生账号 
    int    total ;    //综合成绩 
    int    ce ;    //机试成绩 
    int    ws ;    //加权成绩 
}STUDENT;


void Sort(STUDENT a[],int size) ; 
void Swap(STUDENT * s1,STUDENT * s2) ;
int  Comp(STUDENT * s1,STUDENT * s2) ;

int main()
{
    STUDENT    stu[100] ;
    int        i , n ;


    scanf("%d",&n) ;
    for(i=0;i<n;i++)
    {
        scanf("%s%d%d",stu[i].id,&stu[i].ce,&stu[i].ws) ;
        stu[i].total = stu[i].ce+stu[i].ws ;
    }

    Sort(stu,n) ;
    for(i=0;i<n;i++)
        printf("%s %d %d %d\n",stu[i].id,stu[i].total,stu[i].ce,stu[i].ws) ;

    return 0;    
}

/* 请在这里填写答案 */

输入样例:

3
bupt_2018210001 78 74
bupt_2018210002 95 71
bupt_2018210003 84 75

输出样例:

bupt_2018210002 166 95 71
bupt_2018210003 159 84 75
bupt_2018210001 152 78 74
void Sort(STUDENT a[],int size) {
    for (int i = 1; i <size ; i++) {
        for (int j = 0; j <size-i ; j++) {
            if (Comp(&a[j],&a[j+1])==0){
               Swap(&a[j],&a[j+1]);
            }
        }
    }
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以。在C语言中,结构体可以用来存储学生的各项成绩信息,包括语文、数学、英语等科目的成绩,以及其他需要计算的信息,如出勤率、课程表现等。通过对这些信息的计算和综合,可以得出学生综合成绩,从而进行排名和评级等操作。以下是一个简单的C语言结构体成绩管理系统的例子: ```c #include <stdio.h> #include <string.h> struct student { char name[20]; int chinese; int math; int english; int attendance; float performance; float total_score; }; int main() { struct student stu[5]; int i; float sum = 0; float avg; for (i = 0; i < 5; i++) { printf("请输入第%d个学生的姓名:", i + 1); scanf("%s", stu[i].name); printf("请输入第%d个学生的语文成绩:", i + 1); scanf("%d", &stu[i].chinese); printf("请输入第%d个学生的数学成绩:", i + 1); scanf("%d", &stu[i].math); printf("请输入第%d个学生的英语成绩:", i + 1); scanf("%d", &stu[i].english); printf("请输入第%d个学生的出勤率:", i + 1); scanf("%d", &stu[i].attendance); printf("请输入第%d个学生的课程表现:", i + 1); scanf("%f", &stu[i].performance); stu[i].total_score = stu[i].chinese + stu[i].math + stu[i].english + stu[i].attendance + stu[i].performance; sum += stu[i].total_score; } avg = sum / 5; printf("姓名\t语文\t数学\t英语\t出勤率\t课程表现\t总\n"); for (i = 0; i < 5; i++) { printf("%s\t%d\t%d\t%d\t%d\t%.2f\t%.2f\n", stu[i].name, stu[i].chinese, stu[i].math, stu[i].english, stu[i].attendance, stu[i].performance, stu[i].total_score); } printf("平均为:%.2f\n", avg); return 0; } ``` 该程序可以输入5个学生的各项成绩信息,并计算出每个学生的总和平均。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值