2301_77100479 2023-03-25 21:37 采纳率: 60%
浏览 33
已结题

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


#include <stdio.h>
#define m 3
#define n 4
void zdx(int ar[m][n]){
    int i,j,cr[n][2],a,b,t;
    for(i=0;i<n;i++){
        a=ar[0][i];b=ar[2][i];
        for(j=0;j<m;j++){
            if(ar[j][i]>a && ar[j][i]>b){
                a=ar[j][i];
            }
            else if(ar[j][i]<a && ar[j][i]<b){
                b=ar[j][i];
            }
            else if(a<b){
                t=a;a=b;b=a;
            }
        }
        cr[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;i<m;i++){
        for(j=0;j<n;j++){
            scanf("%d",&zr[i][j]);
        }
    }
    zdx(zr);
    return 0;
}

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

  • 写回答

3条回答 默认 最新

  • 海洋 之心 2022年度博客之星人工智能领域TOP 1 2023-03-25 21:41
    关注

    你的程序在寻找列的最大和最小值时存在一些问题。具体来说,当第一个元素比第二个元素小的时候,你使用了一个变量 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 中,然后输出它们。通过这种方式,我们可以正确地找到每列的最大和最小值,而不是中间值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数