请大家看这是怎么回事
要求出一个数组中的元素,在所在行以及所在列都是最大,即求鞍点。
程序如下:
#define N 10
#define M 10
#include <conio.h>
main()
{
int a[N][M],i,j,m,n,k,max,maxj,flag;
printf("Please Input The Row Number:"); //输入行数
scanf("%d",&n);
printf("Please Input The Colnum Number:"); //输入列数
scanf("%d",&m);
printf("\n");
for(i=0;i<n;i++)
{
printf("Enter the elements of %d colnum:",i+1); //按行输入元素
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++) //输出矩阵
{
for(j=0;j<m;j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
{
max=a[i][0];
for(j=0;j<m;j++) //找各行中的最大数
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
flag=1;
for(k=0;k<n;k++) //将各行中的最大数与同一列的其他元素比较
if(max<a[k][maxj])
flag=0;
if(flag)
printf("The element of (%d,%d)---%d is a saddle point.\n",i+1,maxj+1,max);
else if(flag=0)
printf("No saddle point.\n");
}
getch();
}
这样的运行结果是正确的。可是大家注意到没有,最后的那个else if 语句后面是flag=0
语法是错误的!但是如果改成flag==0,或这只写else,运行结果就不正确了.再输出鞍点的同时,也总是同时输出No saddle point的信息。只有在else if(flag=0)这种错误的语法下是正确的,请大家帮看一下是怎么回事?
问题点数:20、回复次数:7Top
1 楼zalyer(小照)回复于 2003-01-03 13:06:56 得分 0
flag=0这一句不是语法错误,他是先给flag赋0,然后再判断的。在这里flag为0.
但你说的其他情况我不知道是怎么搞的Top
2 楼langziji(大象)回复于 2003-01-03 13:50:51 得分 20
printf("No saddle point.\n");
这一句应该在遍历所有的行才能输出,所以可以用一个计数变量count来标记鞍点的数量,最后判断输出。Top
3 楼lizhijun(云中漫步)回复于 2003-01-03 15:07:37 得分 0
同意楼上的。补充:
1):
else if(flag=0)
printf("No saddle point.\n");
这句应该没有语法错误,但存在语义错误,实际上,if的判断条件只是一个赋值表达式,它的值为0,所以,永远不会输出"No saddle point”信息的。解决的办法是基本同上,只是在他的句子最后加上:“No saddle point”否。
2)因为上面的语义错误,故即使按你的代码运行,在矩阵不存在鞍点时,程序不回输出No Saddle point的信息。
3)代码可以这样修改:
………………//同原代码
int count=0;
for(i=0;i<n;i++)
{
max=a[i][0];
for(j=0;j<m;j++) //找各行中的最大数
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
flag=1;
for(k=0;k<n;k++) //将各行中的最大数与同一列的其他元素比较
if(max<a[k][maxj])
flag=0;
if(flag)
{
count++;
printf("The element of (%d,%d)---%d is a saddle point.\n",i+1,maxj+1,max);
}
}
if(count==0)
printf("No saddle point.\n");
……//同原代码Top
4 楼cocodou(阿毛)回复于 2003-01-03 15:33:48 得分 0
thanks a lot!!Top
5 楼Davidzhuhua(David)回复于 2003-01-03 16:12:06 得分 0
我的建议最好是将flag定义为boolean 型。他的功能才能体现出来。最后就可以用if(flag) or if (!flag)来判断。Top
6 楼SwordMan2001(天笑2001)回复于 2003-01-03 16:23:44 得分 0
其实
else if(flag=0)
printf("No saddle point.\n");
与
else {
flag=0;
printf("No saddle point.\n:);
}
语意相同,不知源代码中为何那样书写。Top
7 楼lizhijun(云中漫步)回复于 2003-01-03 19:40:23 得分 0
我发现了一个问题: langziji 里面后两个音节为“自己”Top




