C++编程求助:计算double数组首个零元素前的元素和(附错误代码)
代码问题分析与修正
原代码存在的核心问题:
数组与输入逻辑错误:
任务明确数组是0到7共8个元素,无需让用户输入数组长度j。而且C++标准不支持double S[j]这种变长数组写法,应使用固定大小数组double S[8]。
第一个循环的条件i >= j-1完全写反,导致循环一次都不执行,数组元素始终是默认的0值,这也是你得到结果0的主要原因之一。求和变量问题:
变量P未初始化,直接执行P += S[i]会触发未定义行为;另外数组是double类型,求和结果也应该用double类型存储,避免精度丢失,所以必须初始化double P = 0.0;。求和循环条件错误:
第二个循环的条件i >= j同样写反,循环根本不会执行,自然无法完成求和计算。
修正后的代码(直接使用题目给定的初始数据):
#include <iostream> using namespace std; int main() { // 用题目提供的初始数据初始化数组 double S[8] = {1, 17, 2, 4, -5, 0, 7, 8}; double P = 0.0; // 初始化求和变量,类型匹配数组元素 for (int i = 0; i < 8; i++) { if (S[i] == 0) break; // 遇到第一个0立即终止循环 P += S[i]; } cout << "首个零元素之前的元素和:" << P << endl; return 0; }
支持用户输入的版本:
如果你需要手动输入数组元素,可以用这个版本:
#include <iostream> using namespace std; int main() { const int ARRAY_LEN = 8; double S[ARRAY_LEN]; double P = 0.0; // 输入8个元素 for (int i = 0; i < ARRAY_LEN; i++) { cout << "输入S[" << i << "]的值:"; cin >> S[i]; } // 计算求和 for (int i = 0; i < ARRAY_LEN; i++) { if (S[i] == 0) break; P += S[i]; } cout << "首个零元素之前的元素和:" << P << endl; return 0; }
内容的提问来源于stack exchange,提问作者tukhsanov
相关产品推荐
相关产品推荐

