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

#include <stdio.h> int main() { int a[10]; int i, j, temp; for (int n = 0; n < 10; n++) { scanf("%d", &a[n]); } for (i = 0; i < 4; i++) { for (j = 0; j < 5 - i; j++) { if (a[j] < a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (i = 0; i < 4; i++) { for (j = 5; j < 9 - i; j++) { if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (int n = 0; n < 10; n++) { printf("%d ", a[n]); } return 0; }
这段代码的功能是:输入10个整数,然后对前5个元素进行降序排序,对后5个元素进行升序排序,最后输出整个数组。

代码中存在一些逻辑问题:

- 外层循环的次数可能不正确。对于5个元素的冒泡排序,外层循环通常需要执行4次(即元素个数减1),但这里内层循环的边界也需要注意。

- 内层循环的边界条件需要仔细检查。对于前5个元素(索引0到4),内层循环的结束条件应该是 `j < 5 - i - 1` 还是 `j < 5 - i`?这取决于你希望比较到哪个位置。

- 对于后5个元素(索引5到9),内层循环的起始和结束条件也需要类似地调整。注意数组索引是从0开始的,后5个元素的索引范围是5到9。