除1或n总是返回0.0

use*_*300 4 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;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*her 14

(1/i)
Run Code Online (Sandbox Code Playgroud)

i是一个int,所以是整数除法,结果是0 i > 1.使用1.0/i得到浮点除法.


md5*_*md5 6

1是一个整数,i是一个整数.所以1/i将是一个整数,结果将被截断.要执行浮点除法,其中一个操作数应为类型float(或更好的类型double):

p3 *= 1. / i;
Run Code Online (Sandbox Code Playgroud)