Online Compiler C

#include <stdio.h> void swap_negmax_last(int size, int a[]) { int o = 0; for (int i = 0 ; i< size; i++) { if (a[i]> -1) { o++; } } if (o == size ) { for(int i = 0 ; i < size; i++) { printf ("%d ", a[i]); } return; } else { int max = -1000, m; for (int i = 0 ; i < size ; i++) { if (a[i] < 0 && a[i] > max) { max = a[i]; m = i; } } int tem = a[m]; a[m] = a[size-1]; a[size-1] = tem; for(int i = 0 ; i < size; i++) { printf ("%d ", a[i]); } return; } } int main() { int size = 10,a[10] = { 1, -2, -3, -4, 5, 6, 7, 8, 9, 10}; swap_negmax_last(size, a); return 0; }
这段代码定义了一个函数 `swap_negmax_last`,它的作用是在数组中查找最大的负数,并将它与数组的最后一个元素交换位置。如果数组中没有负数,则直接输出原数组。主函数中用一个示例数组测试了这个功能。

- 代码中用一个固定值 `-1000` 来初始化最大负数,这不够通用。如果数组中的负数比 `-1000` 还小,就会出错。考虑如何用更可靠的方式找到第一个负数作为初始最大值。
- 函数同时做了两件事:查找交换和打印输出。通常函数应该只完成一个核心任务(比如交换),而打印输出放在主函数中会更清晰。你可以思考如何分离这两个职责。