C的“鞍点”程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:24:55
请帮忙看一道题目,请教2个问题:看看我错在哪里?为什么错?(急!)
特别奇怪的是if(!flag)条件语句,不论flag=0还是flag=1;if下面的printf()都执行,晕死了

源代码:
/* 找出一个二维数组中的鞍点(鞍点:即该位置上的元素在该行上最大,在该列上最小) */

#include <stdio.h>
#define M 10
#define N 10
main()
{
int i,j,k,m,n,flag,a[M][N],max,maxi,maxj;
/* 输入行数 */
printf("Please input the number of line-m:");
scanf("%d",&m);
/* 输入列数 */
printf("\nPlease input the number of row-n:");
scanf("%d",&n);
printf("\n");
/* 输入二维数组的值 */
for(i=0;i<m;i++)
{
printf("The %d line ?\n",i);
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
/* 打印二维数组 */
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
/* 行比较 */
for(i=0;i<m;i++)
{
max=a[i][0];
for(j=1;j<n;j++)
if(max<a[i][j])
{

程序逻辑很有问题,主要是后面标记值flag的设置。先看一下下面改过的吧。

PS:变量的声明和初始化不要写成这样,像糖葫芦串一样,看不清,每个变量单独一行,最好都初始化。例如
int x = 0;
int y = 0;
double z = 1.2;
这样写以后写注释也方便。如果都写成一行,我想你注释也没法写吧?

#include <stdio.h>
#define M 10
#define N 10
main()
{
int i,j,k,m,n,flag,flagx=0,a[M][N],max,maxi,maxj;
/* 输入行数 */
printf("Please input the number of line-m:");
scanf("%d",&m);
/* 输入列数 */
printf("\nPlease input the number of row-n:");
scanf("%d",&n);
printf("\n");

/* 输入二维数组的值 */
for(i=0;i<m;i++)
{
printf("The %d line ?\n",i);
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
/* 打印二维数组 */
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
/* 行比较 */
f