C programozás kezdőknek - 8. fejezet

Valós változók

A valós számok eltárolása

Az előző fejezet végén látott program egyelőre hibás kimenetet ad az osztás esetén:

#include<stdio.h>

int main()
{

    int a = 5,   b = 3,   e;

    e = a + b;   printf("osszeadas %d \n", e);
    e = a - b;   printf("kivonas %d \n", e);
    e = a * b;   printf("szorzas %d \n", e);
    e = a % b;   printf("maradekos osztas %d \n", e);
    e = a / b;   printf("osztas %d \n", e);

return 0;
}

muveletek.c c osszeadas 8 kivonas 2 szorzas 15 maradekos osztas 2 osztas 1

Az utolsó művelet azért jelent meg a konzolablakon rosszul, mert az osztás eredménye valós szám, pontosan 5/3 = 1.66666... és ezt szerettük volna beletuszkolni egy egész szám változóba (int). Természetesen nem fér bele - csak úgy, ha lenyessük a kilógó részeket, a törtrészt, és csak az egészrészt mentjük el. A C az eredmény egész részét veszi egy valós számnak, ha azt egy egész szám változóba akarjuk menteni.

A most említett probléma megoldása az, hogy ha nem egész szám (int) változókat használunk, hanem valós változókat, amiben egy valós számot lehet eltárolni. Valós változót a double kulcsszóval lehet létrehozni. Hozzunk létre valós ”a”, ”b” és ”e” változókat és végezzük el a problémás osztást. Az eredményt írjuk a konzolablakra. A valós változó hely-jelölője a %lf

#include<stdio.h>

int main()
{

    double a = 5,   b = 3,   e;

    e = a / b;

    printf("osztas %lf \n", e);

return 0;
}

osztas-ok.c c osztas 1.666666

Azt gondolná az ember, hogy az ”a” és ”b” változók maradhatnak egész szám (int) típusúak, és csak az eredmény változót kell valós számként (double) létrehozni, mert csak az lesz valós szám. Sajnos a C a részeredményeket olyan típusúvá konvertálja amilyen típusokkal végeztük a műveletet, azaz ha az ”a” és ”b” változókat int-ként hozzuk létre, akkor mielőtt az osztás eredménye, az 1.666 bekerülne az e változóba előbb átkonvertálódik int-té, így az eredmény hibásan 1 lesz. Szóval ez nem jó eredményt ad:

#include<stdio.h>

int main()
{

    int a = 5,   b = 3;
    double e;

    e = a / b;   

    printf("osztas %lf \n", e);

return 0;
}

osztas-nemok.c c osztas 1

Minden változót double-ként kell tárolni, ha pontos eredményt szeretnénk kapni az osztás során.

Kvízkérdések betöltése...

A hozzászóláshoz jelentkezz be

Hozzászólások beltöltése...

Közösség

Bankkártyás fizetés: OTP Simple Pay Bankkártyás fizetési szolgáltató

Díjak

AZ ÉV HONLAPJAMINŐSÉGIDÍJ

Az oldalon közölt anyagok szerzői jogvédelem alatt állnak. Copyright © 1991-2024 Horváth Loránd, MegaByte.hu