请帮我看看这个C语言程序是什么问题?

来源:百度知道 编辑:UC知道 时间:2024/05/09 15:58:08
这个程序的目的是求5*5数组对角线上的最小值,但是运行的结果很莫名其妙,但是如果scanf赋值直接改成在声明时就给数组赋初值,那么运行结果是对的,希望各位帮帮忙,谢谢了!!

int min(int a[5][5])
{int t,i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i==j)
if(a[i+1][j+1]>a[i][j])
{t=a[i][j];a[i][j]=a[i+1][j+1];a[i+1][j+1]=t;}
return a[4][4];
}
main()
{int b[5][5],i,j,p;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&b[i][j]);
p=min(b);
printf("the minimum number is:%d",p);
}

首先简化一下代码。。。你如果只寻找对角线上的最小数就不用2个FOR循环了,一个循环就行。。。
其次你的代码比较的是当前数字和下一个数字,所以当运行到数组末尾的时候会出现溢出
再次在MIN函数里你是不是想把比较小的数字往后移动,然后返回最后一个值?这个貌似你移动到每一行的末尾的时候都会出现错误。
下面是我修改的代码
#include<stdio.h>
int min(int a[5][5])
{int i,min=a[0][0];
for(i=0;i<5;i++)
min=a[i][i]<min?a[i][i]:min;
return min;
}
main()
{int b[5][5],i,j,p;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&b[i][j]);
p=min(b);
printf("the minimum number is:%d",p);
}