用函数写程序,可以帮我看看哪里出错了么,实在找不出来


#include 
#define m 3
#define n 4
void zdx(int ar[m][n]){
    int i,j,cr[n][2],a,b,t;
    for(i=0;i0][i];b=ar[2][i];
        for(j=0;ja && ar[j][i]>b){
                a=ar[j][i];
            }
            else if(ar[j][i]0]=a;cr[i][1]=b;
        printf("%d %d ",cr[i][0],cr[i][1]);    
    }
}
int main(){
    int i,j,zr[m][n]={0};
    for(i=0;i0;j"%d",&zr[i][j]);
        }
    }
    zdx(zr);
    return 0;
}

输入一个3行4列的数组,输出每列的最大最小值,为什么我的程序只有部分可以找出列的最大和最小值,有的找的是中间值,谢谢

你的程序在寻找列的最大和最小值时存在一些问题。具体来说,当第一个元素比第二个元素小的时候,你使用了一个变量 t 来交换它们的值。然而,这个变量只是临时存储了第一个元素的值,而没有存储第二个元素的值。因此,当你交换它们的值时,实际上只是把第一个元素的值复制到了第二个元素的位置,而第一个元素的值仍然是原来的值。

为了解决这个问题,你可以使用一个临时数组来存储每列的最大和最小值,然后在循环结束后输出它们。以下是修改后的代码:

#include <stdio.h>
#define m 3
#define n 4

void zdx(int ar[m][n]) {
    int i,j,cr[n][2],a,b;
    for(i = 0; i < n; i++) {
        a = ar[0][i];
        b = ar[0][i];
        for(j = 0; j < m; j++) {
            if(ar[j][i] > a) {
                b = a;
                a = ar[j][i];
            }
            else if(ar[j][i] > b) {
                b = ar[j][i];
            }
        }
        cr[i][0] = a;
        cr[i][1] = b;
    }
    for(i = 0; i < n; i++) {
        printf("%d %d ", cr[i][0], cr[i][1]);
    }
}

int main() {
    int i, j, zr[m][n] = {0};
    for(i = 0; i < m; i++) {
        for(j = 0; j < n; j++) {
            scanf("%d", &zr[i][j]);
        }
    }
    zdx(zr);
    return 0;
}

在修改后的代码中,我们使用了两个变量 a 和 b 来存储每列的最大和次大值。在循环结束后,我们把它们存储到临时数组 cr 中,然后输出它们。通过这种方式,我们可以正确地找到每列的最大和最小值,而不是中间值。

参考GPT和自己的思路:你的代码中,第三个if语句中的逻辑条件应该是a<b,而你写成了a>b,导致当a<b时,b的值被赋给了a,a的值被赋给了b,输出结果就错了。

修改第三个if语句即可:

else if(a<b) {
    t=a; a=b; b=t;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^