我需要认真帮助划分正数和负数。
我要积累负值的总和,并分别累计正值的总和。循环之后,您将显示负值的总和和正值的总和。
数据假设如下:
-2.3 -1.9 -1.5 -1.1 -0.7 -0.3 0.1 0.5 0.9 1.3 1.7 2.1 2.5 2.9
负值之和:-7.8正数之和
值:12
到目前为止,我有这个:
int main () {
int num, num2, num3, num4, num5, sum, count, sum1;
int tempVariable = 0;
int numCount = 100;
int newlineCount = 0, newlineCount1 = 0;
float numCount1 = -2.3;
while (numCount <= 150)
{
cout << numCount << " ";
numCount += 2;
newlineCount ++;
if(newlineCount == 6)
{
cout<< " " << endl;
newlineCount = 0;
}
}
**cout << "" << endl;
while (numCount1 <=2.9 )
{
cout << numCount1 << " ";
numCount1 += 0.4;
newlineCount1 ++;
} while ( newlineCount1 <= 0 && newlineCount >= -2.3 );
cout << "The sum is " << newlineCount1 << endl;**
return 0;
}
答案 0 :(得分:2)
我不知道C / C ++,但这里是循环的一般概念,假设值来自数组。 (因为我不知道他们是如何进入的,即用户输入等)
for
相对的while
循环结构来循环遍历数组的每个元素。positiveSum
和negativeSum
。0
。这就是你可以相应地划分正数和负数的方法。positiveSum
,否则将其添加到negativeSum
的运行总和。positiveSum
和negativeSum
应该有计算的总和。如果这是家庭作业,(我不记得问题之前的家庭作业标签是否存在,或者稍后是否添加)这个伪代码应指向正确的方向而不明确为您完成整个工作。
// as a good convention, I always initialize variables,
// for numbers I always use zero's.
double positiveSum, negativeSum = 0.0;
// assuming array holds the array of values.
for (i=0; i < array.length; i++) {
// if positive, add it to the count
if (array[i] > 0) positiveSum = positiveSum + array[i];
// else negative
else negativeSum = negativeSum + array[i];
}
完成后,positiveSum
和negativeSum
都应保留正确的计算金额。
如果您有任何问题,我可以编辑我的答案,以帮助您获得正确的答案,我希望我可以放弃它,但这就是您的家庭作业的责任。
答案 1 :(得分:0)
我会循环遍历每个数字,我们称之为currentValue
如果数字为负数,则为negativeNumberTotal + = currentValue
否则为正,positiveNumberTotal + = currentValue
您可以通过这种方式获得个人总数。非常简单。
答案 2 :(得分:0)
你有几个魔术数字,其目的我不确定,例如numcount1 = -2.3一般来说你想避免使用魔法数字。
您可能希望为变量提供比num1,num2等更具描述性的名称。
你能更准确地解释一下你的作业参数是什么吗?
编辑:
我注意到你正在使用非常奇怪的条件来控制你的循环。你会继续,直到numcount1 = 2.9,这是一种非常脆弱的设置。我要做的第一件事就是重写你的程序,以便在没有更多数字要添加时循环终止。 (或者,您可以在之后停止,比如12个值。)
再次编辑:
好的,这个怎么样
int sumOfPos = 0,sumOfNeg = 0,currentValue = -2.3,terminationValue = 2.9;
while (currentValue <= terminationValue) {
if ( /* there is a missing condition here */ ) {
// need a statement here to increment your negative counter
} else {
// need a statement here to increment your positive counter
}
}
// put some statements here to do output
答案 3 :(得分:0)
你显然过于复杂化了这个问题。首先,您不需要两个单独的数字循环,因为它们之间存在恒定的0.4差异,即使在-0.3
和0.1
之间也是如此。你只需要检查它是否是否定的,就知道如何总结它们。
如果使用整数作为计数器,则循环更简单。如您所希望的14个数字,您可以简单地从0到13进行计数,从中可以轻松计算出相应的浮点值。
示例C#代码:
double negSum = 0.0, posSum = 0.0;
for (int i = 0; i < 14; i++) {
double number = -2.3 + (double)i * 0.4;
if (number < 0) {
negSum += number;
} else {
posSum += number;
}
}
您当然可以在循环中使用浮点数,但是您需要考虑浮点数的不精确性。你应该确保使用一个结束间隔,它等于你想要的最后一个数字和下一个数字的中间位置。
double negSum = 0.0, posSum = 0.0;
for (double number = -2.3; number < 3.1; number += 0.4) {
if (number < 0) {
negSum += number;
} else {
posSum += number;
}
}
此外,当重复累积浮点数(如反复添加0.4)时,还会累积舍入误差。大多数数字不能完全表示为浮点数,因此您可能实际上添加的内容如0.3999999999999994225而不是每次迭代0.4。在这个小例子中,它不太可能累积到足以出现的东西,但是你应该知道这个效果,这样你就可以在有更多数字的情况下预测它。
答案 4 :(得分:0)
这很容易用纯数学解决:
lowerBound = -2.3
upperBound = 2.9
incAmount = 0.4
signChange = lowerBound % incAmount
numBelowChange = -(lowerBound-signChange)/incAmount
avgNegValue = -(numBelowChange+1)/2.0*incAmount + signChange
sumOfNegative = numBelowChange*avgNegValue
numAboveChange = (upperBound-signChange)/incAmount
avgPosValue = (numAboveChange+1)/2.0*incAmount + signChange
sumOfPositive = numAboveChange*avgPosValue + signChange
它比循环和添加更准确,更有效。
使用您提供的常量
signChange = 0.1
numBelowChange = 6.0
avgNegValue = -1.3
sumOfNegative = -7.8
numAboveChange = 7.0
avgPosValue = 1.7
sumOfPositive = 12.0
如果您不熟悉%
运算符,x%y
表示“将x除以y并返回余数”。所以5%2=1
答案 5 :(得分:0)
我不是程序员,但我认为最好保持循环内部尽可能精益。这个版本在循环中没有任何if语句,只是简单的添加。这是深夜,我有几个威士忌,但我认为这个算法可以工作(当我尝试在python中实现它时它工作)。它是伪代码,所以你必须用你选择的语言写出来:
neg_total =0
abs_total=0
loop with i in all_your_numbers
total += i
abs_total += abs(i)
end
neg_total=(total-abs_total)/2
pos_total=abs_Total+neg_Total
print "sum of negative values =", neg_total
print "sum of positive values =", pos_total
我不确定这是不是很好的编程习惯,我只是觉得它很有效。如果你可以解释如何分数。