用C语言编写程序,输入正整数n和n个学生的学号和三门课程成绩,计算每个人的平均分,按平均分从小到大排序,输出排序结果。学号的长度不超过10位;三门课程成绩为整数;平均成绩为实数,输出平均成绩保留两位小数;学生人数不超过50人。 提示:请用多个函数实现。
时间: 2024-05-01 09:21:12 浏览: 85
以下是用C语言编写的程序,实现输入n和n个学生的学号和三门课程成绩,计算每个人的平均分,按平均分从小到大排序,输出排序结果。
```c
#include <stdio.h>
#include <string.h>
#define MAX_NUM 50 // 最大学生人数
#define ID_LEN 10 // 学号长度
#define COURSE_NUM 3 // 课程数目
struct Student { // 学生结构体
char id[ID_LEN+1]; // 学号
int scores[COURSE_NUM]; // 三门课程成绩
double avg_score; // 平均成绩
};
void input_students(struct Student students[], int n); // 输入学生信息
void calculate_avg_score(struct Student students[], int n); // 计算平均成绩
void sort_students(struct Student students[], int n); // 按平均成绩排序
void print_students(struct Student students[], int n); // 输出排序结果
int main() {
int n;
struct Student students[MAX_NUM];
printf("请输入学生人数:");
scanf("%d", &n);
input_students(students, n);
calculate_avg_score(students, n);
sort_students(students, n);
print_students(students, n);
return 0;
}
void input_students(struct Student students[], int n) {
int i, j;
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的学号和三门课程成绩(用空格分隔):", i+1);
scanf("%s", students[i].id);
for (j = 0; j < COURSE_NUM; j++) {
scanf("%d", &students[i].scores[j]);
}
}
}
void calculate_avg_score(struct Student students[], int n) {
int i, j;
for (i = 0; i < n; i++) {
double sum = 0;
for (j = 0; j < COURSE_NUM; j++) {
sum += students[i].scores[j];
}
students[i].avg_score = sum / COURSE_NUM;
}
}
void sort_students(struct Student students[], int n) {
int i, j;
struct Student temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-1-i; j++) {
if (students[j].avg_score > students[j+1].avg_score) {
temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
}
void print_students(struct Student students[], int n) {
int i;
printf("排序结果如下:\n");
for (i = 0; i < n; i++) {
printf("学号:%s,平均成绩:%.2lf\n", students[i].id, students[i].avg_score);
}
}
```
程序逻辑如下:
1. 定义一个结构体 `Student`,包含学号、三门课程成绩和平均成绩三个成员变量。
2. 定义输入学生信息的函数 `input_students`,通过循环输入每个学生的学号和三门课程成绩。
3. 定义计算平均成绩的函数 `calculate_avg_score`,通过循环计算每个学生的平均成绩。
4. 定义按平均成绩排序的函数 `sort_students`,采用冒泡排序算法实现。
5. 定义输出排序结果的函数 `print_students`,通过循环输出每个学生的学号和平均成绩。
6. 主函数中按顺序调用输入、计算、排序和输出四个函数。
注意事项:
1. 学号的长度不超过10位,因此定义结构体中的学号成员变量长度为 `ID_LEN+1`。
2. 课程数目为3,因此定义宏 `COURSE_NUM` 为3。
3. 学生人数不超过50人,因此定义宏 `MAX_NUM` 为50。
4. 在输入和输出函数中,需要使用循环遍历每个学生。