Dividindo 1 / n sempre retorna 0.0

Eu estou tentando calcular p1=(1/1)*(1/2)*...*(1/n) mas algo está errado e o printf me dá 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 sou um int , então isso é divisão inteira, resultando em 0 se i > 1 for i > 1 . Use 1.0/i para obter divisão de ponto flutuante.

1 é um inteiro, i é um inteiro. Então 1/i será um inteiro, isto é , o resultado será truncado. Para realizar a divisão de ponto flutuante, um dos operandos deve ser do tipo float (ou, melhor, do tipo double ):

 p3 *= 1. / i; 

Eu tive o mesmo problema. O caso básico:

  • quando você deseja obter a saída flutuante de dois inteiros, você precisa converter um em float

    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