C语言入门for循环问题排查:累加数组输出与原输入数组结果一致
问题根因
你的代码错误出在累加数组b的计算逻辑上:
- 声明的
b数组是局部变量,未初始化的情况下内部存储的是随机垃圾值 - 你写的
b[i] = b[i] + a[i]完全没有用到前序位置的累加结果,刚好你的运行环境里初始垃圾值为0,所以最终输出就和输入数组a完全一致
实现逻辑说明
前缀累加数组的核心规则是:第二个数组的第i个单元值,等于前i+1个输入值的总和,对应两种实现方式:
- 利用前一位累加结果计算:
b[i] = b[i-1] + a[i](i≥1,b[0] = a[0]) - 借助临时累加变量计算:每次把累加后的结果赋值给
b[i],是你已知写法的变形,也满足作业需要把结果存入第二个数组的要求
修正后的完整代码
#include <stdio.h> #include <stdlib.h> int main(void) { int n; // 数组元素个数 int i; // 循环遍历变量 printf("你想要创建的数组包含多少个元素?\n"); scanf("%d", &n); double a[n]; // 存储用户输入的数组 double b[n]; // 存储前缀累加结果的数组 printf("请输入对应数量的数值:\n"); for (i = 0; i < n; i++) { scanf("%lf", &a[i]); } printf("计算结果如下:\n"); // 输出第一个输入数组 for (i = 0; i < n; i++) { printf("%lf ", a[i]); } printf("\n"); // 计算并输出第二个累加数组 double sum = 0; for (i = 0; i < n; i++) { sum += a[i]; b[i] = sum; printf("%lf ", b[i]); } return 0; }
内容的提问来源于stack exchange,提问作者BlueSky
相关产品推荐
相关产品推荐

