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;
}
输出的就乱七八糟的;根本不是我要的结果; 展开
#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;
}
输出的就乱七八糟的;根本不是我要的结果; 展开
7个回答
展开全部
#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;
}
展开全部
{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=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
[ 结束 ]
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看不懂你为什么每次进入第二层循环的时候为什么都要把二维数组第一个元素赋值给max,这样你只是把二维数组第一个数和最后一个数比较而已啊,(我觉得是这样的),还有弄不懂为什么你在最后还要把i和j加1跳出循环的时候他们已经加了啊,你是不是觉得数组从零开始就一定会少1?不是有++吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
max=a[0][0];写在循环里面,就每次执行循环都会重新把a[0][0]的值覆盖掉原来已取得值较大的结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询