C++ programok kimenete | 22. készlet

Jósoljuk meg a következő C++ programok kimenetét! 1. kérdés CPP
   #include          using     namespace     std  ;   int     main  ()   {      int     a     =     b     =     c     =     0  ;      cout      < <     a      < <     '*'      < <     b      < <     '*'      < <     c  ;      return     0  ;   }   
Output:
Compile time error!  
Magyarázat: A chained statement cannot be used to initialize variables at the time of declaration. Hence the statement a = b = c = 0; is an illegal statement. However following way a legal syntax and can be used in C++ or C.
int abc; a = b = c = 0;  

2. kérdés CPP
   #include          using     namespace     std  ;   int     main  ()   {      for     (     ;     ;     )     cout      < <     'blank'  ;      return     0  ;   }   
Output:
Infinite Loop!  
Magyarázat: Mivel az inicializálási teszt feltétele és a növelési/csökkentési feltétel hiányzik a cikluson belül, a végrehajtás végtelen hurokba kerül.
3. kérdés CPP
   #include          using     namespace     std  ;   int     main  ()   {         int     i  ;      for     (  i  =  0  ;     i   <  3  ;     i  ++  );          cout      < <     'hello!'      < <  i  ;      return     0  ;   }   
Output:
hello!3  
Magyarázat: A Hello!3 az eredmény, mert amikor a for ciklus végrehajtódik, nincs semmilyen feladata a pontosvessző(;) miatt abban a sorban, ahol a for ciklust meghatározták. A ciklus háromszor hajtódik végre, és az i értéke 3 lesz, majd a többi utasítás(ok) végrehajtásra kerülnek.
4. kérdés CPP
   #include          using     namespace     std  ;   int     main  ()   {      int     i  ;      i     =     1     +     (  1    4    5    6    3  );      cout      < <     i  ;      return     0  ;   }   
Output:
4  
Magyarázat: A vessző () operátor egy bináris operátor, amely kiértékeli az első operandust és elveti az eredményt, majd kiértékeli a másodikat, majd visszaadja a második értékét. Itt a vessző () operátor asszociativitása balról jobbra halad, és könnyen érthető, hogy az (14563) kifejezés 3-ra értékeli, majd az 1 + 3 eredményt az i-hez rendeli.
5. kérdés CPP
   #include          using     namespace     std  ;   int     main  ()   {      int     a     =     0       b  ;      b     =     (  a     =     50  )     +     10  ;      cout      < <     a      < <     '$'      < <     b  ;      return     0  ;   }   
Output:
50  
Magyarázat: A b = (a = 50) + 10 állítás; a beágyazott hozzárendelés fogalmát használja. Itt az a változóhoz az 50-es, a b-hez pedig az 50+10-es eredményt rendeljük. 6. kérdés CPP
   #include       using     namespace     std  ;   int     main  ()   {      char     a     =     30       b     =     40       c     =     10  ;      char     d     =     (  a  *  b  )  /  c  ;      cout      < <     int  (  d  );      return     0  ;   }   
Output:
120  
Magyarázat: A C++ a karakterek ASCII értékeinek figyelembevételével is tud aritmetikai számításokat végezni, ha az aritmetikai műveletet char adattípusú változókon hajtjuk végre. Ebben az esetben a válasz 120, ami az x ASCII értéke.
7. kérdés CPP
   #include       using     namespace     std  ;   int     main  (  int     x  )   {      static     int     i     =     5  ;      if     (  --  i  )      {      cout      < <     i  ;      main  (  10  );      }      return     0  ;   }   
Output:
4321  
Magyarázat: A C++ nyelvben minden nullától eltérő szám valódi értékként kezelendő. Ebben a kódban az if utasítás csökkenti az i értékét, de az if blokkjában a main() függvényt újra és újra meghívják. Itt úgy tűnik, hogy a program végtelen ciklusban van, de az i változó statikus természetű, élettartama a végrehajtásig megvan, ezért a program leáll, ha i-ből 0 lesz.
8. kérdés CPP
   #include       using     namespace     std  ;   int     main  (  int     x  )   {      int     i     =     5  ;      if     (  --  i  )      {      cout      < <     i  ;      main  (  10  );      }      return     0  ;   }   
Output:
infinite loop  
Magyarázat: A C++ nyelvben minden nullától eltérő szám valódi értékként kezelendő. Ebben a kódban az if utasítás csökkenti az i értékét, de az if blokkon belül a main() függvényt újra és újra meghívják (az összes utasítás most úgy fut le, mintha egy új program lenne), így a program végrehajtása végtelen ciklusba kerül, mivel nincs lezárási feltétel. Kvíz létrehozása