用c语言写一个学生成绩管理系统 该系统用于管理学生的课程成绩,要求实现以下功能: 1、计算每位同学的平均分,对所有同学的成绩按平均分排序,给出名次; 2、计算各课程分数段(90-100、80-89、60-79、60以下)的人数。 数据至少有10个学生的原始数据。原始数据如下: 学号 姓名 C程序设计 高等数学 英语 线性代数
时间: 2023-06-17 15:04:32 浏览: 230
下面是一个简单的学生成绩管理系统,使用了结构体存储学生信息及成绩,实现了计算平均分、排序、分数段统计等功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
// 学生信息结构体
typedef struct {
char id[10]; // 学号
char name[20]; // 姓名
int score_c; // C程序设计成绩
int score_math; // 高等数学成绩
int score_english; // 英语成绩
int score_linear; // 线性代数成绩
float avg_score; // 平均分
int rank; // 名次
} Student;
// 分数段统计结构体
typedef struct {
int num_90_100; // 90-100分人数
int num_80_89; // 80-89分人数
int num_60_79; // 60-79分人数
int num_0_59; // 0-59分人数
} ScoreStat;
// 学生数组
Student students[MAX_STUDENTS];
// 学生数量
int num_students = 0;
// 计算平均分
void calc_avg_score(Student *s)
{
s->avg_score = (s->score_c + s->score_math + s->score_english + s->score_linear) / 4.0;
}
// 比较函数,用于排序
int cmp(const void *a, const void *b)
{
Student *s1 = (Student *)a;
Student *s2 = (Student *)b;
return s2->avg_score - s1->avg_score;
}
// 计算分数段统计
ScoreStat calc_score_stat()
{
ScoreStat stat = {0, 0, 0, 0};
for (int i = 0; i < num_students; i++) {
if (students[i].avg_score >= 90 && students[i].avg_score <= 100) {
stat.num_90_100++;
} else if (students[i].avg_score >= 80) {
stat.num_80_89++;
} else if (students[i].avg_score >= 60) {
stat.num_60_79++;
} else {
stat.num_0_59++;
}
}
return stat;
}
int main()
{
// 输入学生信息及成绩
while (num_students < MAX_STUDENTS) {
printf("请输入第%d个学生的信息(学号 姓名 C程序设计 高等数学 英语 线性代数):\n", num_students+1);
scanf("%s %s %d %d %d %d", students[num_students].id, students[num_students].name,
&students[num_students].score_c, &students[num_students].score_math,
&students[num_students].score_english, &students[num_students].score_linear);
calc_avg_score(&students[num_students]);
num_students++;
printf("是否继续输入?(y/n)");
char ch;
scanf(" %c", &ch);
if (ch != 'y' && ch != 'Y') {
break;
}
}
// 排序
qsort(students, num_students, sizeof(Student), cmp);
// 计算名次
for (int i = 0; i < num_students; i++) {
if (i == 0 || students[i].avg_score < students[i-1].avg_score) {
students[i].rank = i + 1;
} else {
students[i].rank = students[i-1].rank;
}
}
// 输出成绩单
printf("学号\t姓名\tC程序设计\t高等数学\t英语\t线性代数\t平均分\t名次\n");
for (int i = 0; i < num_students; i++) {
printf("%s\t%s\t%d\t\t%d\t\t%d\t%d\t\t%.1f\t%d\n", students[i].id, students[i].name,
students[i].score_c, students[i].score_math, students[i].score_english,
students[i].score_linear, students[i].avg_score, students[i].rank);
}
// 输出分数段统计
ScoreStat stat = calc_score_stat();
printf("90-100分人数:%d\n", stat.num_90_100);
printf("80-89分人数:%d\n", stat.num_80_89);
printf("60-79分人数:%d\n", stat.num_60_79);
printf("0-59分人数:%d\n", stat.num_0_59);
return 0;
}
```
注意,这个程序中没有对输入进行特别详细的检查和错误处理,只是展示了基本的思路和实现。在实际开发中,需要对输入进行逐个检查,防止出现意外情况。
阅读全文