logo

C++-ohjelmien tulos | Sarja 22

Ennusta seuraavien C++-ohjelmien tulos. Kysymys 1 CPP
#include    using namespace std; int main() {  int a = b = c = 0;  cout << a << '*' << b << '*' << c;  return 0; } 
Output:
Compile time error! 
Selitys: 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; 

Kysymys 2 CPP
#include    using namespace std; int main() {  for ( ; ; ) cout << 'blank';  return 0; } 
Output:
Infinite Loop! 
Selitys: Koska alustustestiehto ja lisäys/vähennysehdot puuttuvat silmukan sisältä, suoritus jää äärettömään silmukkaan.
Kysymys 3 CPP
#include    using namespace std; int main() {   int i;  for (i=0; i<3; i++);    cout << 'hello!' <<i;  return 0; } 
Output:
hello!3 
Selitys: Hello!3 on tulos, koska kun for silmukka suoritetaan, sillä ei ole mitään tehtävää johtuen puolipisteestä (;) rivillä, jossa for silmukka on määritelty. Silmukka suoritetaan kolme kertaa ja i:n arvosta tulee 3, sitten loput lauseet suoritetaan.
Kysymys 4 CPP
#include    using namespace std; int main() {  int i;  i = 1 + (14563);  cout << i;  return 0; } 
Output:
4 
Selitys: Pilkku () -operaattori on binäärioperaattori, joka arvioi ensimmäisen operandin ja hylkää tuloksen ja arvioi sitten toisen ja palauttaa sitten toisen arvon. Tässä operaattorin pilkku () assosiatiivisuus on vasemmalta oikealle ja on helppo ymmärtää, että lauseke (14563) laskee arvoksi 3 ja sitten tulos 1 + 3 annetaan i:lle.
Kysymys 5 CPP
#include    using namespace std; int main() {  int a = 0 b;  b = (a = 50) + 10;  cout << a << '$' << b;  return 0; } 
Output:
50 
Selitys: Lause b = (a = 50) + 10; käyttää sulautetun tehtävän käsitettä. Tässä muuttujalle a annetaan arvo 50 ja b:lle tulos 50+10. Kysymys 6 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 
Selitys: C++ voi myös suorittaa aritmeettisia laskelmia ottaen huomioon merkkien ASCII-arvot, jos aritmeettinen toimenpide suoritetaan char-tietotyypin muuttujille. Tässä tässä tapauksessa vastaus on 120, joka on x:n ASCII-arvo.
Kysymys 7 CPP
#include   using namespace std; int main(int x) {  static int i = 5;  if (--i)  {  cout << i;  main(10);  }  return 0; } 
Output:
4321 
Selitys: Kaikkia nollasta poikkeavia lukuja C++:ssa käsitellään todellisina arvoina. Tässä koodissa if-lause pyrkii pienentämään i:n arvoa, mutta if-lohkon sisällä main()-funktiota kutsutaan yhä uudelleen ja uudelleen. Tässä ohjelma näyttää olevan äärettömässä silmukassa, mutta muuttuja i on luonteeltaan staattinen, sillä sen elinikä on suoritukseen asti, joten ohjelma pysähtyy, jos i:stä tulee 0.
Kysymys 8 CPP
#include   using namespace std; int main(int x) {  int i = 5;  if (--i)  {  cout << i;  main(10);  }  return 0; } 
Output:
infinite loop 
Selitys: Kaikkia nollasta poikkeavia lukuja C++:ssa käsitellään todellisina arvoina. Tässä koodissa if-lause pyrkii pienentämään i:n arvoa, mutta if-lohkon sisällä main()-funktiota kutsutaan yhä uudelleen (kaikki käskyt suoritetaan nyt kuin se olisi uusi ohjelma), joten ohjelman suoritus jää äärettömään silmukkaan, koska lopetusehtoa ei ole. Luo tietokilpailu