Kezdőoldal » Számítástechnika » Programozás » C-s feladat ereménye h jott ki?

C-s feladat ereménye h jott ki?

Figyelt kérdés

Adott egy feladat,ird ki a végeredményt:


#include <stdio.h>

#include <conio.h>

#include <string.h>



int main(void)

{

int a= ?, b = ?;


if (a == b || ++a == 2)

printf("T: a=%i, b=%i", a, b);

else

printf("F: a=%i, b=%i", a, b);


}



a köv adatokkal:


a=0, b=0:________________T a.0 b.0

a=0, b=1:________________F a.1 b.1

a=1, b=0:________________T a.2 b.0

a=1, b=1:________________T a.1 b.1



szóval a kérdésem,úgy folyik le a ciklus,

ha A egyenlo B vel akkor igaz /T ág meg végbe/ és a másik fele a feltetelnek ++a==2 nem folyik le. ?!?


ha A es B nem egyenlo akkor megnoveli az A egyel ha egyenlo 2 vel T ag folyik le ha nem akkor viszont az F ??


2012. jan. 8. 18:17
 1/8 _Jessy_ ***** válasza:
Így történik, de nem lefolyik, hanem végrehajtódnak az utasítások, ami viszont fontosabb, hogy nem ciklus, hanem program. Ezt a kettőt ne keverd, merd nagyon kivágnak miatta.
2012. jan. 8. 18:22
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

Annyi ha lényeg, hogy C-ben rövidzárasak az operátorok.


A vagynak van két operandusa, vagy hívjuk bal és jobb oldalnak. Ha az elsőből már egyértelműen kiderül a kifejezés értéke, azaz igaz lesz, akkor a vagy másik oldalát nem fogja kiértékelni. Ha viszont az első operandus hamis, akkor kiértékeli a másikat is.

2012. jan. 8. 18:23
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:
&& ésnél végrehajtódna mind2 // while(a && b) az a es b is ?
2012. jan. 8. 18:30
 4/8 anonim ***** válasza:
Az és hasonlóan rövidre zár, mint a vagy. Ha az első feltétel hamis, már meg sem nézi a másodikat.
2012. jan. 8. 19:33
Hasznos számodra ez a válasz?
 5/8 _Jessy_ ***** válasza:

Ezt pedig értékvizsgálatnak hívják :) Kicsit nézz utána, mi a program, ciklus, utasítás, értékvizsgálat, kiértékelés.

&& logikai operátornál sem feltétlenül végzi el mindkét vizsgálatot, csak ha szükséges, tehát:

if(a && b)... esetén ha 'a' hamis, akkor a b értékét nem vizsgálja, ha pedig 'a' igaz, akkor a 'b'-t is vizsgálja.

2012. jan. 8. 19:34
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

#include <stdio.h>

#include <string.h>


int f(int n);


main(){

int a = 3;

printf("%d \n",f(a));

}


int f(int n){

if(n==0)

return 0;

else

return (2 + 3 * f(n-1));

}



az eredmény 26



::::::::::::::::::::::::::::::::::


2 + 3*(2) = 8

2 + 3*(1) = 5

de ez igy nem jo :|

2012. jan. 8. 20:28
 7/8 _Jessy_ ***** válasza:

3-ra hívod meg:

1. 2 + 3 * f(3-1) -- (2 + 3 * 8) == 26

2. 2 + 3 * f(3-2) --> (2 + 3 * 2) == 8

3. 2 + 3 * f(3-3) --> (2 + 3 * 0) == 2

4. return 0


A fv. jól működik, csak éppen nem faktoriálist számol, ha ez a célod. Ha nem kitétel a feladatban, hogy rekurziót használj, akkor oldd meg ciklussal.

2012. jan. 8. 21:02
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Köszi szépen (Y)
2012. jan. 8. 22:18

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!