我正在尝试对 C 中 10 x 10 二维数组内的值求和。例如,在index[0][0] 中,我的值为1。我想对该元素及其紧邻的右侧、左侧、顶部和下方的元素求和。所以 (1 + 0 + 1 ) = 3。
当我移动到索引[0][1]时,我现在将添加 4 个值,因为我知道不再受到角落的限制。例如 (0 + 1 + 0++ 1) = 2 。这是索引 [0][1] 处的 0 值以及紧邻其右侧、左侧和底部的索引中的值,因为顶部超出了其范围。我提供了一个图像来帮助说明我正在处理的内容。我尝试了很多东西,但我不确定如何用 C 语言 进行数学计算
最佳答案
这可以通过使用四个 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/