小虾怎么炸又酥又脆:大家帮我找找错(简单C)

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 12:11:58
这是求鞍点的程序,我检查了几遍,但结果都是错的,我不知道错在了哪里,求大家帮忙呀,谢谢。
----------------------
#include <stdio.h>
#define M 4
#define N 5
main()
{
int a[M][N],flag,max,i,j,k,d;
printf ("please insert date:\n");
for (i=0;i<M;i++)
for (j=0;j<N;j++)
scanf ("%d",&a[i][j]);

for (i=0;i<M;i++)
{max=a[i][0];
k=0;
for (j=0;j<N;j++)
if (a[i][j]>max)
{max=a[i][j];k=j;}
flag=1;
for (d=0;d<N;d++)
if (max>a[d][k])
{flag=0;continue;}
if (flag)
{printf ("flag=a[%d][%d],%d",i,k,max);
break;}
}
if (!flag)
printf ("not flag!\n");
}
我晓得我的错在哪里了,我把列搞成了行,改这里就好了。
。。。
for (d=0;d<M(这里应该是行不是列);d++)
if (max>a[d][k])
。。。
continue的用法没有问题。
555555555的那个矩阵没有鞍点。

错误有2个地方:1是判断列用行计数了,2是continue的用法是不对的呵呵.已经改成下面的了:
------------------------------------------
LZ的continue,语法和结果上都是没问题的,但是出于效率的考虑那里使用break要比continue好的多,在那里continue会继续下面这个循环:
for (d=0;d<N;d++)
if (max>a[d][k])
{flag=0;continue;}
而实际情况是:如果max>a[d][k]的条件一成立,就没有必要再继续判断d自增加以后的情况了,因为只要有比它小的,它就可以被排除是鞍点的可能了.所以使用break直接终止列判断循环要比继续判断下去效率高的多
------------------------------------------

#include <stdio.h>
#define M 4
#define N 5
main()
{
int a[M][N],flag,max,i,j,k,d;
printf ("please insert date:\n");
for (i=0;i<M;i++)
for (j=0;j<N;j++)
scanf ("%d",&a[i][j]);

for (i=0;i<M;i++)
{
max=a[i][0];
k=0;
for (j=0;j<N;j++) if (a[i][j]>max) {max=a[i][j];k=j;}
flag=1;
for (d=0;d<M;d++) if (max>a[d][k]) {flag=0;break;}
if (flag)
{printf ("flag=a[%d][%d],%d",i,k,max); break;}
}

if (!flag)
printf ("not flag!\n");
}

另外就是LZ这个程序只能计算1个鞍点,如果LZ把最后printf后面的break去掉,这个程序就可以计算1个矩阵中所有的鞍点了呵呵.

你用以下程序试试看:

鞍点是不是就是在所处的行中最大
而在所处的列中最小的元素?

我重新改了一下,你试试看:我改过了,刚才试了一下,对了的啊.

#include <stdio.h>

#define M 4
#define N 5

main()
{
int a[M][N],flag,max,i,j,k,d;

printf ("please insert date a[4][5]:\n");

for (i=0;i<M;i++)
{
for (j=0;j<N;j++)
{
printf("a[%d][%d]=",i,j);
scanf ("%d",&a[i][j]);
}
}

for (i=0;i<M;i++)
{
for (j=0;j<N;j++)
{
printf("[%d]",a[i][j]);
}
printf("\n");
}

for (i=0;i<M;i++)
{
max=a[i][0];
k=0;
for (j=0;j<N;j++)
{
if (a[i][j]>max)
{
printf("max=[%d]\n",max);
max=a[i][j];k=j;
}
}
flag=1;
for(d=0;d<N;d++)
{
if(max>a[d][k])
{
printf("max=[%d],max>a[%d][%d]=[%d]\n",max,d,k,a[d][k]);
flag=0;
break;
}
}
if(flag)
{
printf("flag=a[%d][%d],%d\n",i,k,max);
}
}

if(!flag)
printf("not flag!\n");
}

还有疑问,比如:
5 5 5 5
5 5 5 5
5 5 5 5
5 5 5 5
有几个鞍点?