Dividir 1 / n siempre devuelve 0.0

Estoy tratando de calcular p1=(1/1)*(1/2)*...*(1/n) pero algo está mal y el printf me da 0.000...0

 #include  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; } 

     (1/i) 

    i es un int , entonces esa es una división entera, resultando en 0 si i > 1 . Usa 1.0/i para obtener la división de punto flotante.

    1 es un número entero, i es un número entero. Entonces 1/i seré un número entero, es decir , el resultado será truncado. Para realizar la división de punto flotante, uno de los operandos debe ser de tipo float (o, mejor, de tipo double ):

     p3 *= 1. / i; 

    Tuve el mismo problema. El caso básico:

    • Cuando desee obtener una salida flotante de dos enteros, debe convertir uno en flotación

      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