C++程序,为什么声明了i,j,max是全局变量,for 语句里赋了初值,最后输出的乱七八糟的

题目:有一个3×4的矩阵,要求编写程序求出其中值最大的那个元素的值,以及其所在的行号和列号,#include<iostream>usingnamespacestd;int... 题目: 有一个3×4的矩阵,要求编写程序求出其中值最大的那个元素的值,以及其所在的行号和列号,

#include <iostream>
using namespace std;
int main(){
int a[3][4];
int max;
int i;
int j;
cout<<"请输入十二个元素"<<endl;
for( i=0;i<3;i++){
for( j=0;j<4;j++){
cin>>a[i][j];
max=a[0][0];
if(a[i][j]>max){
max=a[i][j];
}
}
}
cout<<max<<"它在第"<<i+1<<"行"<<"第"<<j+1<<"列"<<endl;
return 0;
}
输出的就乱七八糟的;根本不是我要的结果;
展开
 我来答
汐日南莘
2013-05-09 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.6万
采纳率:45%
帮助的人:7342万
展开全部

#include <iostream>

using namespace std;

int main()

{

int a[3][4];

int max,k1=0,k2=0;

int i;

int j; 

cout<<"请输入十二个元素"<<endl;

for( i=0;i<3;i++)

 for( j=0;j<4;j++)

  cin>>a[i][j];//先输入数据

  max=a[0][0];

  for( i=0;i<3;i++)//输入完数据后再比较

 for( j=0;j<4;j++)

  if(a[i][j]>max)

  {

   max=a[i][j];

   k1=i+1;//记下最大值的下标

   k2=j+1;

  }

 cout<<max<<"它在第"<<k1<<"行"<<"第"<<k2<<"列"<<endl;

 return 0;

}

_whales
2013-05-10 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:490万
展开全部
{int m=0,n=0;/*定义和循环变量不同的变量,表示最大值的位置,避免反复查找 */
max=a[0][0];/* 这条语句要写在循环外边,或者初始化表达式中 */
for( i=0;i<3;i++){
for( j=0;j<4;j++){
cin>>a[i][j];
/*max=a[0][0]; 谁告诉你这条语句要写在循环与据内部的 */
if(a[i][j]>max){
max=a[i][j];m=i;n=j;
}
}
}

cout<<max<<"它在第"<<m+1<<"行"<<"第"<<n+1<<"列"<<endl;
}
追问
max的问题我懂了,那i,j为什么不行啊,为什么要再定义与循环变量不一样的量呢?什么叫反复查找啊?求解释,谢谢。。。我这学期才开的C++课,学的糊里糊涂的。。。。
追答
如果不定义变量表示max 的位置,那么只能找到
max 的数值。
i, j 是循环变量,必定要找完每一个元素,才能得到最大值。
最后必然会有
i==3;j==4;
只有当这个时候循环才会结束。
max 的位置信息,在这个过程中就丢失了。
反复查找:
只有再比较一下哪个元素的值,等于max 才能知道,最大值在哪个位置。
这第二次查找就是反复查找;
这其实和C++关系不大,这是数学问题。
只有一个一个比较,才知道谁最大,只有记录才能够得到位置。不然
循环变量会达到他的最大值,每一个元素都有可能是最大值。
不可能一定是a[2][3];i=2;j=3;
循环退出时 i=3,j=4

for( i=0;i----e2==0-->---+
| | |
| | e2!=0 |
| V |
^ [ s ] |
| [ e3 ] |
| | |
+ -------------+ V
|
+-------------------------+
|
V
[ 结束 ]
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友175b009
2013-05-09 · TA获得超过726个赞
知道小有建树答主
回答量:353
采纳率:0%
帮助的人:267万
展开全部
#include <iostream>
using namespace std;
int main()
{
int a[3][4];
int max = -999;//给max一个很小的初值
int c;//定义一个变量用来存储最大值的行
int d;//定义一个变量用来存储最大值的列
cout<<"请输入十二个元素,输入一个数字后按Enter键再输入下一个"<<endl;
for(int i=0; i<3; i++)
{
for(int j=0; j<4; j++)
{
cin>>a[i][j];
if(a[i][j]>max)
{
max=a[i][j];//如果输入的值比max当前值大,记住这个值
c = i;//记住这一行
d = j;//记住这一列
}
}
}
cout<<max<<"它在第"<<c+1<<"行"<<"第"<<d+1<<"列"<<endl;
//把记住的最终的行、列输出来
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Vitialow
2013-05-10
知道答主
回答量:1
采纳率:0%
帮助的人:1490
展开全部
看不懂你为什么每次进入第二层循环的时候为什么都要把二维数组第一个元素赋值给max,这样你只是把二维数组第一个数和最后一个数比较而已啊,(我觉得是这样的),还有弄不懂为什么你在最后还要把i和j加1跳出循环的时候他们已经加了啊,你是不是觉得数组从零开始就一定会少1?不是有++吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
19...2@qq.com
2013-05-10
知道答主
回答量:8
采纳率:0%
帮助的人:3.5万
展开全部
max=a[0][0];写在循环里面,就每次执行循环都会重新把a[0][0]的值覆盖掉原来已取得值较大的结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式