你这个报错是变量没有声明,
自由输入行和列的方式可以使用动态申请内存的方式,或者申请一个大数组也行(但是这种方式不推荐,如果题目没有给出最大范围,这种形式容易越界,且浪费空间)
用动态内存分配的方式,代码如下:
#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;
}
如果你的IDE支持C99,你可以写a[m][n]
然后m,n在之后的scanf里输入
否则,你需要先定义一个a[][],后面使用malloc动态申请空间
注意,你定义的是a[][],不是a[,],它是个每行的列数允许不同的结构,所以你需要行和列分别初始化,给行分配好空间之后,要循环给每列分配空间