编程实现10个学生的成绩管理系统,学生信息包括:学生学号、姓名和3门课程的成绩及平均成绩。要求如下: (1)在主函数中编写一个提示菜单,根据输入菜单的编号调用相应函数。(2)用input函数来输入数据 (3)用aver函数求各学生的平均成绩。 (4)用sort 函数实现按学生平均成绩排序。(5)用print函数来输出所有学生的信息
时间: 2024-03-01 20:50:51 浏览: 121
以下是一个示例程序,实现了一个简单的学生成绩管理系统:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 10
#define MAX_NAME_LEN 20
typedef struct {
int id;
char name[MAX_NAME_LEN];
int scores[3];
float average;
} Student;
void print_menu();
void input_students(Student students[], int count);
void calculate_averages(Student students[], int count);
void sort_students(Student students[], int count);
void print_students(Student students[], int count);
int main() {
Student students[MAX_STUDENTS];
int count = 0;
int choice = 0;
do {
print_menu();
scanf("%d", &choice);
switch (choice) {
case 1:
input_students(students, MAX_STUDENTS);
count = MAX_STUDENTS;
break;
case 2:
calculate_averages(students, count);
break;
case 3:
sort_students(students, count);
break;
case 4:
print_students(students, count);
break;
case 5:
printf("再见!\n");
break;
default:
printf("无效的选项,请重新输入!\n");
break;
}
} while (choice != 5);
return 0;
}
void print_menu() {
printf("学生成绩管理系统菜单:\n");
printf("1. 输入学生信息\n");
printf("2. 计算平均分\n");
printf("3. 按平均分排序\n");
printf("4. 显示所有学生信息\n");
printf("5. 退出程序\n");
printf("请选择:");
}
void input_students(Student students[], int count) {
int i, j;
printf("请输入 %d 个学生的信息:\n", count);
for (i = 0; i < count; i++) {
printf("学生 %d 的学号:", i + 1);
scanf("%d", &students[i].id);
printf("学生 %d 的姓名:", i + 1);
scanf("%s", students[i].name);
printf("学生 %d 的成绩:", i + 1);
for (j = 0; j < 3; j++) {
scanf("%d", &students[i].scores[j]);
}
}
}
void calculate_averages(Student students[], int count) {
int i, j;
float sum;
for (i = 0; i < count; i++) {
sum = 0;
for (j = 0; j < 3; j++) {
sum += students[i].scores[j];
}
students[i].average = sum / 3;
}
}
void sort_students(Student students[], int count) {
int i, j;
Student temp;
for (i = 0; i < count - 1; i++) {
for (j = i + 1; j < count; j++) {
if (students[i].average < students[j].average) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void print_students(Student students[], int count) {
int i, j;
printf("学生信息如下(按平均分排序):\n");
for (i = 0; i < count; i++) {
printf("学号:%d,姓名:%s,成绩:%d %d %d,平均分:%.2f\n",
students[i].id, students[i].name, students[i].scores[0],
students[i].scores[1], students[i].scores[2], students[i].average);
}
}
```
在上面的示例程序中,我们定义了一个 `Student` 结构体,用于存储学生信息,包括学号、姓名、3 门课程的成绩和平均成绩。程序使用 `input_students` 函数来读取用户输入的学生信息,使用 `calculate_averages` 函数计算每个学生的平均成绩,使用 `sort_students` 函数按平均分排序学生,使用 `print_students` 函数来输出所有学生的信息。
在 `main` 函数中,程序使用 `do-while` 循环来不断显示菜单,读取用户的选择,然后执行相应的操作,直到用户选择退出程序。
在上面的示例程序中,我们使用了 `scanf` 函数来读取用户输入的数据。然而,这种方法可能会导致输入错误或溢出等问题。为了避免这些问题,你可以使用 `fgets` 函数和 `sscanf` 函数来读取用户输入,并进行错误处理。
阅读全文