用C语言设计一个学生结构体,包括学号、3门课成绩及总成绩。输入n个学生的学号及3门课的成绩,计算每个学生的总成绩,并输出。 输入格式: 先输入n,再输入3门课成绩(每门成绩有1位小数),每行1位学生。 输出格式: 输出学生的学号及总成绩,按照总成绩从高到底排序,每行1位学生。
时间: 2024-02-01 17:17:07 浏览: 87
C语言程序设计-输入2个学生3门课的成绩,计算学生成绩平均分,课程平均分和最高分.
5星 · 资源好评率100%
以下是使用C语言实现该题目的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
struct Student {
int id; // 学生学号
float score1; // 第一门课成绩
float score2; // 第二门课成绩
float score3; // 第三门课成绩
float total; // 总成绩
};
int main(void) {
int n;
printf("请输入学生数量 n:");
scanf("%d", &n);
// 动态分配内存
struct Student *students = (struct Student*)malloc(n * sizeof(struct Student));
if (students == NULL) {
printf("分配内存失败!\n");
return 1;
}
// 输入学生信息
for (int i = 0; i < n; i++) {
printf("请输入第 %d 位学生的学号及3门课成绩(用空格分隔):", i + 1);
scanf("%d %f %f %f", &students[i].id, &students[i].score1, &students[i].score2, &students[i].score3);
students[i].total = students[i].score1 + students[i].score2 + students[i].score3;
}
// 冒泡排序计算排名
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (students[j].total < students[j + 1].total) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
// 输出学生信息
printf("学号 总成绩\n");
for (int i = 0; i < n; i++) {
printf("%-5d %.1f\n", students[i].id, students[i].total);
}
// 释放内存
free(students);
return 0;
}
```
这个程序首先会要求用户输入学生的数量 n,然后动态分配 n 个学生结构体的内存。接着,程序会要求用户逐个输入每个学生的学号和3门课的成绩,并计算每个学生的总成绩。最后,程序使用冒泡排序将学生按照总成绩从高到低排名,并输出每个学生的学号和总成绩。最后,程序释放动态分配的内存。
阅读全文