在Stack overflow上看到這樣一個問題。
計算如下表達式的值:
P=(1/2-3/4)*(5/6-7/8)*...*[n/(n-1) - (n+2)/(n+3)]。
程序如下:
#include<stdio.h>int main (){float s, p = 1.0;int i, 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);}
運行之後不管n為何值,p的值都輸出為0,為什麼?
初看好像程序沒什麼問題,但仔細想一下發現計算p的表達式p *= ((i)/(i+1)-(i+2)/(i+3))中的i是int型變量,對於i>=1,(i)/(i+1)永遠都為0。
所以表達式應該修改為:p *= ((float)(i)/(i+1)-(float)(i+2)/(i+3));
或者 p *= ((i)/(i+1.0)-(i+2.0)/(i+3.0).