如何计算数组中第一个负数之后所有元素的和,附C++代码问题求助
问题分析
你现有代码存在以下核心问题:
- 未声明
sum变量,无法通过编译 - 嵌套的内层for循环逻辑完全无效,j从-1开始的遍历没有实际意义
- 没有标记「第一个负数是否已经出现」的状态位,导致只要碰到负数就会触发累加逻辑,和需求不符
- 累加时调用了
fabs()取绝对值,不符合「原数值求和」的要求,且额外引入了需要包含<cmath>头文件的问题 - 没有包含必须的头文件
<iostream>、<cstdlib>、<ctime>,无法正常编译
修正后代码
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { const int SIZE = 10; int arr[SIZE]{}; int sum = 0; // 标记是否已经找到第一个负数 bool found_first_neg = false; srand(time(NULL)); cout << "Your array is: " << endl; for (int i=0; i<SIZE; i++) { int newValue = rand()%20-10; arr[i] = newValue; cout << arr[i] << " "; // 已经找到第一个负数,直接累加当前值 if (found_first_neg) { sum += arr[i]; } // 第一次碰到负数,修改状态位,当前负数本身不累加 else if (arr[i] < 0) { found_first_neg = true; } } cout << endl; cout << "Sum of elements after first element < 0 is: " << sum; cout << endl; return 0; }
逻辑说明
- 新增
found_first_neg布尔变量作为状态标记,初始值为false表示还没找到第一个负数 - 遍历数组时,先判断状态标记:如果已经找到第一个负数,直接累加当前元素值
- 如果还没找到,判断当前元素是不是负数,是的话修改状态标记即可,当前负数本身不计入总和
- 如果整个数组都没有负数,最终总和为0
内容的提问来源于stack exchange,提问作者wupiupi
相关产品推荐
相关产品推荐

