
- C語言程式設計教程
- C語言 - 首頁
- C語言基礎
- C語言 - 概述
- C語言 - 特性
- C語言 - 歷史
- C語言 - 環境搭建
- C語言 - 程式結構
- C語言 - Hello World
- C語言 - 編譯過程
- C語言 - 註釋
- C語言 - 詞法單元
- C語言 - 關鍵字
- C語言 - 識別符號
- C語言 - 使用者輸入
- C語言 - 基本語法
- C語言 - 資料型別
- C語言 - 變數
- C語言 - 整數提升
- C語言 - 型別轉換
- C語言 - 型別強制轉換
- C語言 - 布林值
- C語言中的常量和字面量
- C語言 - 常量
- C語言 - 字面量
- C語言 - 轉義序列
- C語言 - 格式說明符
- C語言中的運算子
- C語言 - 運算子
- C語言 - 算術運算子
- C語言 - 關係運算符
- C語言 - 邏輯運算子
- C語言 - 位運算子
- C語言 - 賦值運算子
- C語言 - 一元運算子
- C語言 - 自增和自減運算子
- C語言 - 三元運算子
- C語言 - sizeof 運算子
- C語言 - 運算子優先順序
- C語言 - 其他運算子
- C語言中的決策
- C語言 - 決策
- C語言 - if 語句
- C語言 - if...else 語句
- C語言 - 巢狀if語句
- C語言 - switch 語句
- C語言 - 巢狀switch語句
- C語言中的迴圈
- C語言 - 迴圈
- C語言 - while 迴圈
- C語言 - for 迴圈
- C語言 - do...while 迴圈
- C語言 - 巢狀迴圈
- C語言 - 無限迴圈
- C語言 - break 語句
- C語言 - continue 語句
- C語言 - goto 語句
- C語言中的函式
- C語言 - 函式
- C語言 - 主函式
- C語言 - 按值呼叫函式
- C語言 - 按引用呼叫函式
- C語言 - 巢狀函式
- C語言 - 可變引數函式
- C語言 - 使用者自定義函式
- C語言 - 回撥函式
- C語言 - return 語句
- C語言 - 遞迴
- C語言中的作用域規則
- C語言 - 作用域規則
- C語言 - 靜態變數
- C語言 - 全域性變數
- C語言中的陣列
- C語言 - 陣列
- C語言 - 陣列的特性
- C語言 - 多維陣列
- C語言 - 將陣列傳遞給函式
- C語言 - 從函式返回陣列
- C語言 - 變長陣列
- C語言中的指標
- C語言 - 指標
- C語言 - 指標和陣列
- C語言 - 指標的應用
- C語言 - 指標運算
- C語言 - 指標陣列
- C語言 - 指向指標的指標
- C語言 - 將指標傳遞給函式
- C語言 - 從函式返回指標
- C語言 - 函式指標
- C語言 - 指向陣列的指標
- C語言 - 指向結構體的指標
- C語言 - 指標鏈
- C語言 - 指標與陣列的區別
- C語言 - 字元指標和函式
- C語言 - NULL 指標
- C語言 - void 指標
- C語言 - 懸空指標
- C語言 - 解引用指標
- C語言 - 近、遠和巨型指標
- C語言 - 指標陣列的初始化
- C語言 - 指標與多維陣列的區別
- C語言中的字串
- C語言 - 字串
- C語言 - 字串陣列
- C語言 - 特殊字元
- C語言結構體和聯合體
- C語言 - 結構體
- C語言 - 結構體和函式
- C語言 - 結構體陣列
- C語言 - 自引用結構體
- C語言 - 查詢表
- C語言 - 點 (.) 運算子
- C語言 - 列舉 (enum)
- C語言 - 結構體填充和打包
- C語言 - 巢狀結構體
- C語言 - 匿名結構體和聯合體
- C語言 - 聯合體
- C語言 - 位域
- C語言 - typedef
- C語言中的檔案處理
- C語言 - 輸入 & 輸出
- C語言 - 檔案I/O (檔案處理)
- C語言預處理器
- C語言 - 預處理器
- C語言 - 編譯指示
- C語言 - 預處理器運算子
- C語言 - 宏
- C語言 - 標頭檔案
- C語言中的記憶體管理
- C語言 - 記憶體管理
- C語言 - 記憶體地址
- C語言 - 儲存類別
- 其他主題
- C語言 - 錯誤處理
- C語言 - 可變引數
- C語言 - 命令執行
- C語言 - 數學函式
- C語言 - static 關鍵字
- C語言 - 隨機數生成
- C語言 - 命令列引數
- C語言程式設計資源
- C語言 - 問答
- C語言 - 快速指南
- C語言 - 速查表
- C語言 - 有用資源
- C語言 - 討論
C語言巢狀if語句
在C語言程式設計中,巢狀if-else語句始終是合法的,這意味著你可以在另一個if或else-if語句內部使用一個if或else-if語句。
在程式設計環境中,“巢狀”是指將一個特定的程式設計元素包含在另一個類似的元素內部。例如,巢狀迴圈、巢狀結構、巢狀條件語句等。如果C語言中的if語句用在另一個if語句內部,那麼我們稱之為C語言中的巢狀if語句。
語法
巢狀if語句的語法如下:
if (expr1){ if (expr2){ block to be executed when expr1 and expr2 are true } else{ block to be executed when expr1 is true but expr2 is false } }
下圖表示if語句的巢狀:

你可以用&&或||組合布林表示式來達到同樣的效果。但是,對於更復雜的演算法,其中有多個布林表示式的不同組合,構建複合條件就變得困難了。相反,建議使用巢狀結構。
另一個if語句可以出現在頂級if塊中,或者它的else塊中,或者同時出現在兩者中。
示例1
讓我們舉個例子,程式需要確定給定的數字是否小於100,在100到200之間,或大於200。我們可以用下面的複合布林表示式來表達這種邏輯:
#include <stdio.h> int main (){ // local variable definition int a = 274; printf("Value of a is : %d\n", a); if (a < 100){ printf("Value of a is less than 100\n"); } if (a >= 100 && a < 200){ printf("Value of a is between 100 and 200\n" ); } if (a >= 200){ printf("Value of a is more than 200\n" ); } }
輸出
執行程式碼並檢查其輸出。在這裡,我們已將“a”的值初始化為274。更改此值並再次執行程式碼。如果提供的數值小於100,則會得到不同的輸出。同樣,如果提供的數字在100到200之間,輸出也會再次改變。
Value of a is : 274 Value of a is more than 200
示例2
現在讓我們對同一個問題使用巢狀條件。當我們使用巢狀條件時,它將使解決方案更容易理解。
首先,檢查“a >= 100”。在if語句的真值部分,檢查它是否<200以決定數字是否在100-200之間,或者它是否>200。如果第一個條件 (a >= 100) 為假,則表示該數字小於100。
#include <stdio.h> int main (){ // local variable definition // check with different values 120, 250 and 74 int a = 120; printf("value of a is : %d\n", a ); // check the boolean condition if(a >= 100){ // this will check if a is between 100-200 if(a < 200){ // if the condition is true, then print the following printf("Value of a is between 100 and 200\n" ); } else{ printf("Value of a is more than 200\n"); } } else{ // executed if a < 100 printf("Value of a is less than 100\n"); } return 0; }
輸出
執行程式碼並檢查其輸出。對於不同的“a”輸入值,你會得到不同的輸出:
Value of a is : 120 Value of a is between 100 and 200
示例3
下面的程式使用巢狀if語句來確定一個數字是否能被2和3整除,能被2整除但不能被3整除,能被3整除但不能被2整除,以及不能同時被2和3整除。
#include <stdio.h> int main(){ int a = 15; printf("a: %d\n", a); if (a % 2 == 0) { if (a % 3 == 0){ printf("Divisible by 2 and 3"); } else { printf("Divisible by 2 but not 3"); } } else { if (a % 3 == 0){ printf("Divisible by 3 but not 2"); } else{ printf("Not divisible by 2, not divisible by 3"); } } return 0; }
輸出
執行程式碼並檢查其輸出:
a: 15 Divisible by 3 but not 2
對於不同的“a”值,你會得到不同的輸出。
示例4
下面是一個C程式,用於檢查給定的年份是否是閏年。年份是否是閏年由以下規則決定:
- 年份能被4整除嗎?
- 如果是,它是世紀年(能被100整除)嗎?
- 如果是,它能被400整除嗎?如果可以,它是閏年,否則不是。
- 如果它能被4整除但不是世紀年,它是閏年。
- 如果它不能被4整除,它不是閏年。
這是C程式碼:
#include <stdio.h> int main(){ // Test the program with the values 1900, 2023, 2000, 2012 int year = 1900; printf("year: %d\n", year); // is divisible by 4? if (year % 4 == 0){ // is divisible by 100? if (year % 100 == 0){ // is divisible by 400? if(year % 400 == 0){ printf("%d is a Leap Year\n", year); } else{ printf("%d is not a Leap Year\n", year); } } else{ printf("%d is not a Leap Year\n", year); } } else{ printf("%d is a Leap Year\n", year); } }
輸出
執行程式碼並檢查其輸出:
year: 1900 1900 is not a Leap Year
使用變數“year”的不同值(如1900、2023、2000、2012)測試程式。
可以使用複合布林表示式代替巢狀if語句來達到相同的結果,如下所示:
If (year % 4 == 0 && (year % 400 == 0 || year % 100 != 0)){ printf("%d is a leap year", year); } else{ printf("%d is not a leap year", year); }
使用C語言中的巢狀if語句,我們可以編寫結構化和多層決策演算法。它們簡化了複雜判別邏輯情況的編碼。巢狀也使程式更易於閱讀和理解。