6

私は計算しようとしています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;
}
4

3 に答える 3

15
(1/i)

iはであるintため、これは整数除算であり、。の場合は0になりi > 1ます。1.0/i浮動小数点除算を取得するために使用します。

于 2012-11-11T12:21:05.960 に答える
6

1は整数、iは整数です。したがって1/i、整数になります。つまり、結果は切り捨てられます。浮動小数点除算を実行するには、オペランドの1つがタイプfloat(または、より適切にはタ​​イプdouble)である必要があります。

p3 *= 1. / i;
于 2012-11-11T12:21:14.957 に答える
2

私も同じ問題を抱えていました。基本的なケース:

  • 2つの整数からfloat出力を取得する場合は、1つを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

于 2017-05-22T14:22:35.250 に答える