我想实现三个功能,一个是计算每行总和,一个计算每列,一个计算总和

img

img

img


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;
}

如果你的IDE支持C99,你可以写a[m][n]
然后m,n在之后的scanf里输入
否则,你需要先定义一个a[][],后面使用malloc动态申请空间
注意,你定义的是a[][],不是a[,],它是个每行的列数允许不同的结构,所以你需要行和列分别初始化,给行分配好空间之后,要循环给每列分配空间

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632