c - 如何对二维数组中的元素求和?

标签 c multidimensional-array element

我正在尝试对 C 中 10 x 10 二维数组内的值求和。例如,在index[0][0] 中,我的值为1。我想对该元素及其紧邻的右侧、左侧、顶部和下方的元素求和。所以 (1 + 0 + 1 ) = 3。

当我移动到索引[0][1]时,我现在将添加 4 个值,因为我知道不再受到角落的限制。例如 (0 + 1 + 0++ 1) = 2 。这是索引 [0][1] 处的 0 值以及紧邻其右侧、左侧和底部的索引中的值,因为顶部超出了其范围。我提供了一个图像来帮助说明我正在处理的内容。我尝试了很多东西,但我不确定如何用 C 语言 进行数学计算

enter image description here

最佳答案

这可以通过使用四个 if 语句的简单函数来完成,以避免添加越界值:

#include <stdio.h>

#define BOARD_SZ  10

int sum_neighborhood(int, int, int [][BOARD_SZ], int, int);

int main(void)
{
    int board[BOARD_SZ][BOARD_SZ] = { { 1, 0, 0, 1, 1, 1, 1, 1, 0, 1 },
                                      { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 },
                                      { 0, 1, 0, 1, 0, 1, 0, 0, 0, 0 },
                                      { 0, 0, 0, 1, 0, 1, 0, 1, 1, 1 },
                                      { 1, 0, 1, 1, 1, 0, 0, 0, 0, 1 },
                                      { 0, 1, 1, 1, 1, 1, 0, 1, 1, 0 },
                                      { 1, 1, 1, 1, 1, 1, 0, 0, 1, 1 },
                                      { 0, 1, 0, 0, 1, 0, 1, 0, 1, 0 },
                                      { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1 },
                                      { 1, 1, 0, 1, 1, 0, 1, 0, 0, 0 } };

    printf("Sum at [0][0] is %d\n",
           sum_neighborhood(0, 0, board, BOARD_SZ, BOARD_SZ));
    printf("Sum at [0][1] is %d\n",
           sum_neighborhood(0, 1, board, BOARD_SZ, BOARD_SZ));
    printf("Sum at [5][3] is %d\n",
           sum_neighborhood(5, 3, board, BOARD_SZ, BOARD_SZ));

    return 0;
}

int sum_neighborhood(int row, int col, int arr[][BOARD_SZ], int rows, int cols)
{
    int sum = arr[row][col];

    if (row - 1 >= 0) {
        sum += arr[row-1][col];
    }
    if (row + 1 < rows) {
        sum += arr[row+1][col];
    }
    if (col - 1 >= 0) {
        sum += arr[row][col-1];
    }
    if (col + 1 < cols) {
        sum += arr[row][col+1];
    }

    return sum;
}

程序输出:

Sum at [0][0] is 2
Sum at [0][1] is 2
Sum at [5][3] is 5

关于c - 如何对二维数组中的元素求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43600109/

相关文章:

c - 是什么导致数组中的 float 舍入?

c - 为什么我从以下 C 代码中得到段错误?

javascript - 在升序和降序多维数组之间切换

javascript - 如何选择某种元素?

java - 删除单链表的最后一个元素不起作用

c - 这会导致段错误吗

c - 在 C 语言中使用 getchar

javascript - 绕过多维数组

c++ - RNA 到蛋白质。程序编译但不会停止运行

javascript - Mootools 选项 : how to change/overwrite an options property in an event function?