c语言求二维数组鞍点,找不出bug在哪?

作者站长头像
站长
· 阅读数 14

如下:若输入的为3×3的数组1 2 3 4 5 6 7 8 9则运行出错,若9 8 7 6 5 4 3 2 1则可运行成功

#include<stdio.h>
//先找列最小,再找行最大 
int main()
{    int m,n;
    int i,j;
    scanf("%d%d",&m,&n);//m行n列数组
    int a[m][n];
    for(i=0;i<m;i++)//输入二维数组
    {
        for(j=0;j<n;j++)
        {
        scanf("%d",&a[i][j]);    
        }
    }
    printf("\n");
    for(i=0;i<m;i++)把数组元素排列好输出
    {
        for(j=0;j<n;j++)
        {
        printf("%d ",a[i][j]);    
        }
        printf("\n");
    }
    printf("\n\n");
    int min,max;//列最小,行最大
    int mm,nn;
    int flag=1; 
    for(i=0;i<n;i++)
    {
        min=a[0][i];
        for(j=1;j<m;j++)
        {
            if(min>a[j][i])//找出列最小,并标记为mm行nn列 
            {
                min=a[j][i];
                mm=j;nn=i;    
            }
        }
        max=min;//将列最小当作行最大 
        for(j=1;j<n;j++)//用列最小做行的比较,找出行最大
        {
            if(max<a[mm][j])
            {                     
                flag=0;
                continue;
            }
            
        }        
        if(flag==1) 
        {
            printf("鞍点是第%d行%d列的%d\n\n",mm+1,nn+1,max);
            break;
        }     
    }
    if(flag==0) 
    printf("没有鞍点\n\n");     
    return 0;
 } 
* *

c语言求二维数组鞍点,找不出bug在哪?c语言求二维数组鞍点,找不出bug在哪?

回复
1个回答
avatar
test
2024-07-11

试下呢

int main() {
    int m,n;
    int i,j;
    scanf("%d%d",&m,&n);//m行n列数组 
    int a[m][n]; 
    for(i=0;i<m;i++)//输入二维数组 
    { 
        for(j=0;j<n;j++) 
        { 
            scanf("%d",&a[i][j]); 
        } 
    } 
    printf("\n"); 
    for(i=0;i<m;i++)把数组元素排列好输出 
    { 
        for(j=0;j<n;j++) 
        { 
            printf("%d ",a[i][j]); 
        } 
        printf("\n"); 
    } 
    printf("\n\n"); 
    int min,max;//列最小,行最大 
    int mm,nn; 
    int flag=1; 
    for(i=0;i<n;i++) 
    { 
        max=a[0][i];
        for(j=1;j<m;j++) 
        { 
            if(max<a[j][i])//找出列最大,并标记为mm行nn列 
            { 
                max=a[j][i]; 
                mm=j;nn=i; 
            } 
        } 
        min=max;//将列最大当作行最小 
        for(j=1;j<n;j++)//用列最大做行的比较,找出行最小 
        { 
            if(min>a[mm][j]) 
            { 
                flag=0; 
                continue; 
            } 
        } 
        if(flag==1) 
        { 
            printf("鞍点是第%d行%d列的%d\n\n",mm+1,nn+1,min); 
            break; 
        } 
    } 
    if(flag==0)
        printf("没有鞍点\n\n"); 
    return 0;
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容