我正在尝试计算p1=(1/1)*(1/2)*...*(1/n)
,但有些错误,printf
给了我0.000...0
#include <stdio.h>
int main(void) {
int i,num;
float p3;
do {
printf ("give number N>3 : \n" );
scanf( "%d", &num );
} while( num <= 3 );
i = 1;
p3 = 1;
do {
p3=p3*(1/i);
printf( "%f\n",p3 );
} while ( i <= num );
printf("\nP3=%f",p3);
return 0;
}
答案 0 :(得分:13)
(1/i)
i
是int
,因此是整数除法,如果i > 1
则为0。使用1.0/i
进行浮点除法。
答案 1 :(得分:6)
1
是一个整数,i
是一个整数。所以1/i
将是一个整数,即结果将被截断。要执行浮点除法,其中一个操作数应为float
类型(或更好,类型为double
):
p3 *= 1. / i;
答案 2 :(得分:2)
我有同样的问题。基本情况:
当你想从两个整数获得浮点输出时,你需要将一个转换成浮点数
int c = 15;
int b = 8;
printf("result is float %f\n", c / (float) b); // result is float 1.875000
printf("result is float %f\n", (float) c / b); // result is float 1.875000