La division 1 / n renvoie toujours 0.0

J’essaie de calculer p1=(1/1)*(1/2)*...*(1/n) mais quelque chose ne va pas et le printf me donne 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 est un int , donc c’est la division entière, résultant en 0 si i > 1 . Utilisez 1.0/i pour obtenir la division en virgule flottante.

1 est un entier, i est un entier. Donc, 1/i sera un entier, c’est -à- dire que le résultat sera tronqué. Pour effectuer la division en virgule flottante, l’un des opérandes doit être de type float (ou, mieux, de type double ):

 p3 *= 1. / i; 

J’ai eu le même problème. Le cas de base:

  • lorsque vous souhaitez obtenir une sortie float à partir de deux entiers, vous devez en convertir un en 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