פלט של תוכניות C++ | סט 22

חזה את הפלט של תוכניות C++ הבאות. שאלה 1 CPP
   #include          using     namespace     std  ;   int     main  ()   {      int     a     =     b     =     c     =     0  ;      cout      < <     a      < <     '*'      < <     b      < <     '*'      < <     c  ;      return     0  ;   }   
Output:
Compile time error!  
הֶסבֵּר: 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 CPP
   #include          using     namespace     std  ;   int     main  ()   {      for     (     ;     ;     )     cout      < <     'blank'  ;      return     0  ;   }   
Output:
Infinite Loop!  
הֶסבֵּר: מכיוון שמצב בדיקת האתחול ותנאי ההגדלה/הפחתה חסרים בתוך לולאה, הביצוע ייתפס בלולאה אינסופית.
שאלה 3 CPP
   #include          using     namespace     std  ;   int     main  ()   {         int     i  ;      for     (  i  =  0  ;     i   <  3  ;     i  ++  );          cout      < <     'hello!'      < <  i  ;      return     0  ;   }   
Output:
hello!3  
הֶסבֵּר: Hello!3 היא התוצאה מכיוון שכאשר for loop מבוצע, אין לה שום משימה לעשות בגלל נקודת הנקודה-פסיק(;) הקיימת בשורה שבה הוגדרה for loop. הלולאה תבוצע שלוש פעמים והערך של i יהפוך ל-3 ואז שאר ההצהרות יבוצעו.
שאלה 4 CPP
   #include          using     namespace     std  ;   int     main  ()   {      int     i  ;      i     =     1     +     (  1    4    5    6    3  );      cout      < <     i  ;      return     0  ;   }   
Output:
4  
הֶסבֵּר: האופרטור פסיק () הוא אופרטור בינארי שמעריך את האופרנד הראשון ומשליך את התוצאה ואז מעריך את השני ואז מחזיר את הערך של שני. כאן האסוציאטיביות של האופרטור פסיק () היא משמאל לימין וקל להבין שהביטוי (14563) מוערך ל-3 ואז התוצאה 1 + 3 מוקצית ל-i.
שאלה 5 CPP
   #include          using     namespace     std  ;   int     main  ()   {      int     a     =     0       b  ;      b     =     (  a     =     50  )     +     10  ;      cout      < <     a      < <     '$'      < <     b  ;      return     0  ;   }   
Output:
50  
הֶסבֵּר: המשפט b = (a = 50) + 10; משתמש במושג מטלה מוטבע. כאן הערך של 50 מוקצה למשתנה a והתוצאה 50+10 מוקצה ל-b. שאלה 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  
הֶסבֵּר: ה-C++ יכול גם לבצע חישוב אריתמטי בהתחשב בערכי ASCII של תווים אם הפעולה האריתמטית מבוצעת על משתנים של char datatype. כאן במקרה זה התשובה היא 120 שהוא ערך ASCII עבור x.
שאלה 7 CPP
   #include       using     namespace     std  ;   int     main  (  int     x  )   {      static     int     i     =     5  ;      if     (  --  i  )      {      cout      < <     i  ;      main  (  10  );      }      return     0  ;   }   
Output:
4321  
הֶסבֵּר: כל מספר שאינו אפס ב-C++ מטופל כערך אמיתי. כאן בקוד זה המשפט if נוטה להפחית את הערך של i אבל בתוך הבלוק של if נקראת הפונקציה main() שוב ושוב. כאן נראה שהתוכנית נמצאת בלולאה אינסופית אבל המשתנה i הוא סטטי באופיו יש לו את חייו עד לביצוע ולכן התוכנית תיעצר אם i יהפוך ל-0.
שאלה 8 CPP
   #include       using     namespace     std  ;   int     main  (  int     x  )   {      int     i     =     5  ;      if     (  --  i  )      {      cout      < <     i  ;      main  (  10  );      }      return     0  ;   }   
Output:
infinite loop  
הֶסבֵּר: כל מספר שאינו אפס ב-C++ מטופל כערך אמיתי. כאן בקוד זה המשפט if נוטה להקטין את הערך של i אבל בתוך הבלוק של if נקראת הפונקציה main() שוב ושוב (כל ההצהרות יבוצעו כעת כאילו מדובר בתוכנית חדשה) ומכאן שביצוע התוכנית ייתפס בלולאה אינסופית מכיוון שאין תנאי סיום. צור חידון