C语言中二维数组找到每行的最大值?

下面这个程序,我想将一个三行四列的数组a[3][4]的每一行的最大数找出来,然后存在b[3]数组中下面是我写的循环,但是运行出来不对。。。。麻烦有大佬给指导一下

思路和想法完全正确,仔细看应该是给b[]赋值没有写对位置,在往后一步,放在大括号外面,应该循环比较是两层循环加一个if比较,所以要把赋值在往后移动,等比较全部完成后再赋值给数组保存。

#include<stdio.h>

//首先指定M和N的值

#define M 3

#define N 3  

int main()

{

printf("There are %d rows %d columns.\n", M, N); //输出到屏幕的提示信息  

int a[M][N] = { 0 }; //声明一个M行N列的数组,并将全部元素赋初值为0  

int i, j; //for循环中要用到  

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

{

printf("input %d row's %d values: ", i + 1, N); //输出到屏幕的提示信息

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

scanf("%d", &a[i][j]); //对第i行第j列的元素赋值


int maxArr[M] = { 0 }; //声明一个含有M个元素的一维数组来存储M个行最大值 

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

{

int max = a[i][0]; //先将每一行的第一个数作为最大值

for (j = 1; j < N; j++) //找出行最大值

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

max = a[i][j];

maxArr[i] = max; //将行最大值存入行最大值数组中

}

for (i = 0; i < M; i++) //将每行最大的数输出

printf("%d ", maxArr[i]);

return 0;

}

扩展资料:

二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按“列优先顺序”存储时,地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节

参考资料来源:百度百科-二维数组

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-20
看的出来思路和想法完全正确,
仔细看应该是给b[]赋值没有写对位置,
在往后一步,放在大括号外面,应该循环比较是两层循环加一个if比较,所以要把赋值在往后移动
等比较全部完成后再赋值给数组保存,本回答被网友采纳
第2个回答  2020-02-20

没必要3重循环。试试这个

第3个回答  2020-02-20

第4个回答  2020-02-20

请这样修改后试试?

追答

算法本身不需要三重循环,非要去做,还怎么找错?