Онлайн компилятор 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[i] = a[j+1]; a[j+1] = temp; } } } for (int i = 0;i < 5-1; i++) { for (int j = 5; j < 9-1; i++) { 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个元素按降序排序,但存在多个语法和逻辑错误。

- 第10行 `if (a[j]>a[j+1]` 缺少右括号,应改为 `if (a[j] > a[j+1])`。
- 第11行 `int temp = a[i];` 中重新声明了 `temp`,但外层已有 `int temp;`,且这里应该交换 `a[j]` 和 `a[j+1]`,而不是 `a[i]` 和 `a[j+1]`。注意冒泡排序中交换的是相邻元素。
- 第17行 `for (int j = 5; j < 9-1; i++)` 中循环变量是 `j` 但更新写成了 `i++`,应改为 `j++`。同时循环条件 `j < 9-1` 可能不够准确,因为后5个元素索引是5到9,需要遍历到索引8。
- 第18行 `if (a[j] < a[j+1])` 条件正确,但内部交换逻辑需要检查是否使用了正确的索引。
- 第25行 `if(i<9)` 多余,因为 `printf("%d ", a[i])` 已经自带空格,且条件判断后多打印一个空格,会导致输出格式异常。