Dlaczego jako wynik wyświetla liczbę 0?

0
#include <stdio.h>

int main()
{
    int n = 5, p = 9;

    int q;
    float x;

    x = (p/n);
    printf("x = %d\n",x);

return 0;
}

Dlaczego wyświetla, że x = 0 a nie x = 1.8 ?

4
 
    x = (p/(float)n);
    printf("x = %f\n",x);
3

ponieważ dzielenie wykonuje się na intach, daje wynik 0, a dopiero potem wykonywane jest rzutowanie na float. Jeśli chcesz,  żeby dzielenie było zminnoprzecinkowe przynajmniej jeden z operandów musi być zmiennoprzecinkowy. Dlatego musisz zrzutować p lub n na floata. Uprzedzając dalsze problemy, w printfie musisz dać %f zamiast %d, bo wypisujesz floata (dla double: %lf). I jeszcze masz nieużywaną zmienną.

0

aha dzięki.

2

Poszerzając wypowiedź kolegi powyżej: dzielenie (i inne działania arytmetyczne) dwóch zmiennych całkowitych zawsze będzie miało całkowity wynik. Natomiast gdy jedna z nich jest rzeczywista to obie są promowane do tego typu i na tym nowym typie są wykonywane działania.

1
#include <stdio.h>
 
int main()
{
    int n = 5, p = 9;
    int q;
    float x;
 
    x = p/(float)n; // tu był błąd (dzielenie int'ów)
    printf("x = %f\n",x); // i tu był błąd - zły format string
 
    return 0;
}

Wszystko widać w postach i komentarzach wyżej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1