2015年2月19日 星期四

[C]好題目 (1)

下列這個C語言程式執行後,到底會輸出什麼呢?

 #include <stdio.h>  
 int main()  
 {  
   int a = 9, b = 0, c = 7;   
   a = (a = b) && (c = b);  
   printf("%d\t%d\t%d",a,b,c);  
   return 0;  
 }  

輸出結果為

0    0    7

一開始我也覺得很奇怪,為什麼C的值會是7而不是0。

後來去查了一下,原來

&& 有一個特性,也就是它的左邊如果是false (0) ,就不會去執行右邊的敘述

所以(c=b) 是不會被執行到的,上方的程式碼其實等效於下方這段程式。

 #include <stdio.h>  
 int main()  
 {  
   int a = 9, b = 0, c = 7;   
   a = (a = b);  
   printf("%d\t%d\t%d",a,b,c);  
   return 0;  
 }  


a被指定為b的值,所以為零。



我是分隔線



今天我們把b的值改成1,如下所示

 #include <stdio.h>  
 int main()  
 {  
   int a = 9, b = 1, c = 7;   
   a = (a = b) && (c=b);  
   printf("%d\t%d\t%d",a,b,c);  
   return 0;  
 }  

結果將大大不相同,因為a=b 也就是說a=1 ,所以&&左邊成立,所以會執行&&右邊的敘述,

把c=b ,因此c的值也為1,所以a= 1 && 1 ,因此輸出將變成 1    1    1

沒有留言:

張貼留言