Деление 1/n всегда возвращает 0.0

Я пытаюсь посчитать 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 ответа

Решение
(1/i)

i является int, так что это целочисленное деление, в результате 0, если i > 1, использование 1.0/i чтобы получить деление с плавающей запятой.

1 является целым числом, i является целым числом Так 1/i будет целым числом, т.е. результат будет усечен. Для выполнения деления с плавающей запятой один из операндов должен быть типа float (или лучше типа double):

p3 *= 1. / i;

Я была такая же проблема. Основной случай:

  • если вы хотите получить результат с плавающей запятой из двух целых чисел, вам нужно преобразовать одно в число с плавающей запятой

    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

Другие вопросы по тегам