|
发表于 2023-11-6 17:33:18
|
显示全部楼层
好的,请注意以下回答。
问题描述:
编写一个 C 语言程序,使用 switch 实现以下功能:
- 输入全班学生各门课的成绩
- 计算并输出每个学生各门课的平均成绩
- 计算并输出各门课的全班平均成绩
- 对全班学生的平均成绩由高到低排序并输出
解决方案:
根据问题描述,我们可以将程序分为四个部分:输入全班学生各门课的成绩、计算每个学生各门课的平均成绩、计算各门课的全班平均成绩、对全班学生的平均成绩排序并输出。针对每个部分,我们可以定义一个函数来实现。
完整代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #define N 100 // 学生数量最大值
- #define M 5 // 课程数量
- int scores[N][M]; // 存储学生成绩,二维数组
- float avg[N]; // 存储学生平均成绩,一维数组
- float avg_class[M]; // 存储课程平均成绩,一维数组
- // 输入全班学生各门课的成绩
- void input_scores(int n, int m) {
- printf("请输入每位学生的成绩(共 %d 门课):\n", m);
- for (int i = 0; i < n; i++) {
- printf("请输入第 %d 位学生的成绩:", i+1);
- for (int j = 0; j < m; j++) {
- scanf("%d", &scores[i][j]);
- }
- }
- }
- // 计算每个学生各门课的平均成绩
- void calculate_avg(int n, int m) {
- for (int i = 0; i < n; i++) {
- int sum = 0;
- for (int j = 0; j < m; j++) {
- sum += scores[i][j];
- }
- avg[i] = (float)sum / m;
- }
- }
- // 计算各门课的全班平均成绩
- void calculate_avg_class(int n, int m) {
- for (int j = 0; j < m; j++) {
- int sum = 0;
- for (int i = 0; i < n; i++) {
- sum += scores[i][j];
- }
- avg_class[j] = (float)sum / n;
- }
- }
- // 对全班学生的平均成绩由高到低排序并输出
- void sort_and_output(int n, int m) {
- // 定义一个结构体,用于存储学生平均成绩和编号
- struct student {
- int id;
- float avg;
- } stu[N];
- // 初始化结构体
- for (int i = 0; i < n; i++) {
- stu[i].id = i + 1;
- stu[i].avg = avg[i];
- }
- // 冒泡排序(从大到小)
- for (int i = 0; i < n-1; i++) {
- for (int j = 0; j < n-i-1; j++) {
- if (stu[j].avg < stu[j+1].avg) {
- // 交换结构体中的元素
- struct student tmp = stu[j];
- stu[j] = stu[j+1];
- stu[j+1] = tmp;
- }
- }
- }
- // 输出结果
- printf("按平均成绩由高到低排序的结果如下:\n");
- for (int i = 0; i < n; i++) {
- printf("第 %d 名学生,平均成绩为 %.2f\n", stu[i].id, stu[i].avg);
- }
- }
- int main() {
- int n, m;
- printf("请输入学生人数和课程数量:");
- scanf("%d %d", &n, &m);
- input_scores(n, m);
- calculate_avg(n, m);
- calculate_avg_class(n, m);
- sort_and_output(n, m);
- return 0;
- }
复制代码
代码解释:
1. 首先定义了两个常量 N 和 M,分别表示学生数量最大值和课程数量;
2. 定义了两个数组 scores 和 avg,分别用于存储学生成绩和学生平均成绩;
3. 定义了一个函数 input_scores,用于输入全班学生各门课的成绩;
4. 定义了一个函数 calculate_avg,用于计算每个学生各门课的平均成绩;
5. 定义了一个数组 avg_class,用于存储课程平均成绩;
6. 定义了一个函数 calculate_avg_class,用于计算各门课的全班平均成绩;
7. 定义了一个结构体 student,用于存储学生平均成绩和编号;
8. 定义了一个函数 sort_and_output,用于对全班学生的平均成绩排序并输出;
9. 在 main 函数中,先输入学生人数和课程数量,然后依次调用以上函数实现各要求。
希望这个解答对您有所帮助。如果您还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!   |
|