C语言代码由键盘任意输入5个学生的姓名、学号、以及每一个学生的4门功课的成绩,分别计算他们的总分和均分,并将此表按总分的高低排序。
时间: 2024-05-01 22:19:39 浏览: 78
接收从键盘输入某班学生的学号、姓名、成绩,对学 生的成绩进行排序.zip
5星 · 资源好评率100%
好的,让我来回答你的问题。这道题目的解决方法如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_LEN 20
#define MAX_STUDENT_NUM 5
#define COURSE_NUM 4
// 学生信息的结构体
typedef struct {
char name[NAME_LEN]; // 名字
char id[NAME_LEN]; // 学号
int scores[COURSE_NUM]; // 成绩
int total; // 总分
float avg; // 平均分
} student_t;
int main() {
student_t students[MAX_STUDENT_NUM];
int i, j;
// 读入学生信息
for (i = 0; i < MAX_STUDENT_NUM; i++) {
printf("请输入第%d个学生的姓名,学号,以及每门课的成绩:\n", i+1);
scanf("%s%s", students[i].name, students[i].id);
students[i].total = 0;
for (j = 0; j < COURSE_NUM; j++) {
scanf("%d", &students[i].scores[j]);
students[i].total += students[i].scores[j];
}
students[i].avg = (float)students[i].total / COURSE_NUM;
}
// 按总分高低进行排序
student_t temp;
for (i = 0; i < MAX_STUDENT_NUM - 1; i++) {
for (j = i + 1; j < MAX_STUDENT_NUM; j++) {
if (students[i].total < students[j].total) {
memcpy(&temp, &students[i], sizeof(student_t));
memcpy(&students[i], &students[j], sizeof(student_t));
memcpy(&students[j], &temp, sizeof(student_t));
}
}
}
// 输出学生信息和成绩
printf("按总分高低排序后的学生信息和成绩如下:\n");
printf("%-10s%-10s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "成绩1", "成绩2", "成绩3", "成绩4");
for (i = 0; i < MAX_STUDENT_NUM; i++) {
printf("%-10s%-10s%-10d%-10d%-10d%-10d\n", students[i].name, students[i].id,
students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
}
printf("\n");
printf("%-10s%-10s%-10s%-10s\n", "姓名", "总分", "平均分", "排名");
for (i = 0; i < MAX_STUDENT_NUM; i++) {
printf("%-10s%-10d%-10.2f%-10d\n", students[i].name, students[i].total, students[i].avg, i+1);
}
return 0;
}
```
希望这个程序能够解决你的问题!
阅读全文