基于《C Primer Plus(第6版)》学习C语言:双精度数组累计求和功能实现入门求助
解决C语言数组累计求和问题的思路与代码实现
Hey there! Let's work through this problem together—since you're just starting out with C, it's totally normal to hit a few bumps. Let's first look at what's missing in your current code, then break down the step-by-step solution.
你的初始代码存在的几个问题
- 没有定义用来存储多个输入值的数组:你现在只用了单个变量
usernumbers,没法保存10个输入值,自然没法计算累计和 - 变量名不一致:你声明了
usernumbers,但scanf里用的是usernumber(少了个s),这会导致编译错误 - 循环逻辑不对:你的
while循环会一直读取输入直到遇到非数字,但题目要求固定输入10个值,用for循环会更直观 doublearrays函数只有声明没有实现,而且它的设计没法处理数组操作,暂时不需要单独写这个函数,直接在main里处理更简单
核心实现思路
要完成这个项目,我们需要做这几件事:
- 定义两个大小为10的双精度数组:一个存输入的数值,另一个存累计求和结果
- 用循环读取10个输入值,逐个存入第一个数组
- 遍历数组计算累计和:第一个元素的和就是它本身,后面每个元素等于前一个累计和加上当前输入值
- 最后可以打印两个数组,验证结果是否正确
完整的修正代码
#include <stdio.h> #define SIZE 10 int main(void) { // 定义两个数组:input_arr存输入的数值,sum_arr存累计和 double input_arr[SIZE]; double sum_arr[SIZE]; int i; // 循环读取10个双精度数值 printf("请输入10个双精度数值:\n"); for (i = 0; i < SIZE; i++) { printf("第%d个值:", i + 1); // 检查输入是否有效,如果输入非数字,提示并退出 if (scanf("%lf", &input_arr[i]) != 1) { printf("输入错误,请输入有效的数字!\n"); return 1; } } // 计算累计和数组 sum_arr[0] = input_arr[0]; // 第一个元素的累计和就是它自己 for (i = 1; i < SIZE; i++) { // 当前累计和 = 前一个累计和 + 当前输入的数值 sum_arr[i] = sum_arr[i - 1] + input_arr[i]; } // 打印结果,方便验证 printf("\n你输入的数值数组:\n"); for (i = 0; i < SIZE; i++) { printf("%.2lf ", input_arr[i]); } printf("\n\n累计求和数组:\n"); for (i = 0; i < SIZE; i++) { printf("%.2lf ", sum_arr[i]); } printf("\n"); return 0; }
代码解释
- 数组定义:
input_arr[SIZE]用来存储每一个输入的双精度数,sum_arr[SIZE]用来存储对应位置的累计和,SIZE被定义为10,符合题目要求 - 输入循环:用
for循环从0到9(共10次),每次读取一个值存入input_arr[i],同时检查scanf的返回值(如果返回1说明输入有效,否则提示错误并退出) - 累计和计算:第一个元素的累计和就是输入的第一个值,从第二个元素开始,每个元素都是前一个累计和加上当前输入的数值,这样
sum_arr[i]就代表前i+1个输入值的总和(比如sum_arr[2]是前3个值的和,和你举的例子一致) - 结果打印:用循环把两个数组的内容打印出来,
%.2lf是为了让输出格式更整齐,保留两位小数
如果你运行这段代码,输入1、5、3...(总共10个值),就能看到累计和数组的第3个元素是9,完全符合题目要求。
内容的提问来源于stack exchange,提问作者BazookaBan




