Online Compiler C

#include <stdio.h> void swap_negmax_last(int size, int a[]){ int max=a[0]; int n=0; for(int i=0;i<size;i++){ if(a[i]<max){ max=a[i]; } } for(int i=0;i<size;i++){ if(a[i]<0){ if(a[i]>max) max=a[i]; n=i; } } a[n]=a[size-1]; a[size-1]=max; printf("%d",a); } int main() { int a[5]={1,2,3,-5,4}; swap_negmax_last(5,a); return 0; }
这段代码试图找到数组中的最大负数,并将其与最后一个元素交换。但代码中有几个问题。

首先,第一个循环找的是最小值(负数中绝对值最大的),而不是最大负数。第二个循环的逻辑也有问题,它没有正确记录最大负数的位置。另外,`printf("%d", a)` 是错误的,不能这样打印整个数组。

- 第一个循环找的是最小值,但题目要求的是最大负数。你需要区分“最小”和“最大负数”的概念。最大负数是指负数中值最大的(比如-1比-5大)。
- 第二个循环中,你更新 `max` 和 `n` 的条件不完整。当 `a[i]` 是负数且大于当前 `max` 时,才应该更新 `max` 和位置 `n`。但注意,`max` 初始值可能不是负数,这会影响比较结果。