您在每个循环迭代中重新声明和初始化 p
,导致前一个值丢失。
您在每个迭代中将p
设置为x/n+z
,导致前一个值丢失。
您的x/n+z
在执行加法之前执行除法。
在此处您不断“重置”p
的值:
while(i <= n)
{
// ...
// `p` is getting re-initialized to 1 here:
// (losing the previous value)
double r=1, p=1;
// `p` is being set to `x/n+z` here:
// (losing the previous value)
p = x/n+z;
p = p*p;
// ...
}
可以使用临时变量来替代,然后将 p
的声明移到循环外部:
double p = 1;
while(i <= n)
{
// ...
double temp = x/n+z;
p = p * temp;
// ...
}
n+z
周围加上括号:double temp0 = x/n+z;
// Evaluates to (x/n)+z.
double temp1 = x/(n+z);
// Evaluates to x/(n+z). (Which is what you want.)
/
的优先级高于加法运算符 +
。可以在此处了解运算符优先级。x
、n
和z
都是int
类型,因此除法无法正常工作 - 将x
转换为double
类型。i
?否则你只是计算x / (n + z)
的i
次方。我建议使用p *= (double)x / (i + z)
。int i=1; // don't forget the initialization of i
double p = 1/2; // p will be your result, stored outside of the while so we keep memory
while(i<=n) // you want to loop from 1 to n included
{
// we don't need r
p = p * x / (n + z); // you forgot the parenthesis here, without them you are doing (x / n) + z;
}
double s;
double p = 1;
int n, x, z;
int i = 1;
while (i <= n)
{
p = p*(x / (n + z));
i++;
}
s = 1 / 2 * p;
r
的目的是什么? - Cornstalks