#include"stdio.h"
void main()
{
int i,j,k,h,x,y,m,max,a[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
{
max=a[i][0];
for(j=0;j<4;j++)
{
if(a[i][j]>max)
max=a[i][j];
k=j;
h=i;
}
for(i=0;i<4;i++)
{
if(a[h][k]<a[i][k])
m++;
}
if(m=3)
{
x=h;
y=k;
}
}
printf("%d行%d列为鞍点,数据为 %d\n",x,y,a[x][y]);
}
下面这个程序是我编的,但是运行的结果有错误,好像每次只运行0行的数据,高手来help下吖!!
答案:3 悬赏:80 手机版
解决时间 2021-05-11 10:06
- 提问者网友:像風在裏
- 2021-05-10 10:56
最佳答案
- 五星知识达人网友:拜訪者
- 2021-05-10 11:54
看了一下,漏洞太多了,修改了一下:
#include"stdio.h"
void main()
{
int i,j,k,h,x,y,m,max,a[4][4],l;
x=y=-1;//x,y设初值-1,用于最后判断是否有鞍点
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
{
m=0;//每次循环m清零
max=a[i][0];
h=i;k=0;//每次循环h,k的初值,可能该行第一个数是最大值
for(j=0;j<4;j++)
{
if(a[i][j]>max)
{//注意这个if的范围
max=a[i][j];
k=j;
h=i;
}
}
for(l=0;l<4;l++)//这里用l而不能用i
{
if(a[h][k]<a[l][k])
m++;
}
if(m==3)
{
x=h;
y=k;
}
}
if(x==-1 && y == -1)
printf("不存在鞍点\n");
else
printf("%d行%d列为鞍点,数据为 %d\n",x,y,a[x][y]);
}
全部回答
- 1楼网友:酒醒三更
- 2021-05-10 14:09
void main()
{
int i,j,k,h,x,y,m,max,a[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++) -- *1
{
max=a[i][0];
for(j=0;j<4;j++)
{
if(a[i][j]>max)
max=a[i][j];
k=j;
h=i;
}
for(i=0;i<4;i++) -- *2
{
if(a[h][k]<a[i][k])
m++;
}
if(m=3)
{
x=h;
y=k;
}
}
printf("%d行%d列为鞍点,数据为 %d\n",x,y,a[x][y]);
}
问题出在*1和*2的地方。因为第一次执行*1的循环时i=0,*2处执行后i=4时跳出*2的循环。此时对于*1的循环条件i<4来说已经不满足了,所以跳出*1的循环。==》每次只运行0行的数据。
- 2楼网友:骨子里都是戏
- 2021-05-10 12:29
#include"stdio.h"
void main()
{
int i,j,k,h,x=-1,y=-1,m,max,a[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
{
max=a[i][0];
m=0; // 注意m每次循环中都要清零,不然对后面的计算造成很大的影响
for(j=0;j<4;j++)
{
if(a[i][j]>max)
max=a[i][j];
k=j;
h=i;
}
for(i=0;i<4;i++)
{
if(a[h][k]<a[i][k])
m++;
}
if(m==3) // 是等号 不是赋值
{
x=h;
y=k;
}
}
if(x==-1 && y == -1)
printf("不存在鞍点\n");
else
printf("%d行%d列为鞍点,数据为 %d\n",x,y,a[x][y]);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯