在线编译器 C

#include <stdio.h> int main() { int a[10]; int temp; 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]); if(i<9){ printf(" "); } } printf("\n"); return 0; }
这段代码试图将数组的前5个元素按升序排序,后5个元素按降序排序,但存在几个问题。

- 第一个排序循环中,你声明了局部变量 `int temp`,但后面又用 `int temp = a[i]` 重新声明,这会导致作用域冲突,而且赋值给 `a[i]` 而不是 `a[j]`,这是错误的。
- 第二个排序循环的边界条件 `j < 9-1` 不正确,应该遍历后5个元素(索引5到9),但你的循环只比较了索引5到7,漏掉了最后一个元素。
- 输出部分多了一个多余的空格判断,`printf(" ")` 会在每个数字后都加空格,但你的条件 `if(i<9)` 会导致最后一个数字后也加空格,不过这不是主要错误。