1.能否自由设置,我输入的行与列。这样在函数声明里的二维数组参数不对,那怎么样写才既能够满足我自由设置数组行列的目的,又不出现编译错误呢?网上查到的都是array[ ][ 4]这种,可这种不就事先固定了吗?
2.还有没有啥错误,有的编译错误我没咋看明白。
谢谢指教!
你这个报错是变量没有声明,
自由输入行和列的方式可以使用动态申请内存的方式,或者申请一个大数组也行(但是这种方式不推荐,如果题目没有给出最大范围,这种形式容易越界,且浪费空间)
用动态内存分配的方式,代码如下:
#include <stdio.h>
#include <stdlib.h>
void row_sum(int** a, int n, int m);
void col_sum(int** a, int n, int m);
int sumall(int** a, int n, int m);
int main(void)
{
int i, j;
printf("请输入二维数组的两个数字:\n");
int first, second;
scanf("%d", &first);
scanf("%d", &second);
int** a;
a = (int**)malloc(sizeof(int*) * first);
for (i = 0; i < first; i++)
{
a[i] = (int*)malloc(sizeof(int) * second);
for (j = 0; j < second; j++)
scanf("%d", &a[i][j]);
}
row_sum(a, first, second);
col_sum(a, first, second);
printf("该数组的总和是%d", sumall(a, first, second));
return 0;
}
void row_sum(int** a, int n, int m)
{
int i, j;
for (i = 0; i < n; i++)
{
int total = 0;
for (j = 0; j < m; j++)
total += a[i][j];
printf("row=%d sum of row=%d\n", i, total);
}
}
void col_sum(int** a, int n, int m)
{
int i, j;
for (j = 0; j < m; j++)
{
int total = 0;
for (i = 0; i < n; i++) {
total += a[i][j];
}
printf("col=%d sum of col=%d\n", j, total);
}
}
int sumall(int** a, int n, int m)
{
int i, j;
int total = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
total += a[i][j];
}
return total;
}