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

#include <stdio.h> int main() { int arr[10]; int i, j, t; for (i = 0; i < 10; i++) { scanf("%d", &arr[i]); } for (i = 0; i < 4; i++) { for (j = 0; j < 4 - i; j++) { if (arr[j] > arr[j + 1]) { t = arr[j], arr[j] = arr[j + 1], arr[j + 1] = t; } } for (i = 0; i < 10; i++) { for (i = 0; i < 4; i++) { for (j = 5; j < 9 - i; j++) { if (arr[j] < arr[j + 1]) { t = arr[j], arr[j] = arr[j + 1], arr[j + 1] = t; } } } for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
这段代码试图对数组进行排序,但存在逻辑混乱和变量重用的问题。代码中嵌套了多个循环,而且外层循环和内层循环都使用了同一个变量 i,导致循环控制混乱。

- 注意变量 i 被重复使用:外层循环用 i 控制次数,内层循环又用 i 做其他循环的计数器,这样会互相干扰,导致循环次数和索引出错。
- 排序逻辑似乎想分别对前5个元素和后5个元素进行不同方向的排序,但循环边界条件(如 j < 4 - i 和 j < 9 - i)可能没有正确对应数组的实际范围,需要检查索引是否越界。