C語言(二) 分支語句結構

2021-08-15 05:05:20 字數 3517 閱讀 8042

今天我們來看一下c語言中的分支語言結構,它包括if語句,switch語句和goto語句

什麼是語句?

c語言中由乙個分號; 隔開的就是一條語句。

比如:

printf("hehe");

1+2;

if語句的語法

if(表示式)

語句;if(表示式)

語句1;

else

語句2;

解釋:如果表示式的結果為真,則語句1執行,否則表示式2執行。

在c語言中如何表示真假?

0表示假,非0表示真。

如果條件成立,要執行多條語句,怎應該使用**塊。

#include int main()

else

return 0;

}

這裡的一對 就是乙個**塊。

懸空else

當你寫了這個**:

#include int main()

改正:

//適當的使用{}可以使**的邏輯更加清楚。

#include int main()

else

return 0;

}

if語句的書寫規範

>>bool值和零比較

bool型別是在c99標準中才引入的乙個語法特點,用的很少,一般情況下我們都

使用整形變數來充當乙個bool變數的角色。

int flag;

if (flag == true)

if (flag == false)

這樣寫行嗎?合理嗎?

因為c語言中bool值的語義是:0表示假,非0表示真;

#define false 0

#define true 1

但是flag是個整數,可以被賦值為2或者3或者其他非0值表示真,而我們知道true,false這些識別符號一定被定義為乙個固定的值,這個時候使用if(flag== true) 這樣的語法會出現判斷失敗的情況。比如:flag本來是5,表示真,但是這裡和true(1)比較的時候,表示式為假了:邏輯錯誤。所以上面的寫法是錯誤的。

正確的寫法:

int flag;

if (flag)//如果是真

if (!flag)//如果是假

>>整形變數和零比較

如果乙個變數就是整形(不表示真假),那這個變數如何跟0比較?

int num = 10;

if (num == 0)

不要寫成:
int num = 10;

if (num)

>>指標和零進行比較

//**1

int* p;

*p = 20;

//**2

int *p = null;

if (p != null)

>>浮點型和零進行比較

int main()

因為浮點數在記憶體中的儲存方式使得,有些浮點數在記憶體中無法精確的儲存,這樣就必然有精度的丟失。一旦丟失就可能計算不夠準確。無法使用 == 直接判斷兩個浮點數相當。那該怎麼做呢?設定乙個能接受的精度,保證誤差在精度範圍內就可以了。那判斷乙個浮點數是不是等於0.0的xie寫法如下:

#define exp 0.0000000001

float f = 0.0000001;

if ((f > -exp) && (f < exp))

推廣:判斷乙個浮點數是否等於21.0

#define exp 0.0000000001

float f = 0.0000001;

if (((f - 21.0) > -exp) && ((f - 21.0) < exp))

switch語句也是一種分支語句。常常用於多分支的情況。

比如:1. 輸入1,輸出星期一

2. 輸入2,輸出星期二

3. 輸入3,輸出星期三

4. 輸入4,輸出星期四

5. 輸入5,輸出星期五

6. 輸入6,輸出星期六

7. 輸入7,輸出星期七

那我沒寫成if...else if ...else if 的形式太複雜,那我們就得有不一樣的語法形式。這就是switch 語句。

switch (常量表示式)

而語句項是什麼呢?

//是一些case語句:

//如下:

case 整形常量:

語句;

>>break語句

在switch語句中,我們沒法直接實現分支,搭配break使用才能實現真正的分支。

比如:

#include int main()

return 0;

}

有時候我們的需求變了:

1. 輸入15

輸出的是「werkday」;

2. 輸入67

輸出「weekend」

所以我們的**就應該這樣實現了:

#include int main()

return 0;

}

break語句的實際效果是把語句列表劃分為不同的部分。

程式設計好習慣

在最後乙個 case 語句的後面加上一條 break語句。(之所以這麼寫是可以避免出現在以前的最後乙個 case 語句後面忘了新增

break語句)。

>>default子句

如果表達的值域所有的case標籤的值都不匹配怎麼辦?

其實也沒什麼 —所有的語句都被跳過而已。程式並不會終止,也不會報錯,因為這種情況在c中並不認為適合錯誤。但是,如果你並不想忽略不匹配所有標籤的表示式的值時該怎麼辦呢?你可以在語句列表中增加一條default子句,把下面的標籤default:

寫在任何乙個case標籤可以出現的位置。當 switch表示式的值並不匹配所有case標籤的值時,這個default子句後面的語句就會執行。所以,每個switch語句中只能出現一條default子句。但是它可以出現在語句列表的任何位置,而且語句流會像貫穿乙個case標籤一樣貫穿default子句。

c語言中提供了可以隨意濫用的 goto語句和標記跳轉的標號。從理論上 goto語句是沒有必要的,實踐中沒有goto語句也可以很容易的寫出**。但是某些場合下goto語句還是用得著的,最常見的用法就是終止程式在某些深度巢狀的結構的處理過程,例如一次跳出兩層或多層迴圈。這種情況使用break是達不到目的的。

for (...)

for (...)}…

error :

// 處理錯誤情況

C語言總結二(分支與迴圈語句)

本次我們要討論的便是分支和迴圈語句,在c語言中我們用 作為一條語句的結束標誌,在c語言中最重要的便是語句了,通過一條條語句的結合,我們才能實現一定的邏輯。分支語句 if例 if 條件1 else if 條件2 else 注 if else 語句較容易理解,條件滿足執行語句,不滿足執行else語句,一...

Linux Shell(二) 分支語句,迴圈語句

在linux的shell中if 語句通過關係運算子判斷表示式的真假來決定執行哪個分支 if else if expression then fi如果expression返回true,then後邊的語句將會被執行 如果返回false,不會執行任何語句。最後必須以fi來結尾閉合if,fi就是if倒過來拼...

《C語言程式設計》一 3 2 二分支選擇結構

使用二分支結構的形式主要有兩種,由使用基本的if語句實現,即if else語句和省略else的if語句。在if語句中的條件表示式可由關係表示式或邏輯表示式組成。因此在講解if語句之前,首先介紹一下關係表示式和邏輯表示式。例3 1的程式中,if year 4 0 year 100 0 year 400...