C語言分支和循環(huán)詳解
前言
在本章,我會詳述分支和循環(huán)語句的概念與使用規(guī)范
一、什么是語句
我們常在一條代碼的末尾加一個分號 “;” ,C語言中分號前的就是一條語句,例如
int a = 0;//這是一條語句
printf("%d\n",a);這又是一條語句
很簡單的概念。
那么,如果單放一個分號,分號前什么也不寫,算不算一條語句呢?
答:當(dāng)然也算,這是需要注意的一個小點。
二、分支語句
分支語句又叫選擇結(jié)構(gòu),就比如你如果認(rèn)真學(xué)習(xí),你就能找到好工作;如果你整天打游戲,那就等于你選擇了畢業(yè)后失業(yè)。是好好學(xué)習(xí),還是打游戲,這就是你的選擇,你的選擇會帶來相應(yīng)的結(jié)果,這就是分支語句。
分支語句:
- if
- switch
1.if語句
if語句的結(jié)構(gòu):
if(條件)
語句(帶來的結(jié)果);
else
語句(帶來的結(jié)果);
如果滿足if括號里的條件,則實行if下面的語句,否則執(zhí)行else下面的語句。
上面是一種結(jié)構(gòu),還有一種叫多分支結(jié)構(gòu):
if(條件) (語句); else if(條件) (語句); else(條件) (語句);
其實就是在上一種結(jié)構(gòu)上,多了一個選擇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之間,那么輸出:正常
注意:當(dāng)我們想表達(dá)體重大于100,小于150,我們通常會寫(100<weight<150),但在C語言中,這是錯誤的。正確書寫應(yīng)該為(weight>100 && weight<150)。
這個符號&&成為邏輯與運算符,只有當(dāng)兩個式子都為真的時候,它才會表達(dá)為真,與高中我們學(xué)的“或且非”的原理一樣。
在我們這個例子就是,當(dāng)weight同時滿足小于150和大于100的時候,它才會判斷為真,然后輸出結(jié)果
- 如果上面都不滿足,就輸出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 是對齊的,想當(dāng)然的以為這兩個是對應(yīng)的,如果是這兩個對應(yīng)的話,程序執(zhí)行的步驟應(yīng)該是
1. 令a = 0,b = 2
2. 到第三行,判斷a是否為2,判斷為否
3. 執(zhí)行else打印“不好”
但是當(dāng)我們執(zhí)行會發(fā)現(xiàn),它什么都沒打印。
因為,else 和 if 對應(yīng)的原則是,就近原則,其實第六行和第四行它們是挨最近的,所以是這兩處的else和if對應(yīng)。 因此,程序執(zhí)行的步驟應(yīng)該是
1. 令a = 0,b = 2
2. 判斷a是否為1,判斷為否
3. 下一級的if else語句不執(zhí)行,直接return 0
所以我們平時為避免這類錯誤,應(yīng)當(dāng)注意使用大括號“{ }”
#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(整型常量表達(dá)式)
{
語句項
}
語句項又是什么呢?
語句項是一些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;
}
該程序執(zhí)行過程
1.int day = 1 這個值可以隨機
2.進(jìn)入switch語句
3.判斷day的值與哪個case相同
4.輸出該case下的語句
此外,該代碼中的break,為終止語句
何為終于語句?
答: 就是程序執(zhí)行到break,就終止了,很好理解。在switch語句中,實際上程序是判斷執(zhí)行哪個case,判斷到了,就直接跳到那個case那邊,之后接著執(zhí)行下面的代碼,是不會終止的。就等于十條斑馬線,你一跳,跳到了第三條,但之后你還要走完后面的七條。
所以break語句在這里的作用就是你跳到了第三條斑馬線,就讓你停下來,不讓你走了
還有一種情況:如果表達(dá)的值與所有case標(biāo)簽的值都不匹配怎么辦?
答:其實不匹配在C語言中也不會被報錯,只是什么都不輸出。
當(dāng) switch表達(dá)式的值并不匹配所有case標(biāo)簽的值時,我們可以用default子句 來規(guī)定其輸出什么,其實和case語句類似
default:
{
}
break;
三、循環(huán)語句
循環(huán)語句有以下幾種
- while
- for
- do while
1.while循環(huán)
循環(huán),顧名思義就是程序去重復(fù)執(zhí)行一個指令,我們可以用此非常簡短的寫出我們需要的東西。
我們發(fā)現(xiàn)生活中很多的實際的例子是:同一件事情我們需要完成很多次。
那我們怎么做呢? C語言中給我們引入了:while語句,可以實現(xiàn)循環(huán)。
while的語法結(jié)構(gòu)
while(表達(dá)式) 循環(huán)語句;
當(dāng)我們一直循環(huán),直到滿足了表達(dá)式所規(guī)定的條件,程序才會跳出。
比如我們實現(xiàn)在屏幕上打印1-10的數(shù)字
#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.判斷為真,則進(jìn)入循環(huán)。
4.先打印 i 的數(shù)值
5.再i + 1
6.再判斷 i 是否小于等于10
7.以此類推
2.循環(huán)語句中的break與continue
break作用:
break在while語句中,起直接終止所有循環(huán)的作用。
continue作用:
continue在while語句中,起終止本次循環(huán)的作用,就是在本次循環(huán)中,碰到continue后面的語句就不執(zhí)行,直接跳到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
該程序執(zhí)行步驟:
1.令 i = 1
2.判斷 i 是否小于等于10
3.判斷為真,進(jìn)入循環(huán)
4.在循環(huán)內(nèi)判斷 i 是否等于 5
5.不等于 則跳過 if 的語句項continue
6.打印 i 的值
7.i + 1
8.再次循環(huán)
9.當(dāng)循環(huán)到i 等于 5 的時候 進(jìn)入 if 語句
10.執(zhí)行continue 跳過本次循環(huán)(不執(zhí)行后面的打印和 i + 1)
11.直接判斷 i 是否小于等于 10 (此時 i 還等于5)
12.再次進(jìn)入 if 重復(fù) 9、10、11的動作
相信這樣大家能夠更加理解continue的作用。
3.for循環(huán)
為什么有了 while 循環(huán)還要多個 for 循環(huán)呢?
首先我們看for循環(huán)的語法:
for(表達(dá)式1,表達(dá)式2,表達(dá)式3) 循環(huán)語句:
表達(dá)式1
依舊舉個例子闡述:
(打印1-10的數(shù)字)
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判斷部分*/; i++/*調(diào)整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
這段代碼首先將 i 初始化為1,之后判斷 i 是否小于等于10,是則進(jìn)入循環(huán),執(zhí)行完整個代碼之后再i++(i自增1),再重復(fù)上述動作直到 i 大于10停止循環(huán)。
那么可見for與while循環(huán)是類似的,但我們應(yīng)該在什么時候用for什么時候用while呢?
答:對一個數(shù)組進(jìn)行循環(huán)時,如果每輪循環(huán)都是在循 環(huán)處理完后才將循環(huán)變量增加的話,使用for循環(huán)比較方便。
如果循環(huán)處理的過程中就要將循環(huán)變量增加時,則使用while循環(huán)比較方便。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++標(biāo)準(zhǔn)庫學(xué)習(xí)之weak_ptr智能指針用法詳解
這篇文章主要為大家詳細(xì)介紹了C++標(biāo)準(zhǔn)庫中weak_ptr智能指針用法的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
C語言內(nèi)存管理及初始化細(xì)節(jié)示例詳解
這篇文章主要為大家介紹了C語言內(nèi)存管理及初始化細(xì)節(jié)示例的詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
C語言詳細(xì)分析宏定義與預(yù)處理命令的應(yīng)用
宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的替換。字符串中可以含任何字符,可以是常數(shù),也可以是表達(dá)式,預(yù)處理程序?qū)λ蛔魅魏螜z查,如有錯誤,只能在編譯已被宏展開后的源程序時發(fā)現(xiàn)2022-07-07
C語言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)
鏈表是線性表的鏈?zhǔn)酱鎯Ψ绞?。鏈表的?nèi)存是不連續(xù)的,前一個元素存儲地址的下一個地址中存儲的不一定是下一個元素。小編今天就將帶大家深入了解一下鏈表,快來學(xué)習(xí)吧2021-12-12

