C语言-学生学号成绩读入程序(输出了学生总分、平均分、名次以及学生信息的查询)

任务描述

成绩排名次
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:
(1) 计算每个学生的总分和平均分;
(2) 按总分成绩由高到低排出成绩的名次;
(3) 输出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4) 任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
提示:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。

测试说明

测试数据:

20183001 98 99 97
20183002 89 85 90
20183003 77 67 88
20183004 88 82 95
20183005 56 76 80
20183006 66 65 74
20183007 99 99 91
20183008 56 63 60
20183009 45 56 63
20183010 90 88 87


输入学生信息的格式为:

按总分排名,按名次输出名次表,输出内容为:


任意输入一

好的,这是一个典型的成绩统计问题,需要用到结构体和排序算法,下面是一个基本的实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME 20 #define MAX_STUDENT 100 #define MAX_SUBJECT 10 typedef struct { char name[MAX_NAME]; int id; int score[MAX_SUBJECT]; int total_score; } Student; Student students[MAX_STUDENT]; int n, m; int cmp(const void* a, const void* b) { Student* s1 = (Student*)a; Student* s2 = (Student*)b; if (s1->total_score != s2->total_score) { return s2->total_score - s1->total_score; } else { return s1->id - s2->id; } } int main() { scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) { scanf("%d%s", &students[i].id, students[i].name); students[i].total_score = 0; for (int j = 0; j < m; j++) { scanf("%d", &students[i].score[j]); students[i].total_score += students[i].score[j]; } } qsort(students, n, sizeof(Student), cmp); printf("名次\t学号\t姓名\t总分\t"); for (int j = 0; j < m; j++) { printf("科目%d\t", j + 1); } printf("\n"); int rank = 1; for (int i = 0; i < n; i++) { if (i > 0 && students[i].total_score < students[i - 1].total_score) { rank = i + 1; } printf("%d\t%d\t%s\t%d\t", rank, students[i].id, students[i].name, students[i].total_score); for (int j = 0; j < m; j++) { printf("%d\t", students[i].score[j]); } printf("\n"); } return 0; } ``` 这个程序首先读入学生数量n和科目数量m,然后定义一个结构体Student,表示每个学生信息。接着读入每个学生信息,计算总分,然后用qsort函数按照总分排序。最后按照排名打印出每个学生信息。 注意这个程序中的cmp函数,它用于比较两个学生总分学号,如果总分相同,则按照学号排序。这个函数会被qsort函数调用,qsort会根据这个函数的返回值进行排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Color20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值