在线编译器 C

#include <stdio.h> int main() { int a[10]; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 0; i <5-1; i++) { for (int j = 0; j < 5-1-i; j++) { if (a[j]>a[j+1]){ int temp = a[i]; a[j] = a[j+1]; a[j+1] = temp; } } } for (int i = 0;i < 5-1; i++) { for (int j = 5; j < 9-1; j++) { if (a[j] < a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } for (int i = 0; i < 10; i++) { printf("%d ", a[i]); } } printf("\n"); return 0; }
这段代码试图对数组的前5个元素进行升序排序,后5个元素进行降序排序,但存在多个错误。

- 在第一个排序循环中,交换时使用了 `a[i]` 而不是 `a[j]`,这会导致排序逻辑错误。注意冒泡排序中,内层循环的交换应该使用 `j` 索引。
- 第二个排序循环的内层循环条件 `j < 9-1` 只循环到索引7,但后5个元素的索引范围是5到9,所以循环次数不够。需要检查内层循环的边界条件。
- 最后的 `printf("\n")` 在 `for` 循环之后,但 `for` 循环末尾多了一个多余的花括号 `}`,导致 `printf` 不在 `main` 函数内,会造成编译错误。