我們來仔細分析一下哪些是邏輯量,哪些是邏輯值。
要表達一件事情是否成立是這樣描述的:“如果他來了,這件事情一定能成功”。用程序語句描述就是 if(a!=0)在這個語句里用變量a來表示他來與不來這件事,變量的值為1說明他來了,為0就是不來。在C語言中,一般不寫成這樣(如果一定要寫成if(a!=0),別人一看你的程序就知道你是編程菜鳥),而是寫成 if(a)。括號里面的變量a就是邏輯量。當該邏輯量的邏輯值為1時,if表達式為真,這時可以執行if 后的的程序語句。當該邏輯量的邏輯值為0時,if表達式為假,就不能執行if后面的程序語句?梢钥闯,if表達式能否成立是要看“邏輯量”最后的“邏值值”是否為1來判斷的。
什么是邏輯值--邏輯量、邏輯表達式其最后的運算結果的值就是邏輯值。邏輯值只能是“0”和“1”這二個數!1”表示邏輯真(成立);“0”表示邏輯假(不成立)。
一切非“0”的邏輯量其邏輯值都為真。正確理解這句話很重要。例:if(-1),這一句可以這樣來分析--首先“-1”是一個非“0”的邏輯量,它的邏輯值為“1”,那么這個if語句就成為 if(1),這個if表達式成立。
思考:下面的式子中,哪個語句不被執行
int a=0,b=10; if(a) {b++;a++} a+=10; if(b) {a=10;b=-10;} if(b)a=0;
C語言中進行邏輯運算時要注意的問題:
例1:
現在要判斷一個變量的值是否在12到30之間,很自然想到了這樣一個表達式:
scanf("%d",&a);
if(12<a<30) /*這樣的寫法對嗎*/
printf("%d".a);
把這樣的語句放在程序里編譯一下,沒有什么不正常的,編譯通過。
但是在運行的時候就會出問題。下面仔細分析一下if語句的運行過程:
表達式12<a<30中首先進行12<a的判斷,如果a>12則為真,否則為假。設a的值為14,些時表達式結果為邏輯真,那么整個表達式if(12<a<30)成為if(1<30)(注意這個新的表達式中的1是12<a的邏輯值),這時問題就出現了,可以看到當變量a的值大于12的時候總有1<30,所以后面的<30這個關系表達式是多余的了。另外假設a的值小于12也會出現這樣的情況。由些看來這樣寫法肯定是錯的。
正確的寫法應該是:
if((12<a)&&(a<30)) /*如果變量a的值大于12并且小于30*/
這樣不但編譯通過,運行結果也是對的了。
文章來源于領測軟件測試網 http://www.kjueaiud.com/