寫出下面各邏輯表達式的值。設a=3,b=4,c=5。
(1)a + b > c && b == c
(2)a || b + c && b - c
(3)!(a > b) && !c || 1
(4)!(x = a) && (y = b) && 0
(5)!(a + b) + c - 1 && b + c / 2
解題思路:
- 關系運算符的優先級高於賦值運算符,但是低於算術運算符;
- &&表示兩邊條件同為真則成立,||表示兩邊條件任意一個為真則成立,!取條件反義。
- 邏輯運算符優先級: ! > && > ||
- 有括號優先括號。
3.1 題目:a + b > c && b == c -> 3+4>5&&4==5
解析: 3+4>5 優先3+4得到結果7,因此7>5結果為真; 4==5為假,一真一假邏輯與最終結果為假。
答案: 0
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
printf("%d\n", a || b + c && b - c);
system("pause");//這一句是為了讓控制台不退出
return 0;
}
3.2 題目:a || b + c && b - c -> 3||4 + 5 && 4-5
解析: 優先算術運算4+5得到7,非0則為真,4-5得到-1,非0則為真,接下來邏輯與判斷,最終邏輯或判斷
答案: 1
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
printf("%d\n", a || b + c && b - c);
system("pause");//這一句是為了讓控制台不退出
return 0;
}
3.3 題目:!(a > b) && !c || 1 -> !(3>4) && !5 || 1
**解析: ** !優先級最高,!(3>4)最終結果為真,!5為假; 其次 &&,真&&假得到假,最終||,1為真,假或真為真
答案: 1
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
printf("%d\n", !(a > b) && !c || 1);
system("pause");//這一句是為了讓控制台不退出
return 0;
}
3.4 題目:!(x = a) && (y = b) && 0 -> !(x=3) && (y=4)&&0
解析: 這里&&優先級最低是最后一個邏輯運算,因此不管如何,最終&&0,則肯定為假
答案: 假-0
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
int x, y;
printf("%d\n", !(x = a) && (y = b) && 0);
system("pause");//這一句是為了讓控制台不退出
return 0;
}
3.5 題目:!(a + b) + c - 1 && b + c / 2 -> !(3+4)+5-1 && 4+5/2
解析: 在vs中優先對(a+b)取非得到0,0+5-1結果為4,因此最終為真(此題涉及不同平台結果不同的問題,因為在有的平台下編譯器會優先算術運算,則最終取非得到結果為假)
**答案: ** 1
#include <stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
printf("%d\n", !(a + b) + c - 1);
printf("%d\n", !(a + b) + c - 1 && b + c / 2);
system("pause");//這一句是為了讓控制台不退出
return 0;
}