魁梧的意思是什么:谁帮我解决一道C语言难题(改错)

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/01 11:52:08
本程序是3*4矩阵中的最大元素及其所在行和列的位置。数组元素可能有等于0,小于0或大于0的值,请修改下面程序中的错误。
#include <stdio.h>
#define M 3
#define N 4
main()
{ int a[M][N],max,i,j;
int row,column;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
max=0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(max<a[i][j]){max=a[i][j];row=i;column=j;}
printf("\nmax=%d,row=%d,column=%d\n",max,row,column);
}
请找出错误,说明原因,并改之。
答案是:
将第6行 int row=0,column=0
第10行 max=a[0][0]
请说明一下原因,为什么这么改,原来的错在哪里?
那你说了等于没说,你给那个程序我上机调试过了,错了5个地方

第10行max=0; 应该为max=a[0][0];
因为就像楼上说的 如果读入的所有数都是负的那就没办法找出最大数了

应该为max=a[0][0];就是把矩阵的第一个数先赋给最大值让所有的数都和第一个数比较,不要赋负无穷比较好因为负无穷既不好表示输入也麻烦。
第6行int row,column; 该为 int row=0,column=0
你的row,column是没有赋值,赋值语句是在if里出现的如果第一个就是最大数那么if就不能执行 row,column就没有值了。

//v1.2
晕, 什么叫说了等于没说啊-_-# 我自己调试没有一点儿问题。 这个我也没有必要骗你...
环境dev-cpp 编译器gcc/g++ minGW

//v1.1
你不能给max赋值0, 因为有可能读入的所有数都是负的。 所以你开始赋值给一个这个数组中的值, 并且行和列也赋值相映的行列, 这样, 一旦有比它大的值, max, row, column就会自动更新了。 如果都比他小, 就返回那第一个元素的max, row, column了

//v1.0
首先你的数组是从下标0开始的, 所以最后打印时应该是row+1和column+1, 然后max的初值应该赋个无穷小的值, 因为你读入的数有可能都是负的, 这样将返回0, 显然是错的。

你的方法浪费了不必要的空间, 你只是找最大的, 所以没有必要去存整个数组。 代码给你写出来了。

#include<stdio.h>
int main(){
int row, col, max, tmp;
max = -1000000000;
for(int i=0; i<3; i++)
for(int j=0; j<4; j++){
scanf("%d", &tmp);
if(tmp>max){
max = tmp;
row = i;
col = j;
}
}
printf("max=%d,row=%d,column=%d\n", max, row+1, col+1);
}

我给你也个简单的解释吧:
max=0; 改为 max=a[0][0] ;意识是给:数组a[0][0]的值赋给max,然后
将max看做是现在的最大值,然后将
剩余的数组的值一个一个的与 max比较,
如果这个数组的值大于max的话,就把这个数组的
值赋给max.......然后依次这样进行比较,
就可以了.
int row=0,column=0 意思是在说:给行数和列数分别赋予初值,然后进行
比较,其实很简单的!
你仔细想想就ok拉!
原我的答案你能满意,呵呵!
很高兴能为你回答问题!

max=0; 改为 max=a[0][0] ;