c语言基础

来源:百度知道 编辑:UC知道 时间:2024/05/15 12:09:15
//有一个3x4的矩阵,要求手动输入矩阵的值并求出其中值最大的那个元素的值,以及其所在的行号和列号

#include<stdio.h>
void main()
{
int i,j,n[3][4],max;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
scanf("%d",&n[i][j]);
max=n[0][0];
}
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(max<n[i][j])
max=n[i][j];
}
}
printf("最大值为%d\n",max);
printf("行号%d列号%d\n",i+1,j+1);

}

哪错了?为什么就是输不出几行几列?

原因:在得到最大值之后并没有记录该值的坐标(下标),所以每次循环出来后i总是3,j总是4。下面是改过的代码,希望有帮助:

#include<stdio.h>
void main()
{
int i,j,n[3][4],max;
int x=0,y=0;//用来记录最大值的坐标
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
scanf("%d",&n[i][j]);
}
max=n[0][0]; //max不用循环赋值,把数组的第一个数赋给它就可以了
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(max<n[i][j])
{
max=n[i][j];
x=i;y=j;
}
}
}
printf("最大值为%d\n",max);
printf("行号%d列号%d\n",x+1,y+1);

}

因为2个输出语句是在for循环后面,所以i和j执行到printf的时候已经是3和4了,你在+1是4和5,所以在for循环里面创建另外2个函数来接受最大时的坐标

应该记录下最小元素的行号和列号

改为
if(max<n[i][j])
{
max=n[i][j];
i_max=i;
j_max=j;
}