Online Compiler C

#include <stdio.h> void sort_array(int size, int a[]) { for (int i = 0; i < size; i++){ for (int j = i + 1;j < size;j++){ if (a[i] < a[j]){ int temp = a[i]; a[i] = a[j]; a[j] temp; } } } for (int i = 0; i < size; i++){ while(a[i] == a[i+1]){ i++; } printf ("%d",a[i]); } } int main() { return 0; }
这段代码定义了一个排序函数,但存在几个问题。函数试图对数组进行降序排序,然后打印不重复的元素。不过代码中有语法错误,逻辑也不完全正确。

- 在第8行,`a[j] temp;` 缺少赋值运算符,应该是 `a[j] = temp;`。这是一个语法错误,会导致编译失败。
- 排序部分使用的是选择排序,但条件 `a[i] < a[j]` 表示如果当前元素小于后面的元素就交换,这确实会得到降序排列。不过排序逻辑本身是正确的。
- 打印不重复元素的循环有问题。`while(a[i] == a[i+1])` 中,当 `i` 等于 `size-1` 时,`a[i+1]` 会越界访问数组。另外,这个循环跳过重复元素后,`for` 循环的 `i++` 会导致可能跳过更多元素,逻辑需要调整。