在C语言里,数组求和一般指把一个连续存储的一维或多维数组中的所有元素值相加,得到一个总和。这类操作在数据统计、成绩计算以及信号处理中非常普遍。实现的核心思路是访问数组的每个元素并累加,区别在于用循环、指针还是递归来完成访问。

一、使用for循环遍历求和
这是最直观也是最常用的写法。我们先定义一个数组,再用for循环从下标0走到长度减一,把每个元素加到一个sum变量中。
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int len = sizeof(arr) / sizeof(arr[0]);
int sum = 0;
// 使用for循环遍历数组并累加
for (int i = 0; i < len; i++) {
sum += arr[i];
}
printf("数组总和为: %dn", sum);
return 0;
}
二、使用while循环求和
while循环和for循环本质相同,只是把初始化、判断和自增分散书写,适合在循环条件较复杂时使用。
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30};
int len = sizeof(arr) / sizeof(arr[0]);
int sum = 0;
int i = 0;
// 使用while循环完成遍历
while (i < len) {
sum += arr[i];
i++;
}
printf("sum = %dn", sum);
return 0;
}
三、利用指针遍历数组
在C语言中,数组名本身代表首元素地址。我们可以用指针偏移来访问元素,这样写更接近底层,也方便理解数组与指针的关系。
#include <stdio.h>
int main() {
int arr[] = {2, 4, 6, 8};
int len = sizeof(arr) / sizeof(arr[0]);
int sum = 0;
int *p = arr;
// 通过指针移动求和
for (int i = 0; i < len; i++) {
sum += *(p + i);
}
printf("总和是: %dn", sum);
return 0;
}
四、使用递归方式求和
递归适合用来理解函数调用过程。我们每次取当前元素,再加上剩余部分数组的递归结果,直到数组长度为0时返回0。
#include <stdio.h>
// 递归求数组前n个元素的和
int rec_sum(int arr[], int n) {
if (n == 0) return 0;
return arr[n - 1] + rec_sum(arr, n - 1);
}
int main() {
int arr[] = {1, 3, 5, 7};
int len = sizeof(arr) / sizeof(arr[0]);
printf("递归求和结果: %dn", rec_sum(arr, len));
return 0;
}
五、多维数组求和
如果是二维数组,通常使用两层循环分别遍历行和列,将所有元素累加即可。
#include <stdio.h>
int main() {
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
int sum = 0;
// 嵌套循环遍历二维数组
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
sum += matrix[i][j];
}
}
printf("二维数组总和: %dn", sum);
return 0;
}
六、方法对比与选择
不同求和方式在可读性和适用场景上有所区别:
| 方法 | 特点 | 适用情况 |
|---|---|---|
| for循环 | 结构清晰,易于理解 | 绝大多数普通数组统计 |
| while循环 | 条件控制灵活 | 循环结束条件较复杂时 |
| 指针遍历 | 贴近底层,效率高 | 需要指针操作或性能敏感代码 |
| 递归 | 代码简洁但耗栈 | 教学演示或小规模数据 |
在实际项目中,推荐优先使用for循环配合数组长度计算来完成数组求和,这样代码更易维护。如果对性能有极致要求且数组很大,可以考虑指针写法,但要小心越界问题。