编写一个C语言程序,录入班级中各个同学的成绩,并按照学号排序、格式化打印输出。
时间: 2025-06-23 10:28:37 浏览: 10
### 关于C语言编程实现录入成绩按照学号排序并格式化打印
为了满足需求,可以定义一个`student`结构体来存储学生的学号、数学成绩以及英语成绩,并且计算平均成绩。之后利用数组保存多个学生的信息,在此之上完成对学生数据基于学号的排序功能,并最终以指定格式输出这些信息。
#### 结构体定义与输入处理
首先创建名为`student`的结构体用于封装单个学生的数据成员:
```c
#include <stdio.h>
typedef struct {
int id;
float mathScore;
float englishScore;
float averageScore;
} Student;
// 函数声明部分省略...
```
接着编写读取用户输入的功能,这里假设会连续接收多组数据直到特定条件终止(比如达到预设的最大数量),每接收到一组就将其加入到动态分配内存的学生记录列表中[^1]。
#### 计算平均分数
每当成功收集了一名新同学的成绩后立即更新该生对应的平均分字段值:
```c
void calculateAverage(Student* s){
s->averageScore = (s->mathScore + s->englishScore)/2;
}
```
#### 排序算法应用
对于已有的全部学员资料而言,可采用常见的冒泡排序法或者其他更高效的排序方法依据学号从小至大排列整个集合内的元素顺序;此处仅给出简单版本的交换逻辑作为示意[^2]:
```c
void sortStudentsById(Student students[], size_t count) {
for(size_t i=0;i<count-1;++i){
for(size_t j=i+1;j<count;++j){
if(students[i].id > students[j].id){
// Swap elements.
Student temp = students[i];
students[i]=students[j];
students[j]=temp;
}
}
}
}
```
#### 格式化的输出展示
最后一步就是遍历经过整理后的序列,调用`printf()`函数依照给定模板逐条呈现各人的具体情况了:
```c
void printStudentInfo(const Student *stu){
printf("No.%d's scores are Math:%.2f English:%.2f Average Score:%.2f\n",
stu->id,
stu->mathScore,
stu->englishScore,
stu->averageScore);
}
int main(){
const size_t MAX_STUDENTS = 100; // 假设有最多不超过一百个人参与统计
Student class[MAX_STUDENTS]; // 创建固定大小的空间容纳所有对象实例
size_t actualCount = 0; // 统计实际存在的有效人数
while(actualCount<MAX_STUDENTS && /*其他结束标志*/){
// ...从终端获取必要的参数填充class[actualCount], 并执行calculateAverage(&class[actualCount])
++actualCount;
}
sortStudentsById(class, actualCount);
for(size_t k=0;k<actualCount;++k){
printStudentInfo(&class[k]);
}
return 0;
}
```
阅读全文
相关推荐



















