Kezdőoldal » Számítástechnika » Programozás » C nyelvben két egész típusú...

C nyelvben két egész típusú változó hányadosának kiíratása?

Figyelt kérdés

int a = 2;

int b = 3;

float c = a/b;


printf("%f", c);


Ez így 0át ad ki eredménynek, nyilván úgy működne ha valamelyik szám változóját float-al adtam volna meg, de a feladat kifejezetten egész típusú változót kér az a-bre, ilyenkor hogy tudom megcsináli?


2013. okt. 16. 16:26
1 2
 1/11 anonim ***** válasza:

Típus konverzió.


float c = (float)a/b;

2013. okt. 16. 16:31
Hasznos számodra ez a válasz?
 2/11 A kérdező kommentje:
Köszi!
2013. okt. 16. 16:39
 3/11 anonim ***** válasza:

Első voltam. Kicsit kifejtem bővebben. :)

Szóval amikor a harmadik sorhoz ér a végrehajtás, akkor először veszi az értékadás jobb oldalát. Ott van két int, amiket ha eloszt, akkor ugyancsak int eredményt ad. Márpedig az nulla lesz. (2-ben a 3 nullaszor van meg. Van persze maradék, de az más történet.)

Szóval az int eredményt kell belepaszíroznia a float változóba, és ekkor fogja csak átkonvertálni lebegőpontos értékké. Viszont a nulla az floatként is nulla, szóval ez fog a c-be kerülni.


Ha az a-t floattá konvertálod explicit módon (tehát te írod oda, nem bízod a fordítóra), akkor egy float értéket fog int-tel osztani. Ehhez már a b értékét is floattá fogja konvertálni, mert erre kötelezi a C szabvány. Tehát a b már "magától" konvertálódik, aminek az eredménye is float lesz az értékadáskor.


Hamegtalálom a konvertálási szabályokat, linkelem. :)

2013. okt. 16. 16:41
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:

Hirtelen csak ezt találtam.

[link]

Ha két típussal műveletet végzel ezek közül, akkor előtte a magasabban lévőre konvertálódik az alacsonyabban lévő operandus is.

Tehát float/int esetén először az int is floattá "alakul", és utána hajtódik végre a művelet. Az eredmény a magasabban lévő típusú lesz, vagyis float.

2013. okt. 16. 16:50
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:
Köszönöm, nagyon jól elmagyaráztad! :D
2013. okt. 16. 16:51
 6/11 iostream ***** válasza:

Semmi lényeges, csak a fogalmazás nem teljesen pontos.


"Szóval amikor a harmadik sorhoz ér a végrehajtás, akkor először veszi az értékadás jobb oldalát."


Nem tudjuk, hogy mit vesz először. A kiértékelési sorrend nem kötött ennyire a C/C++ nyelvekben.

2013. okt. 16. 17:45
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:

ha parasztok akarunk lenni így is lehetne akár

printf("%d/%d",a ,b);

mert végülis ez is a hányadosa :D

2013. okt. 16. 21:14
Hasznos számodra ez a válasz?
 8/11 anonim ***** válasza:

"Nem tudjuk, hogy mit vesz először. A kiértékelési sorrend nem kötött ennyire a C/C++ nyelvekben."


Csak arra akartam utalni, hogy a fordító nem fogja csak azért átkonvertálni a jobboldali változókat, mert a baloldal típusa más. A jobboldaltól függetlenül az "int/int" mindig int/int-ként értékelődik ki, és az eredménye is int típusú lesz. A további konvertálás akkor kezdődik (ha a baloldal típusa miatt szükséges), mikor a jobboldal már kiértékelődött.


:)

2013. okt. 16. 21:33
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:

A jobboldaltól függetlenül.. ==> A BALoldaltól függetlenül..


Már keverem én is szezont a fazonnal. :DD

2013. okt. 16. 21:36
Hasznos számodra ez a válasz?
 10/11 anonim ***** válasza:

"Típus konverzió."

Típuskényszerítésnek is hívják. (Typecasting.)

2013. okt. 17. 12:08
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!