在线编译器 C

#include <stdio.h> void swap_negmax_last(int size, int a[]){ int n_save=0,t=0; while(t<size){ if(a[t]<0){ n_save=a[t]; break; }t++; } a[t]=a[size-1]; a[size-1]=n_save; for(int i=0;i<size;i++){ printf("%d",a[i]); } return; } int main() { int a[10],answer; for(int m=0;m<10;m++){ scanf("%d",&a[m]); } answer=swap_negmax_last(10,a); printf("%d",answer); return 0; }
这段代码试图实现一个功能:找到数组中最后一个负数最大值(即最靠右的最大负数),并将其与数组最后一个元素交换。但代码存在几个问题。

首先,`swap_negmax_last` 函数没有正确找到“最后一个负数的最大值”。它只找到了第一个负数,然后就直接交换了。而且函数被声明为 `void` 类型,但 `main` 中却试图用 `answer` 接收它的返回值,这会导致编译错误。

- 你的循环只找到了第一个负数,而不是“最后一个负数中的最大值”。你需要遍历整个数组,记录下所有负数中最大的那个(以及它的位置),并且如果有多个相同的最大值,要取最后一个出现的位置。
- `swap_negmax_last` 函数返回类型是 `void`,但 `main` 中 `answer=swap_negmax_last(...)` 试图使用返回值,这是错误的。要么让函数返回交换后的结果(比如返回某个值),要么直接让函数打印结果,不要在 `main` 中再打印一次。