我必须编写一个程序来计算并显示以下表达式:
P=(1/2-3/4)*(5/6-7/8)*...*[n/(n-1) - (n+2)/(n+3)]我这样做了,我运行它,它没有显示任何错误。当我运行它时,对于我输入的每个值,它都会显示P=0。怎么啦?
#include <stdio.h>
int main (void)
{
float s, p=1.0;
int i, n;
printf("Enter a number:");
scanf("%d", &n);
for (i=1;i<=n;++i) {
p*=((i)/(i+1)-(i+2)/(i+3));
}
printf("p=%f\n", p);
}发布于 2013-04-26 23:12:45
您使用的是整数运算,而不是浮点运算,因此除法运算将被截断。
更改:
p*=((i)/(i+1)-(i+2)/(i+3));至:
p*=((float)(i)/(i+1)-(float)(i+2)/(i+3));发布于 2013-04-26 23:12:54
它不起作用是因为i是整数:当你将(i)/(i+1)或(i+2)/(i+3)相除时,两种情况都会得到零,因为当i为正数时,分母大于分子。零减零等于零,p乘以零等于零,这就是你得到的结果。
要解决此问题,请将i声明为float
#include <stdio.h>
int main ()
{
float s,p=1.0, i;
int n;
printf("Put a number:");
scanf("%d",&n);
for (i=1;i<=n;++i) {
p*=((i)/(i+1)-(i+2)/(i+3));
}
printf("\n p=%f",p);
return 0;
}发布于 2013-04-26 23:12:59
您使用的是int变量,而不是float变量,因此i/(i+1)和(i+2)/(i+3)将始终计算为0,因为它是整数除法。
只需使用一些强制转换来强制使用浮点算法进行计算:
((float)i)/(i+1)-((float)i+2)/(i+3)https://stackoverflow.com/questions/16239727
复制相似问题