# 【知識精講】如果之后的如果
## Part1
在我們之前的課程中間,我們已經見到過了 `if…else…` 這種形式的條件語句的使用,它根據不同的情況執行不同的代碼塊,并且執行 `if` 后代碼塊的條件和執行 `else` 后代碼塊的條件是完全互斥的。
那么,如果我們遇到不互斥,但是又需要分支考慮的情況時,我們應該如何去運用 `if ... else ...`的語句呢?
## Part2
舉個例子來說,假設我們在 `if` 中的條件是 `x > 5`,也就是說,當 `x` 大于 555 的時候,`if` 條件后的語句塊會被執行;而如果我們直接在之后使用 `else` ,那么 `else` 內語句塊被執行的條件將是 `x` 小于等于 555 。可是,如果我們希望有一個語句塊在 `x` 小于等于 555 但是大于 333 的時候執行,我們應該怎么辦呢?
并不是很難噢,其實只要進行一層“嵌套”就可以了。對于原來的代碼:
~~~
if (x > 5) {
// 當 x 大于 5 時執行
}
else {
// 當 x 小于等于 5 時執行
}
~~~
我們需要在 `else` (也就是 `x` 小于等于 555 時)中再添加一個對于“大于 333”的約束。這時候我們只要在 `else` 的語句中再加上一個 `if` ,并在條件里面寫上`(x > 3)`就可以啦:
~~~
if (x > 5) {
// 當 x 大于 5 時執行
}
else {
if (x > 3) {
// 當 x 小于等于 5 且大于 3 時執行
}
}
~~~
由于上面的這種寫法的 `else` 中只有 `if` 一個條件約束和與它相關聯的語句塊,我們可以將 `if` 簡寫在 `else` 的后面,縮略成這樣的結果:
```
if (x > 5) {
// 當 x 大于 5 時執行
}
else if (x > 3) {
// 當 x 小于等于 5 且大于 3 時執行
}
```
類似地,如果我們把嵌套在 `else` 內的 `if` 條件下也加上一個 `else`,我們將得到:
~~~
if (x > 5) {
// 當 x 大于 5 時執行
}
else {
if (x > 3) {
// 當 x 小于等于 5 且大于 3 時執行
}
else {
// 當 x 小于等于 3 時執行
}
}
~~~
相應地,也可以被縮略成:
~~~
if (x > 5) {
// 當 x 大于 5 時執行
}
else if (x > 3) {
// 當 x 小于等于 5 且大于 3 時執行
}
else {
// 當 x 小于等于 3 時執行
}
~~~
類似的,如果我們逐層的嵌套,我們還可能得到類似于下面這樣的復雜情況:
~~~
if (x > 5) {
// 當 x 大于 5 時執行
}
else {
if (x > 3) {
// 當 x 小于等于 5 且大于 3 時執行
}
else {
if (x > 1) {
// 當 x 小于等于 3 且大于 1 時執行
}
else {
// 當 x 小于等于 1 時執行
}
}
}
~~~
相應的,我們逐層縮略,將得到如下的結果:
~~~
if (x > 5) {
// 當 x 大于 5 時執行
}
else if (x > 3) {
// 當 x 小于等于 5 且大于 3 時執行
}
else if (x > 1) {
// 當 x 小于等于 3 且大于 1 時執行
}
else {
// 當 x 小于等于 1 時執行
}
~~~
你有沒有從中發現一些規律呢,其實你可以通過嵌套 `if` 和 `else` 這種分支結構,實現對于復雜的邏輯分支的控制,而這就正是我最喜歡的啦。
[](http://res.jisuanke.com/img/upload/20160220/17f7a22e49348c233229db3f218b98d7147212cb.png)
要注意噢,我們的 C++ 語言中,只有 `if ... else ...` 是一個分支結構的單元。請不要把`if ... else if ... else` 理解成一個分支結構的單元,這種容易造成誤解的寫法其實是多個分支結構嵌套后的縮略。
接下來,讓我們把這種分支結構的嵌套運用到我們自己的程序中吧。
- 教材介紹
- 《編程初學入門常識》
- 什么是程序語言
- 【知識精講】編程與編程語言
- 【選擇測試】編程語言分類
- 【知識精講】高級語言分類
- 【選擇測試】編譯與解釋
- 【選擇測試】程序員笑話-Java
- 熟悉鍵盤上用于編程的鍵位
- 【知識精講】認識你的鍵盤
- 【知識精講】中文和英文字符
- 【匹配測試】識別中英文符號
- 【選擇測試】中英文符號的影響
- 【伴隨編程】不要使用中文引號
- 【伴隨編程】不要使用中文分號
- 【伴隨編程】正確地輸入符號
- 【選擇測試】找出程序中的錯誤
- 初始工程師思維
- 【知識精講】二進制思想
- 【選擇測試】程序員笑話-湊整
- 【知識精講】閉合的邏輯
- 【選擇測試】程序員笑話-條件
- 程序員職業與生活
- 【知識精講】程序員的發展方向
- 【知識精講】程序員的裝備
- 【知識精講】程序員的健康
- 【選擇測試】做一名健康的程序員
- 《C++程序設計》
- 前言
- 【知識精講】編程與計算機科學
- 【知識精講】編程與軟件工程
- 【知識精講】如何學習編程
- 你好C++
- 【知識精講】你好,C++
- 【知識精講】C++程序是如何開發的
- 【知識精講】成為一名Power User
- 【伴隨編程】讓我們一起說你好
- 【知識精講】你的第一個C++語言程序
- 【伴隨命令】編譯、運行你的程序
- 【伴隨編程】將變量流式輸出
- 【選擇測試】變量的作用域
- 【知識精講】變量與數據類型
- 【匹配測試】C++語言的入門概念
- 【知識精講】在程序中學會換行
- 【選擇測試】正確地換行
- 簡單數學運算
- 【知識精講】重新認識基本運算
- 【選擇測試】運算符的理解
- 【伴隨編程】做一下簡單的運算
- 【伴隨編程】a 的 n 次方
- 【知識精講】數學函數
- 【伴隨編程】讓C++語言變成計算器
- 【伴隨編程】計算球的體積
- 【匹配測試】數學世界知多少
- 【知識精講】在程序中添加注釋
- 【選擇測試】正確地寫注釋
- 從伴隨輸入到變量地址
- 【伴隨編程】 一個數字復讀機器
- 【選擇測試】理解標準輸入輸出
- 【伴隨編程】一個加法計算器
- 【程序設計】A+B+C問題
- 【伴隨編程】簡單的I/O格式控制
- 【知識精講】地址與取地址符
- 【伴隨編程】看看我們的地址
- 習題一:面積與周長
- 【程序設計】矩形面積與周長
- 【程序設計】三角形面積與周長
- 【程序設計】圓形面積與周長
- 程序中的是與非
- 【知識精講】是非的表示與關系運算
- 【伴隨編程】驗一驗關系運算式
- 【選擇測試】關系運算式求值
- 【知識精講】如果的意義
- 【伴隨編程】分段函數求值
- 【知識精講】如果之后的如果
- 【伴隨編程】五則運算器
- 【選擇測試】分支的嵌套
- 【伴隨編程】問號表達式
- 【知識精講】是非之間的邏輯組合
- 【伴隨編程】判斷閏年
- 【程序設計】日期合法性
- 【知識精講】多路順序結構
- 【知識精講】在程序中學會縮進
- 【選擇測試】正確的縮進
- C++程序中的苦力
- 【知識精講】使用循環結構
- 【選擇測試】對比兩種循環
- 【伴隨編程】使用while循環
- 【填空測試】理解循環結構
- 【知識精講】自減和自增運算符
- 【伴隨編程】使用自增運算符
- 【知識精講】for循環
- 【選擇測試】for循環的使用
- 【程序設計】一大波好玩兒的程序
- 《代碼能力快速提升》
- 《基礎數據結構》
- 《搜索入門》
- 《動態規劃基礎》
- 《數論和基礎數學》
- 《圖和數基礎》