C語言分支和循環詳解
前言
在本章,我會詳述分支和循環語句的概念與使用規范
一、什麼是語句
我們常在一條代碼的末尾加一個分號 “;” ,C語言中分號前的就是一條語句,例如
int a = 0;//這是一條語句 printf("%d\n",a);這又是一條語句
很簡單的概念。
那麼,如果單放一個分號,分號前什麼也不寫,算不算一條語句呢?
答:當然也算,這是需要註意的一個小點。
二、分支語句
分支語句又叫選擇結構,就比如你如果認真學習,你就能找到好工作;如果你整天打遊戲,那就等於你選擇瞭畢業後失業。是好好學習,還是打遊戲,這就是你的選擇,你的選擇會帶來相應的結果,這就是分支語句。
分支語句:
- if
- switch
1.if語句
if語句的結構:
if(條件) 語句(帶來的結果); else 語句(帶來的結果);
如果滿足if括號裡的條件,則實行if下面的語句,否則執行else下面的語句。
上面是一種結構,還有一種叫多分支結構:
if(條件) (語句); else if(條件) (語句); else(條件) (語句);
其實就是在上一種結構上,多瞭一個選擇else if。
接下來我舉一個完整的例子,以體重為例
#include <stdio.h> int main() { int weight = 0; scanf(“%d\n”,&weigth); if(weight<100) { printf("瘦子"); } else if(weight>100 && weight<150) { printf("正常") }`在這裡插入代碼片` else { printf("偏重") } return 0; }
這裡就是讓你輸入體重
- 如果滿足if(體重小於100),那麼輸出:瘦子
- 如果滿足else if()體重在100至150之間,那麼輸出:正常
註意:當我們想表達體重大於100,小於150,我們通常會寫(100<weight<150),但在C語言中,這是錯誤的。正確書寫應該為(weight>100 && weight<150)。
這個符號&&成為邏輯與運算符,隻有當兩個式子都為真的時候,它才會表達為真,與高中我們學的“或且非”的原理一樣。
在我們這個例子就是,當weight同時滿足小於150和大於100的時候,它才會判斷為真,然後輸出結果
- 如果上面都不滿足,就輸出else的語句:偏重。
除此之外,還有個新手常犯的錯誤,我們看以下代碼
#include <stdio.h> int main() { int a = 0;/第一行 int b = 2;/第二行 if(a == 1)/第三行 if(b == 2)/第四行 printf("好的\n");/第五行 else/第六行 printf("不好\n");/第七行 return 0;
可見第三行 if 和第六行的 else 是對齊的,想當然的以為這兩個是對應的,如果是這兩個對應的話,程序執行的步驟應該是
1. 令a = 0,b = 2
2. 到第三行,判斷a是否為2,判斷為否
3. 執行else打印“不好”
但是當我們執行會發現,它什麼都沒打印。
因為,else 和 if 對應的原則是,就近原則,其實第六行和第四行它們是挨最近的,所以是這兩處的else和if對應。 因此,程序執行的步驟應該是
1. 令a = 0,b = 2
2. 判斷a是否為1,判斷為否
3. 下一級的if else語句不執行,直接return 0
所以我們平時為避免這類錯誤,應當註意使用大括號“{ }”
#include <stdio.h> int main() { int a = 0; int b = 2; if(a == 1) { if(b == 2) printf("好的\n"); } else { printf("不好\n"); } return 0;
這樣,它打印出來的就是“不好”。
2.switch語句
switch也是一直分支語句,常用於多分支,例如你輸入1,程序就輸出一月,你輸入2,程序就輸出二月,以此類推,用 if 語句寫比較麻煩,所以就誕生瞭switch語句。
switch語句:
switch(整型常量表達式) { 語句項 }
語句項又是什麼呢?
語句項是一些case語句,放在例子中為比較好理解
#include <stdio.h> int main() { int day = 1 ; switch(day) { case 1: printf("一月\n"); break; case 2: printf("二月\n"); break; case 3: printf("三月\n"); break; case 4: printf("四月\n"); break; case 5: printf("五月\n"); break; case 6: printf("六月\n"); break; case 7: printf("七月\n"); break; } return 0; }
該程序執行過程
1.int day = 1 這個值可以隨機
2.進入switch語句
3.判斷day的值與哪個case相同
4.輸出該case下的語句
此外,該代碼中的break,為終止語句
何為終於語句?
答: 就是程序執行到break,就終止瞭,很好理解。在switch語句中,實際上程序是判斷執行哪個case,判斷到瞭,就直接跳到那個case那邊,之後接著執行下面的代碼,是不會終止的。就等於十條斑馬線,你一跳,跳到瞭第三條,但之後你還要走完後面的七條。
所以break語句在這裡的作用就是你跳到瞭第三條斑馬線,就讓你停下來,不讓你走瞭
還有一種情況:如果表達的值與所有case標簽的值都不匹配怎麼辦?
答:其實不匹配在C語言中也不會被報錯,隻是什麼都不輸出。
當 switch表達式的值並不匹配所有case標簽的值時,我們可以用default子句 來規定其輸出什麼,其實和case語句類似
default: { } break;
三、循環語句
循環語句有以下幾種
- while
- for
- do while
1.while循環
循環,顧名思義就是程序去重復執行一個指令,我們可以用此非常簡短的寫出我們需要的東西。
我們發現生活中很多的實際的例子是:同一件事情我們需要完成很多次。
那我們怎麼做呢? C語言中給我們引入瞭:while語句,可以實現循環。
while的語法結構
while(表達式) 循環語句;
當我們一直循環,直到滿足瞭表達式所規定的條件,程序才會跳出。
比如我們實現在屏幕上打印1-10的數字
#include <stdio.h> int main() { int i = 1; while(i<=10) { printf("%d ", i); i = i+1; } return 0; }
它運行的步驟是
1.令i = 1
2.判斷 i 是否小於等於10
3.判斷為真,則進入循環。
4.先打印 i 的數值
5.再i + 1
6.再判斷 i 是否小於等於10
7.以此類推
2.循環語句中的break與continue
break作用:
break在while語句中,起直接終止所有循環的作用。
continue作用:
continue在while語句中,起終止本次循環的作用,就是在本次循環中,碰到continue後面的語句就不執行,直接跳到while判斷。
舉個例子能更好理解
#include <stdio.h> int main() { int i = 1; while(i<=10) { if(i == 5) continue; printf("%d ", i); i = i+1; } return 0; }
大傢猜猜此時程序運行之後 打印的值是多少?
答案是:1、2、3、4
該程序執行步驟:
1.令 i = 1
2.判斷 i 是否小於等於10
3.判斷為真,進入循環
4.在循環內判斷 i 是否等於 5
5.不等於 則跳過 if 的語句項continue
6.打印 i 的值
7.i + 1
8.再次循環
9.當循環到i 等於 5 的時候 進入 if 語句
10.執行continue 跳過本次循環(不執行後面的打印和 i + 1)
11.直接判斷 i 是否小於等於 10 (此時 i 還等於5)
12.再次進入 if 重復 9、10、11的動作
相信這樣大傢能夠更加理解continue的作用。
3.for循環
為什麼有瞭 while 循環還要多個 for 循環呢?
首先我們看for循環的語法:
for(表達式1,表達式2,表達式3) 循環語句:
表達式1
依舊舉個例子闡述:
(打印1-10的數字)
#include <stdio.h> int main() { int i = 0; //for(i=1/*初始化*/; i<=10/*判斷部分*/; i++/*調整部分*/) for(i=1; i<=10; i++) { printf("%d ", i); } return 0; }
這段代碼首先將 i 初始化為1,之後判斷 i 是否小於等於10,是則進入循環,執行完整個代碼之後再i++(i自增1),再重復上述動作直到 i 大於10停止循環。
那麼可見for與while循環是類似的,但我們應該在什麼時候用for什麼時候用while呢?
答:對一個數組進行循環時,如果每輪循環都是在循 環處理完後才將循環變量增加的話,使用for循環比較方便。
如果循環處理的過程中就要將循環變量增加時,則使用while循環比較方便。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!