除1或n总是返回0.0

时间:2012-11-11 12:19:30

标签: c floating-point integer floating-point-conversion

我正在尝试计算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;
}

3 个答案:

答案 0 :(得分:13)

(1/i)

iint,因此是整数除法,如果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