如何C编写一个程序来接收十位学生的计算机成绩,然后计算他们的平均分,并使用冒泡排序算法将这些分数按降序排列后显示?请提供相应的代码实现步骤和示例结果。
时间: 2024-10-21 22:06:44 浏览: 38
在C语言中,你可以按照以下步骤编写一个程序来完成这个任务:
1. 定义一个数组来存储学生分数,这里假设每个学生有两门课程,总分为100分。
2. 使用循环结构从用户输入中获取所有学生的分数。
3. 计算平均分,可以先累加所有分数,然后除以学生人数。
4. 使用冒泡排序算法对分数数组进行降序排列。
以下是详细的代码实现:
```c
#include <stdio.h>
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] < arr[j + 1]) {
// 交换元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
const int numStudents = 10;
int scores[numStudents][2]; // 存储每位学生的两门课程分数
// 获取学生分数并计算总数
float totalScore = 0;
for (int i = 0; i < numStudents * 2; i++) {
printf("请输入第 %d 位学生第 %d 科目成绩:", i / 2 + 1, (i % 2) + 1);
scanf("%d", &scores[i / 2][i % 2]);
totalScore += scores[i / 2][i % 2];
}
// 计算平均分
float averageScore = totalScore / (numStudents * 2);
printf("平均分: %.2f\n", averageScore);
// 对分数进行冒泡排序并显示
bubbleSort(scores[0], numStudents * 2); // 排序只针对第一个学生的所有分数
printf("学生成绩(降序): \n");
for (int i = 0; i < numStudents * 2; i++) {
printf("学生%d: 第1科%.0f, 第2科%.0f\n", (i / 2) + 1, scores[i / 2][0], scores[i / 2][1]);
}
return 0;
}
```
注意:上述代码会为每位学生存储两个分数。如果你想单独处理每个学生的分数,可以考虑使用指针或动态分配内存。运行此程序时,请确保输入的是整数,并且范围在合理的范围内。
阅读全文