用C语言实现假设某班有N(不超过40)个学生(具体人数从键盘输入),每个学生有3门课的成绩。要求: (1)能输入并显示n个学生的3门课成绩、总分和平均分; (2)按总分由高到低排序; (3)输入一个学生学号,能够输出该学生的姓名、3门课的成绩。
时间: 2024-09-18 08:17:07 浏览: 49
为了实现这个需求,我们可以创建一个结构体`Student`来存储每个学生的姓名和成绩,再用一个数组来存储整个班级的学生。以下是一个简单的C语言程序设计思路:
```c
#include <stdio.h>
#include <stdlib.h> // 使用malloc动态分配内存
// 定义学生结构体
typedef struct {
char name[20];
float score[3]; // 学生的三门课程成绩
} Student;
// 输入学生信息
void inputStudent(Student* student) {
scanf("%s", student->name);
for (int i = 0; i < 3; ++i) {
scanf("%f", &student->score[i]);
}
float sum = 0;
for (float score : student->score) {
sum += score;
}
student->sum = sum;
student->average = sum / 3;
}
// 显示学生信息
void displayStudent(const Student* student) {
printf("姓名: %s\n", student->name);
printf("成绩: %.2f, %.2f, %.2f\n", student->score[0], student->score[1], student->score[2]);
printf("总分: %.2f, 平均分: %.2f\n", student->sum, student->average);
}
// 按总分排序
void sortStudents(Student students[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (students[j].sum > students[j + 1].sum) {
// 交换学生信息
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
int main() {
int N;
printf("请输入学生人数(N,不超过40): ");
scanf("%d", &N);
if (N > 40) {
printf("学生人数超过限制,只考虑前40名学生。\n");
N = 40;
}
// 动态分配内存
Student *class = malloc(sizeof(Student) * N);
if (class == NULL) {
printf("内存分配失败!\n");
return 1;
}
// 输入学生信息并排序
for (int i = 0; i < N; ++i) {
inputStudent(&class[i]);
}
sortStudents(class, N);
// 用户查询指定学生
int searchID;
printf("请输入要查询的学生学号: ");
scanf("%d", &searchID);
for (int i = 0; i < N; ++i) {
if (i + 1 == searchID) {
displayStudent(&class[i]);
break;
}
}
free(class); // 释放内存
return 0;
}
```
这个程序首先读取学生数量,然后依次输入每个学生的姓名和成绩,并计算总分和平均分。接着对所有学生按照总分降序排列。最后,允许用户输入学号查询特定学生的信息。
阅读全文