C語言學習【3】——判斷與迴圈
1.判斷
判斷結構要求程式設計師指定一個或多個要評估或測試的條件,以及條件為真時要執行的語句(必需的)和條件為假時要執行的語句(可選的)。
C 語言把任何非零和非空的值假定為 true,把零或 null 假定為 false。
典型的判斷結構的一般形式:
1.1 判斷語句
C 語言提供了以下型別的判斷語句:
- if語句
if(boolean_expression)
{
/* 如果布林表示式為真將執行的語句 */
}
如果布林表示式為 true,則 if 語句內的程式碼塊將被執行。如果布林表示式為 false,則 if 語句結束後的第一組程式碼(閉括號後)將被執行。
- if…else語句
if(boolean_expression)
{
/* 如果布林表示式為真將執行的語句 */
}
else
{
/* 如果布林表示式為假將執行的語句 */
}
如果布林表示式為 true,則執行 if 塊內的程式碼。如果布林表示式為 false,則執行 else 塊內的程式碼。
//C 語言中的 if...else if...else 語句的語法:這可用於測試多種條件。
if(boolean_expression 1)
{
/* 當布林表示式 1 為真時執行 */
}
else if( boolean_expression 2)
{
/* 當布林表示式 2 為真時執行 */
}
else if( boolean_expression 3)
{
/* 當布林表示式 3 為真時執行 */
}
else
{
/* 當上麵條件都不為真時執行 */
}
當使用 if…else if…else 語句時,以下幾點需要注意:
一個 if 後可跟零個或一個 else,else 必須在所有 else if 之後。
一個 if 後可跟零個或多個 else if,else if 必須在 else 之前。
一旦某個 else if 匹配成功,其他的 else if 或 else 將不會被測試。
- 巢狀if語句
if( boolean_expression 1)
{
/* 當布林表示式 1 為真時執行 */
if(boolean_expression 2)
{
/* 當布林表示式 2 為真時執行 */
}
}
C 語言中,巢狀 if-else 語句是合法的,這意味著您可以在一個 if 或 else if 語句內使用另一個 if 或 else if 語句。
也可以巢狀 else if…else,方式與巢狀 if 語句相似。
- switch語句
switch(expression){
case constant-expression :
statement(s);
break; /* 可選的 */
case constant-expression :
statement(s);
break; /* 可選的 */
/* 您可以有任意數量的 case 語句 */
default : /* 可選的 */
statement(s);
}
一個 switch 語句允許測試一個變數等於多個值時的情況。每個值稱為一個 case,且被測試的變數會對每個 switch case 進行檢查。
switch 語句必須遵循下面的規則:
1.switch 語句中的 expression 是一個常量表示式,必須是一個整型或列舉型別。
2.在一個 switch 中可以有任意數量的 case 語句。每個 case 後跟一個要比較的值和一個冒號。
3.case 的 constant-expression 必須與 switch 中的變數具有相同的資料型別,且必須是一個常量或字面量。
4.當被測試的變數等於 case 中的常量時,case 後跟的語句將被執行,直到遇到 break 語句為止。
5.當遇到 break 語句時,switch 終止,控制流將跳轉到 switch 語句後的下一行。
6.不是每一個 case 都需要包含 break。如果 case 語句不包含 break,控制流將會 繼續 後續的 case,直到遇到 break 為止。
7.一個 switch 語句可以有一個可選的 default case,出現在 switch 的結尾。default case 可用於在上面所有 case 都不為真時執行一個任務。default case 中的 break 語句不是必需的。
- 巢狀switch語句
switch(ch1) {
case 'A':
printf("這個 A 是外部 switch 的一部分" );
switch(ch2) {
case 'A':
printf("這個 A 是內部 switch 的一部分" );
break;
case 'B': /* 內部 B case 程式碼 */
}
break;
case 'B': /* 外部 B case 程式碼 */
}
可以把一個 switch 作為一個外部 switch 的語句序列的一部分,即可以在一個 switch 語句內使用另一個 switch 語句。即使內部和外部 switch 的 case 常量包含共同的值,也沒有矛盾。
1.2 三元運算子
? : 運算子
Exp1 ? Exp2 : Exp3;
Exp1、Exp2 和 Exp3 是表示式。請注意,冒號的使用和位置。
? 表示式的值是由 Exp1 決定的。
如果 Exp1 為真,則計算 Exp2 的值,結果即為整個 ? 表示式的值。
如果 Exp1 為假,則計算 Exp3 的值,結果即為整個 ? 表示式的值。
2.迴圈
2.1 迴圈型別
C 語言提供了以下4種迴圈型別:
- while迴圈
//只要給定的條件為真,C 語言中的 while 迴圈語句會重複執行一個目標語句
while(condition)
{
statement(s);
}
在這裡,statement(s) 可以是一個單獨的語句,也可以是幾個語句組成的程式碼塊。
condition 可以是任意的表示式,當為任意非零值時都為 true。
當條件為 true 時執行迴圈。
當條件為 false 時,退出迴圈,程式流將繼續執行緊接著迴圈的下一條語句。
- for迴圈
//for 迴圈允許您編寫一個執行指定次數的迴圈控制結構
for ( init; condition; increment )
{
statement(s);
}
for 迴圈的控制流:
1.init 會首先被執行,且只會執行一次。這一步允許您宣告並初始化任何迴圈控制變數。也可以不在這裡寫任何語句,只要有一個分號出現即可。
2.接下來,會判斷 condition。如果為真,則執行迴圈主體。如果為假,則不執行迴圈主體,且控制流會跳轉到緊接著 for 迴圈的下一條語句。
3.在執行完 for 迴圈主體後,控制流會跳回上面的 increment 語句。該語句允許您更新迴圈控制變數。該語句可以留空,只要在條件後有一個分號出現即可。
4.條件再次被判斷。如果為真,則執行迴圈,這個過程會不斷重複(迴圈主體,然後增加步值,再然後重新判斷條件)。在條件變為假時,for 迴圈終止。
- do…while迴圈
do
{
statement(s);
}while( condition );
C 語言中,do…while 迴圈是在迴圈的尾部檢查它的條件。
do…while 迴圈與 while 迴圈類似,但是 do…while 迴圈會確保至少執行一次迴圈。
注意:
1.條件表示式出現在迴圈的尾部,所以迴圈中的 statement(s) 會在條件被測試之前至少執行一次。
2.如果條件為真,控制流會跳轉回上面的 do,然後重新執行迴圈中的 statement(s)。這個過程會不斷重複,直到給定條件變為假為止。
- 巢狀迴圈
//C 語言中 巢狀 for 迴圈 語句的語法:
for (initialization; condition; increment/decrement)
{
statement(s);
for (initialization; condition; increment/decrement)
{
statement(s);
... ... ...
}
... ... ...
}
//C 語言中 巢狀 while 迴圈 語句的語法:
while (condition1)
{
statement(s);
while (condition2)
{
statement(s);
... ... ...
}
... ... ...
}
//C 語言中 巢狀 do...while 迴圈 語句的語法:
do
{
statement(s);
do
{
statement(s);
... ... ...
}while (condition2);
... ... ...
}while (condition1);
關於巢狀迴圈有一點值得注意,您可以在任何型別的迴圈內巢狀其他任何型別的迴圈。比如,一個 for 迴圈可以巢狀在一個 while 迴圈內,反之亦然。
2.2 迴圈控制語句
迴圈控制語句可以改變你程式碼的執行順序,通過它你可以實現程式碼的跳轉。
C 提供了下列的迴圈控制語句:
- break語句
break;
C 語言中 break 語句有以下兩種用法:
1.當 break 語句出現在一個迴圈內時,迴圈會立即終止,且程式流將繼續執行緊接著迴圈的下一條語句。
2.它可用於終止 switch 語句中的一個 case。
如果您使用的是巢狀迴圈(即一個迴圈內巢狀另一個迴圈),break 語句會停止執行最內層的迴圈,然後開始執行該塊之後的下一行程式碼。
- continue語句
continue;
C 語言中的 continue 語句有點像 break 語句。但它不是強制終止,continue 會跳過當前迴圈中的程式碼,強迫開始下一次迴圈。
1.對於 for 迴圈,continue 語句執行後自增語句仍然會執行。
2.對於 while 和 do…while 迴圈,continue 語句重新執行條件判斷語句。
- goto語句
goto label;
..
.
label: statement;
在這裡,label 可以是任何除 C 關鍵字以外的純文字,它可以設定在 C 程式中 goto 語句的前面或者後面。
C 語言中的 goto 語句允許把控制無條件轉移到同一函式內的被標記的語句。
注意:
在任何程式語言中,都不建議使用 goto 語句。因為它使得程式的控制流難以跟蹤,使程式難以理解和難以修改。任何使用 goto 語句的程式可以改寫成不需要使用 goto 語句的寫法。
不建議使用!
2.3 無限迴圈
如果條件永遠不為假,則迴圈將變成無限迴圈。for 迴圈在傳統意義上可用於實現無限迴圈。由於構成迴圈的三個表示式中任何一個都不是必需的,可以將某些條件表示式留空來構成一個無限迴圈。
#include <stdio.h>
int main ()
{
for( ; ; )
{
printf("該迴圈會永遠執行下去!\n");
}
return 0;
}
當條件表示式不存在時,它被假設為真。也可以設定一個初始值和增量表示式,但是一般情況下,C 程式設計師偏向於使用 for(;? 結構來表示一個無限迴圈。
注意:按 Ctrl + C 鍵終止一個無限迴圈。
相關文章
- JS的判斷語句:判斷、迴圈JS
- C語言程式設計學習中while迴圈和do……while迴圈C語言程式設計While
- 《快學 Go 語言》第 3 課 —— 分支與迴圈Go
- javascript快速入門3--分支判斷與迴圈JavaScript
- Python之判斷迴圈語句Python
- C語言:判斷一個字串是否為迴文C語言字串
- R語言學習-迴歸診斷R語言
- python條件判斷與迴圈Python
- python迴圈語句判斷的使用Python
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- C語言:判斷閏年C語言
- C語言-for迴圈之窮舉法練習C語言
- Swift,迴圈及判斷Swift
- 3. Python中的分支判斷、迴圈Python
- 5.判斷和迴圈
- c# while迴圈_counter++_內含if判斷_breakC#While
- C語言判斷素數,判斷質素演算法C語言演算法
- C語言中迴圈語句while 中判斷條件出現 || 和 && 的區別C語言While
- 判斷水仙花數C語言C語言
- Clojure語法學習-迴圈
- C語言學習方法,怎麼學習C語言?C語言
- C語言實驗——for迴圈列印圖形(迴圈結構)(sdut oj)C語言
- WordPress開發入門06:條件判斷與迴圈
- 【C++學習筆記】for迴圈C++筆記
- Java學習中迴圈語句的學習Java
- c#學習----邏輯判斷C#
- 從零開始學習C++之if判斷語句C++
- PLSQL學習-【3迴圈結構】SQL
- Python學習筆記3(條件語句+迴圈語句)Python筆記
- 第04天C語言(15):for迴圈-注意點C語言
- 初學Python(3)迴圈語句Python
- C語言必須掌握的判斷題 | 4C語言
- C語言必須掌握的判斷題 | 10C語言
- C語言的判斷機器的大小端C語言
- 【c語言】判斷一個數是奇偶數C語言
- Python基礎:條件判斷 & 迴圈Python
- C語言goto語句以及用goto語句構成迴圈C語言Go
- Sass學習筆記–初步瞭解函式、運算、條件判斷及迴圈筆記函式