邏輯是消除自然語言的歧義、嚴密準確的記述事物的工具。
能夠判斷對錯的陳述句,叫做命題。
命題正確時,稱該命題為「真」
命題不正確時,稱該命題為「假」
具備完整性,說明該規則無論在什麼情況下都適用;
具備排他性,說明該規則不存在矛盾之處。
if語句的條件分支,體現了「兼顧完整性和排他性的分解」。
「不是......」的命題運算稱作非,英語中用not表示,假設某命題為a,則a的邏輯非表示式寫作:
﹁ a(not a)
● 命題a為true時,命題﹁ a為false,命題﹁ ﹁ a為true
● 命題a為false時,命題﹁ a為true,命題﹁ ﹁ a為false
「a並且b」的命題稱作邏輯與,英語中用and表示,命題「a並且b」用邏輯表示式寫作:
a∧b(a and b)
● 僅當a和b都為true時,a∧b才為true
「a或者b」的命題運算稱作邏輯或,英語中用or表示,命題「a或者b」用邏輯表示式寫作:
a∨b(a or b)
● a和b至少有乙個為true時,才為true
● 當a和b都為false時,才為false
「a或者b(但不是都滿足)」的運算稱作異或,英語中稱作exclusive or,它和邏輯或相似,但是在a和b都為true或者false的情況下有所不同,它的邏輯表示式寫作:
a⊕b● 當a和b不同時,才為true
它的邏輯表示式寫作:
a=b● 當a和b都為true時,a=b為true
● 當a和b都為false時,a=b為true
(﹁ a)∨(﹁ b)=﹁ (a∧b):「非a」或者「非b」和非「a與b」是等價的
(﹁ a)∧(﹁ b)=﹁ (a∨b):「非a」並且「非b」和非「a或b」是等價的
在邏輯表示式中分別將true和false、a和﹁ a、∧和∨進行互換,就能得到該邏輯表示式的否定式。如下:
true ←→ false
a ←→ ﹁ a
∧ ←→ ∨
它們相互成對,這稱作邏輯表示式的對偶性。
程式經常會因為發生錯誤,導致退出、崩潰等,得不到true和false中的任意乙個值,為了能表示這種得不到的值的情況,又新引入了乙個undefined的值。即true、false、undefined三值邏輯。
它使用運算子&&,將a和b的帶條件的邏輯與表示為:a&&b
● 不包含undefined的行,a&&b與和a ∧ b相等;
● a為true時,a&&b與b相等;
● a為false時,a&&b恒為false;
● a為undefined時,a&&b恒為undefined。
在判斷a與b的真假值時,應根據條件a看是否需要看b,因此稱為帶條件的邏輯與。
它使用運算子||,將a和b的帶條件的邏輯或表示為:a||b
● 不包含undefined時,a||b與a ∨ 相等;
● a為true時,a||b恒為true;
● a為false時,a||b與b相等;
● a為undefined時,a||b恒為undefined。
它的否定式寫作:!a
● 不包含undefined時,!a和﹁ a相等;
● 若a為undefined時,!a恒為undefined。
(!a)||(!b)=!(a&&b)
(!a)&&(!b)=!(a||b)
程式設計師的數學 《程式設計師的數學》第二章 邏輯
邏輯表示式在程式設計師眼裡是再常見不過的了。除了正常的業務邏輯處理之外,還有各種異常需要我們去捕獲。當然,能夠盡量做到考慮所有可能情況是自然要滿足的。也就應對了本書邏輯這一章節著重提出的 兼顧完整性和排他性 當然,要做到這些,有各種數學表達方式和影象法來輔助我們完善程式的健壯性。那麼下面針對具體的圖...
程式設計師面試題精選(27) 二元樹的深度
題目 輸入一棵二元樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 輸入二元樹 10 614 412 16 輸出該樹的深度3。二元樹的結點定義如下 struct sbinarytreenode a node of the bin...
程式設計師100題 15 求二元查詢樹的映象
題目 輸入一顆二元查詢樹,將該樹轉換為它的映象,即在轉換後的二元查詢樹中,左子樹的結點都大於右子樹的結點。用遞迴和迴圈兩種方法完成樹的映象轉換。例如輸入 8 610 57911 輸出 8 10 6 119 75 定義二元查詢樹的結點為 struct bstreenode a node in the ...