用c语言写一个学生成绩管理系统 该系统用于管理学生的课程成绩,要求实现以下功能: 1、计算每位同学的平均分,对所有同学的成绩按平均分排序,给出名次; 2、计算各课程分数段(90-100、80-89、60-79、60以下)的人数。 数据至少有10个学生的原始数据。原始数据如下: 学号 姓名 C程序设计 高等数学 英语 线性代数 1 王.. 80 80 80 80 2 张.. 90 90 90 90 … 最后输出结果如下: 学号 姓名 C程序设计 高等数学 英语 线性代数 平均分 名次 1 王.. 80 80 80 80 80 2 2 张.. 90 90 90 90 90 1 … 各科平均分 85 85 85 85 85 90-100 1 1 1 1 1 80-89 1 1 1 1 1 60-69 0 0 0 0 0 60以下 0 0 0 0 0
时间: 2023-06-17 15:04:24 浏览: 133
以下是一个简单的学生成绩管理系统的C语言代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 10
#define NUM_COURSES 4
typedef struct {
int id;
char name[20];
int scores[NUM_COURSES];
float average;
int rank;
} student;
void calculate_averages(student students[], int num_students);
void calculate_ranks(student students[], int num_students);
void print_students(student students[], int num_students);
void print_statistics(student students[], int num_students);
int main() {
student students[MAX_STUDENTS] = {
{1, "王..", {80, 80, 80, 80}},
{2, "张..", {90, 90, 90, 90}},
{3, "李..", {85, 75, 90, 80}},
{4, "赵..", {70, 80, 75, 85}},
{5, "陈..", {95, 85, 90, 95}},
{6, "刘..", {80, 90, 85, 75}},
{7, "周..", {75, 70, 80, 80}},
{8, "吴..", {90, 85, 95, 90}},
{9, "孙..", {85, 80, 85, 90}},
{10, "钱..", {80, 75, 80, 70}}
};
int num_students = MAX_STUDENTS;
calculate_averages(students, num_students);
calculate_ranks(students, num_students);
print_students(students, num_students);
print_statistics(students, num_students);
return 0;
}
void calculate_averages(student students[], int num_students) {
for (int i = 0; i < num_students; i++) {
float sum = 0;
for (int j = 0; j < NUM_COURSES; j++) {
sum += students[i].scores[j];
}
students[i].average = sum / NUM_COURSES;
}
}
void calculate_ranks(student students[], int num_students) {
for (int i = 0; i < num_students; i++) {
int rank = 1;
for (int j = 0; j < num_students; j++) {
if (students[j].average > students[i].average) {
rank++;
}
}
students[i].rank = rank;
}
}
void print_students(student students[], int num_students) {
printf("学号\t姓名\tC程序设计\t高等数学\t英语\t线性代数\t平均分\t名次\n");
for (int i = 0; i < num_students; i++) {
printf("%d\t%s\t", students[i].id, students[i].name);
for (int j = 0; j < NUM_COURSES; j++) {
printf("%d\t\t", students[i].scores[j]);
}
printf("%.1f\t\t%d\n", students[i].average, students[i].rank);
}
}
void print_statistics(student students[], int num_students) {
int score_count[4] = {0}; // 90-100, 80-89, 60-79, 60以下
float course_averages[NUM_COURSES] = {0};
for (int i = 0; i < num_students; i++) {
for (int j = 0; j < NUM_COURSES; j++) {
course_averages[j] += students[i].scores[j];
if (students[i].scores[j] >= 90) {
score_count[0]++;
} else if (students[i].scores[j] >= 80) {
score_count[1]++;
} else if (students[i].scores[j] >= 60) {
score_count[2]++;
} else {
score_count[3]++;
}
}
}
for (int i = 0; i < NUM_COURSES; i++) {
course_averages[i] /= num_students;
}
printf("\n各科平均分\tC程序设计\t高等数学\t英语\t线性代数\n");
for (int i = 0; i < NUM_COURSES; i++) {
printf("\t\t%.1f", course_averages[i]);
}
printf("\n90-100\t\t%d\t\t%d\t\t%d\t%d\n", score_count[0], score_count[0], score_count[0], score_count[0]);
printf("80-89\t\t%d\t\t%d\t\t%d\t%d\n", score_count[1], score_count[1], score_count[1], score_count[1]);
printf("60-79\t\t%d\t\t%d\t\t%d\t%d\n", score_count[2], score_count[2], score_count[2], score_count[2]);
printf("60以下\t\t%d\t\t%d\t\t%d\t%d\n", score_count[3], score_count[3], score_count[3], score_count[3]);
}
```
该程序使用结构体数组来存储学生信息,包括学号、姓名、各科成绩、平均分和名次。程序先计算每个学生的平均分和名次,然后按照要求输出每个学生的信息和统计信息。