大一c语言期末考试,编程

现有100位学生成绩,请利用冒泡法对成绩从高到低进行排序,100位学生成绩要求从健盘输入,且数据类型为单精度浮点型。

【以下回答由 GPT 生成】

解决方案:

根据问题描述,我们需要实现一个使用冒泡法对100位学生成绩进行排序的C程序。下面是一个简单的实现过程:

  1. 首先,我们定义一个数组来存储学生成绩,数组的大小为100。
float scores[100];
  1. 然后,我们需要从键盘输入学生成绩,并将其存储到数组中。
for (int i = 0; i < 100; i++) {
    printf("请输入第 %d 位学生的成绩: ", i+1);
    scanf("%f", &scores[i]);
}
  1. 接下来,我们使用冒泡法对学生成绩进行排序。冒泡法的基本思想是通过相邻元素的比较和交换,将较大的元素逐渐“浮”到数组的末尾。
for (int i = 0; i < 100 - 1; i++) {
    for (int j = 0; j < 100 - i - 1; j++) {
        if (scores[j] < scores[j+1]) {
            // 交换元素
            float temp = scores[j];
            scores[j] = scores[j+1];
            scores[j+1] = temp;
        }
    }
}
  1. 最后,我们可以按照从高到低的顺序输出学生成绩。
printf("学生成绩从高到低排序为:\n");
for (int i = 0; i < 100; i++) {
    printf("%.2f\n", scores[i]);
}

这样,我们就完成了一个使用冒泡法对学生成绩从高到低排序的C程序。

完整代码如下:

#include<stdio.h>

int main() {
    float scores[100];

    for (int i = 0; i < 100; i++) {
        printf("请输入第 %d 位学生的成绩: ", i+1);
        scanf("%f", &scores[i]);
    }

    for (int i = 0; i < 100 - 1; i++) {
        for (int j = 0; j < 100 - i - 1; j++) {
            if (scores[j] < scores[j+1]) {
                // 交换元素
                float temp = scores[j];
                scores[j] = scores[j+1];
                scores[j+1] = temp;
            }
        }
    }

    printf("学生成绩从高到低排序为:\n");
    for (int i = 0; i < 100; i++) {
        printf("%.2f\n", scores[i]);
    }

    return 0;
}

请注意,以上代码只是一个简单的冒泡排序的实现,实际开发中可能使用更高效的排序算法。但对于只有100个学生成绩的情况,冒泡排序已足够。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

以下是一个可能的解答:

#include <stdio.h>

#define NUM_STUDENTS 100

int main()
{
    float grades[NUM_STUDENTS];
    int i, j;
    float tmp;

    // Input grades
    for (i = 0; i < NUM_STUDENTS; i++) {
        printf("Enter grade for student %d: ", i + 1);
        scanf("%f", &grades[i]);
    }

    // Bubble sort
    for (i = 0; i < NUM_STUDENTS - 1; i++) {
        for (j = 0; j < NUM_STUDENTS - i - 1; j++) {
            if (grades[j] < grades[j+1]) {
                // Swap grades[j] and grades[j+1]
                tmp = grades[j];
                grades[j] = grades[j+1];
                grades[j+1] = tmp;
            }
        }
    }

    // Print sorted grades
    printf("Sorted grades (from high to low):\n");
    for (i = 0; i < NUM_STUDENTS; i++) {
        printf("%5.1f", grades[i]);
        if ((i+1) % 10 == 0) {
            printf("\n"); // Print a newline every 10 grades
        }
    }

    return 0;
}

解释如下:

  1. 定义一个长度为100的数组grades用来存放学生成绩。
  2. for循环逐个输入学生的成绩。
  3. 用双重for循环实现冒泡排序,每次将未排序部分的相邻两个元素进行比较交换。
  4. for循环逐个输出排序后的成绩,并在每10个成绩后输出一个换行符。注意,为了方便查看,这里使用了%5.1f格式化输出,表示每个成绩占5个字符宽度(不足5个用空格填充),小数点后保留1位。