楼主的想法和我一样,先找行里最大的,再判断找到的是不是他所在列最大的。但楼主有几个地方写错了。
void fun(int (*a)[M])
{
int i, j, k, max, min;
for(i=0;i<N;i++)
{
max=a[i][0];
for(j=1;j<M;j++)
{
if(max<a[i][j])
//这儿应该加一个{ }应为只有max<a[i][j]时 max=a[i][j] 和 k=j 都执行,但你这样写 k=j 每次都执行了。
max=a[i][j];
k=j;
}
min=a[0][k];
for(i=1;i<N;i++)
//这儿不该用i,会和上边的i冲突,应该用j
{
if(min>a[i][k]) //判断错误,是找最小,不是最大
min=a[i][k];
}
if(min==max)
printf("find:a[%d][%d]=%d", i, k, a[i][k]);
else
printf("sorry it is not have it ");
//逻辑错误,每执行一行就会判断一次,这不科学,应该执行完了都没找到才打印这句话
}
}
修改后代码如下,判断是否存在我是加了一个数T判断,T为1,表示存在,0表示不存在,默认为0。
#include <stdio.h>
#include <stdlib.h>
#define N 3
#define M 4
void fun(int (*a)[M])
{//N*M矩阵
int i, j, k, max, min;
int
T=0;
for(i=0;i<N;i++)
{
max=a[i][0];
for(j=1;j<M;j++)
{
if(max<a[i][j]){
max=a[i][j];
k=j;
}
}
min=a[i][k];
for(j=0;j<N;j++){
if(a[j][k]<min)
min=a[j][k];
}
if(min==max){
printf("find:a[%d][%d]=%d", i, k, a[i][k]);
T=1;
}
}
if(T==0){
printf("sorry it is not have it ");
}
}
int main()
{
int a[N][M], i, j;
printf("enter number for array:\n");
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d", &a[i][j]);
printf("the arrayis :\n");
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
printf("%3d", a[i][j]);
printf("\n");
}
fun(a);
system("pause");
return 1;
}