You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:28:22