设某班级有n个学生,要求设计以下算法:1.输入全班学生的学号和某一门课程的考试成绩 2.将该课程的成绩由高到低的顺序排序3.求出平均成绩和不及格学生的人数最后设计main(),调用以上算法后按从高到低的次序输出学生的学号和相应的成绩,输出平均成绩和不及格学生的人数请用类C语言实现
时间: 2024-09-09 20:01:59 浏览: 73
以下是一个简单的C语言程序实现,按照你的要求设计了算法来处理学生信息:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
typedef struct {
char student_id[20]; // 学号
int score; // 成绩
} Student;
// 比较函数,用于qsort
int compare(const void *a, const void *b) {
Student *studentA = (Student *)a;
Student *studentB = (Student *)b;
return studentB->score - studentA->score; // 降序排序
}
// 计算平均成绩和不及格人数
void calculate_average_and_fail_count(Student *students, int n, double *average, int *fail_count) {
int sum = 0;
*fail_count = 0;
for (int i = 0; i < n; i++) {
sum += students[i].score;
if (students[i].score < 60) {
(*fail_count)++;
}
}
*average = (double)sum / n;
}
int main() {
int n;
printf("请输入学生人数: ");
scanf("%d", &n);
Student *students = (Student *)malloc(n * sizeof(Student));
if (students == NULL) {
printf("内存分配失败");
return 1;
}
// 输入学生信息
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号和成绩: ", i + 1);
scanf("%s %d", students[i].student_id, &students[i].score);
}
// 排序
qsort(students, n, sizeof(Student), compare);
// 输出排序后的学生信息
printf("\n排序后的学号和成绩:\n");
for (int i = 0; i < n; i++) {
printf("%s %d\n", students[i].student_id, students[i].score);
}
// 计算平均分和不及格人数
double average;
int fail_count;
calculate_average_and_fail_count(students, n, &average, &fail_count);
// 输出平均分和不及格人数
printf("\n平均成绩: %.2f\n", average);
printf("不及格学生人数: %d\n", fail_count);
// 释放内存
free(students);
return 0;
}
```
这个程序首先定义了一个`Student`结构体来存储学生的学号和成绩信息。在`main`函数中,程序首先让用户输入班级中学生的数量,然后循环让用户输入每个学生的学号和成绩。使用`qsort`函数对学生数组进行降序排序。之后,程序调用`calculate_average_and_fail_count`函数来计算平均成绩和不及格学生的人数,并输出。最后,释放了之前动态分配的内存。
阅读全文