Онлайн компилятор C

#include <stdio.h> int main() { int a[10]; int temp; for (int i = 0; i < 5; i++) { scanf("%d", &a[i]); } for(int i = 0; i < 4; i++) { for(int j=0;j<4-i;j++) { if (a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for (int i = 0; i < 5; i++) { printf("%d", a[i]);} return 0; }
这段代码实现了一个冒泡排序算法,读取5个整数并从小到大排序输出。代码逻辑基本正确,但存在一些细节问题。

- 数组声明为 `int a[10]` 但只使用了前5个元素,虽然不会出错,但建议直接声明为 `int a[5]` 更清晰。
- 外层循环 `for(int i = 0; i < 4; i++)` 是正确的,因为5个元素需要4轮比较。但内层循环 `j<4-i` 的边界需要检查:当 `i=0` 时,`j` 最大为3,可以比较 `a[3]` 和 `a[4]`,这是正确的。但注意当 `i=3` 时,`j<1`,只比较 `a[0]` 和 `a[1]`,逻辑正确。
- 主要问题在于输出格式:`printf("%d", a[i])` 没有添加空格或换行,所有数字会连在一起输出,例如输入 `5 3 1 4 2` 会输出 `12345` 而不是 `1 2 3 4 5`。考虑在输出时添加空格或换行来分隔数字。