C语言二维数组动态分配内存(结合例题)

exercise:

给出一个n*n(n<=10)的二维矩阵,计算其周围一圈元素之和。
(提示:可以用循环累加第一行最后一行第一列最后一列,再减去矩阵四个角的元素,注意数组下标从0开始)
输入数据只有一组,首先在第一行输入n,接下来有n行,每行输入n个整数。
输出该矩阵的周围一圈元素之和。

Code:

#include
#include

int main()
{
    int n;
    int i = 0, j = 0, sum = 0;
    scanf("%d", &n);
    //二维数组动态分配内存
    //为分配n行内存
    int **arr = (int **)malloc(sizeof(int)*n);
    //为每行n列内存
    for(i = 0; i < n; i++){
        arr[i] = (int *)malloc(sizeof(int)*n);
    }
    //录入数据
    for(i = 0; i < n; i++){
        for(j = 0; j < n; j++){
            scanf("%d", &arr[i][j]);
        }
    }
    //测试数据是否传入
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            printf("%d ", arr[i][j]);
        }
            printf("\n");
    }
    //计算矩阵外围数据之和
    for(int i = 0; i < n; i++){
        sum+=arr[0][i];
        sum+=arr[n-1][i];
        sum+=arr[i][0];
        sum+=arr[i][n-1];
    }
    sum = sum - arr[0][0] - arr[0][n-1] - arr[n-1][0] - arr[n-1][n-1];
    printf("%d", sum);

    return 0;
}

The n and the matrix

C语言二维数组动态分配内存(结合例题)_第1张图片

The result:   52

C语言二维数组动态分配内存(结合例题)_第2张图片

你可能感兴趣的:(C语言程序)