简单c语言题。求鞍点?下面的程序哪里错了?顺便求高手详解一下flog的用法?菜鸟拜谢。

#include<stdio.h>
#define M 4
#define N 3
int main()
{
int a[M][N],i,j,r,c;
int flog,max,min;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
}
flog=0;
for(i=0;i<M;i++)
{
max=a[i][0];
r=i;
c=0;
for(j=1;j<N;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
r=i;
c=j;
}
}
min=a[0][c];
for(i=1;i<M;i++)
{
if(a[i][c]<min)
{
min=a[i][c];
}
}
}
if(max=min)
printf("%d行%d列是鞍点%d\n",r,c,max);
flog=1;
if(flog=0)
printf("无鞍点\n");
return 0;

}
鞍点是一行数值中的最大值,并且在最大值的那一列是最小值。

问题有很多啊。。。你需要理解以下内容
1. 变量i,j的定义,需要好好理解变量的作用范围
2. = 和 == 的区别
3. 了解if语句后若不加花括号,该模块的有效区域

你说的flog其实就是flag,用它来判断当前二维数组是否有鞍点,有的话置1,就不用进printf("无鞍点\n");的if模块了

以下是正确的程序

#include<stdio.h>
#define M 4
#define N 3
int main()
{
int a[M][N],r,c;
int flog,max,min;
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
}
flog=0;
for(int i=0;i<M;i++)
{
max=a[i][0];
r=i;
c=0;
for(int j=1;j<N;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
r=i;
c=j;
}
}
min=a[r][c];
for(int i=0;i<M;i++)
{
if(a[i][c]<min)
{
min=a[i][c];
}
}
if(max==min)
{
printf("%d行%d列是鞍点%d\n",r,c,max);
flog=1;
}
}
if(flog=0)
printf("无鞍点\n");
system("pause");
return 0;

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-12
是gets()吧。。。那个是读取一行字符,直到遇到回车之类的才停,当然空格神马的肯定都输进去了!getchar()是读一个字符,注意这个也会读你行末的回车!就是'\n'
对于这个程序吧,那个 //char *word=" ";前面咋有个注释啊。。。

我在Dev上粘上你的代码了,编译没有通过。。。那个指针貌似是得加个*的,才能读取其地址里的内容。我觉得啊,这个word是存字符串的,你申请的是存一个字符的。。。如果想读一个字写一个字应该把输入放进while循环体,用getchar.
我建议开数组,并且如果输出需要用指针一个一个走的话最好再开一个指针(或者一个int当下标一个一个走都行),但这样好像不行,word不是用来 的。

个人感觉,
第一,申请指针这类事吧,匹配内存没有是个问题,我喜欢申请数组的,(当然我是搞OI竞赛的,这个未必最好)
第二,对于一般没有空格的字符串,最好用fscanf(fp,"%s",word);这样的去读,因为gets它只要没读到回车就接着读,不管你后面地址是不是用做存字符数组的。
第三,输出字符串的时候(如果您不是在尝试函数的用法),我也建议用fprintf(fp,"%s\n",word);这样的去输出,当然puts也是可以的。
还有呢,库文件就用尖括号吧,那样比较快,主函数后面写个return看起来更完美些。。。(很多兼容c 的编译器都是要求main属于int型的,最后就是return 0;)

其实如果更高级的玩字符串的函数,sscanf,sprintf,等待你去发掘!
第2个回答  2011-12-13
哥,你程序整个都不对,没啥道理.等号的两边是反的,数组的行列也是
第3个回答  2011-12-12
求题目···