以下文章來(lái)源于:公_眾_號(hào)開(kāi)源電子網(wǎng)
前言
在C語(yǔ)言中,按照程序的執(zhí)行流程不同,分為順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。多么復(fù)雜的邏輯事物都是由這三個(gè)結(jié)構(gòu)組成。
順序結(jié)構(gòu)
順序結(jié)構(gòu)是最簡(jiǎn)單的一種流程結(jié)構(gòu),它采用自上而下的方式逐條執(zhí)行各語(yǔ)句。簡(jiǎn)易順序結(jié)構(gòu)如下所示:
![pYYBAGJHtWuAAAbSAAA5cJxcb7Q569.png](https://file.elecfans.com/web2/M00/3B/1C/pYYBAGJHtWuAAAbSAAA5cJxcb7Q569.png)
分支結(jié)構(gòu)
分支結(jié)構(gòu),又稱(chēng)選擇結(jié)構(gòu),可以控制程序的部分流程是否被執(zhí)行,或者是從多條執(zhí)行路徑種選擇一條來(lái)執(zhí)行。在C語(yǔ)言中有兩種選擇語(yǔ)句:①if語(yǔ)句,用來(lái)實(shí)現(xiàn)兩個(gè)分支的選擇結(jié)構(gòu)②switch語(yǔ)句,用來(lái)實(shí)現(xiàn)多分支的選擇結(jié)構(gòu)。
選擇結(jié)構(gòu)if,具體用法如表格所示:
if (表達(dá)式) {語(yǔ)句} | if (表達(dá)式) {語(yǔ)句1} else {語(yǔ)句2} |
if (表達(dá)式) { if (表達(dá)式) {語(yǔ)句} } else {語(yǔ)句} | if (表達(dá)式) {語(yǔ)句} else if (表達(dá)式) {語(yǔ)句} else {語(yǔ)句} |
選擇結(jié)構(gòu)switch,具體使用格式如下:
switch(整型表達(dá)式)
{
case整型常量表達(dá)式1:
[語(yǔ)句1;break;]
case整型常量表達(dá)式2:
[語(yǔ)句2;break;]
case整型常量表達(dá)式3:
[語(yǔ)句3;break;]
…
[default:
語(yǔ)句n;break;]
}
在程序運(yùn)行時(shí),首先會(huì)計(jì)算整型表達(dá)式的值,然后用該值與后面的所有case標(biāo)簽進(jìn)行一一匹配(即查看該值是否與case標(biāo)簽的表達(dá)式的值相同)。如果有匹配的case標(biāo)簽,則從該case標(biāo)簽起,執(zhí)行后續(xù)的語(yǔ)句,直至遇到break語(yǔ)句為止。如果沒(méi)有匹配到case標(biāo)簽,則從default標(biāo)簽起,執(zhí)行后續(xù)的語(yǔ)句,直到遇到break為止。
這里特別需要注意:①case后帶的表達(dá)式一定要是常數(shù),并且是整型。②在語(yǔ)句后面通常是有break關(guān)鍵字。③ 最后一般有default,即前面case沒(méi)有一個(gè)符合的情況,就會(huì)調(diào)到default里執(zhí)行。雖然說(shuō)語(yǔ)法上可以允許沒(méi)有default,但是為了完整,建議是需要的。
那么if和switch這兩種選擇結(jié)構(gòu)有啥區(qū)別呢?
if語(yǔ)句比較適用在對(duì)比條件比較復(fù)雜的且分支比較少的情況下使用;switch語(yǔ)句則是適用在對(duì)比條件比較簡(jiǎn)單且分支比較多的情況下使用;正常情況下,先考慮能不能用switch語(yǔ)句,假如不滿足使用需求,則使用if語(yǔ)句。當(dāng)然,不管黑貓白貓捉到老鼠的就是好貓,能實(shí)現(xiàn)效果即可。
循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)就是重復(fù)執(zhí)行一個(gè)語(yǔ)句塊,直到不滿足某個(gè)條件為止。在C語(yǔ)言中有三種循環(huán)語(yǔ)句:①while語(yǔ)句②do while語(yǔ)句③for語(yǔ)句
while語(yǔ)句也稱(chēng)while循環(huán),具體使用格式如下:
while(表達(dá)式)
語(yǔ)句
while語(yǔ)句根據(jù)小括號(hào)內(nèi)表達(dá)式的值來(lái)決定是否執(zhí)行語(yǔ)句,當(dāng)表達(dá)式的值為假時(shí),循環(huán)結(jié)束,語(yǔ)句不會(huì)被執(zhí)行;假如表達(dá)式的值為真,語(yǔ)句被執(zhí)行,然后會(huì)再次判斷表達(dá)式的值,如此反復(fù),直至表達(dá)式的值為假。
do while語(yǔ)句也稱(chēng)do while循環(huán),具體使用格式如下:
do
語(yǔ)句
while(表達(dá)式)
從結(jié)構(gòu)上,由“do”關(guān)鍵字開(kāi)頭,緊接著是語(yǔ)句也就是循環(huán)體了,最后是while關(guān)鍵字和表達(dá)式。do while語(yǔ)句是先執(zhí)行循環(huán)體,然后再檢查條件是否成立,若成立,再執(zhí)行循環(huán)體,這就是跟while語(yǔ)句不同。
for語(yǔ)句,相對(duì)前面兩個(gè)循環(huán)語(yǔ)句復(fù)雜一點(diǎn),具體使用格式如下:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語(yǔ)句
相比前面的while和do while語(yǔ)句,for語(yǔ)句的表達(dá)式有三個(gè),表達(dá)式之間用‘;’隔開(kāi),這三個(gè)表達(dá)式的作用和執(zhí)行時(shí)期是不一樣的,具體情況如下表:
表達(dá)式 | 作用 | 執(zhí)行時(shí)期 |
表達(dá)式1 | 通常在這個(gè)地方對(duì)循環(huán)變量進(jìn)行初始化或賦值 | 開(kāi)始時(shí)執(zhí)行1次 |
表達(dá)式2 | 表達(dá)式的值為真時(shí)執(zhí)行循環(huán)體,為假時(shí)結(jié)束for語(yǔ)句 | 循環(huán)體執(zhí)行前 |
表達(dá)式3 | 通常在這個(gè)地方對(duì)循環(huán)變量進(jìn)行修改,通常是加減操作 | 循環(huán)體執(zhí)行后 |
具體執(zhí)行流程:在for語(yǔ)句被執(zhí)行前,首先會(huì)執(zhí)行表達(dá)式1,然后再檢查表達(dá)式2的值:假如為假,不執(zhí)行循環(huán)體,結(jié)束for語(yǔ)句;假如為真,則執(zhí)行循環(huán)體語(yǔ)句。執(zhí)行完循環(huán)語(yǔ)句后,再去執(zhí)行表達(dá)式3,并再次去檢查表達(dá)式2的值,如此反復(fù),直到表達(dá)式2的值為假,結(jié)束for語(yǔ)句。
這三個(gè)循環(huán)語(yǔ)句,哪種情況用哪個(gè)好呢?
如果程序中固定了循環(huán)的次數(shù),那么就可以采用for語(yǔ)句。如果程序中必須執(zhí)行一次程序,那么就可以使用do while語(yǔ)句。除了以上兩種情況,就可以使用while語(yǔ)句。
-
單片機(jī)
+關(guān)注
關(guān)注
6044文章
44627瀏覽量
638969 -
嵌入式
+關(guān)注
關(guān)注
5095文章
19189瀏覽量
307982 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7615瀏覽量
137833 -
電子技術(shù)
+關(guān)注
關(guān)注
18文章
920瀏覽量
56340
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
分析C語(yǔ)言代碼結(jié)構(gòu)的設(shè)計(jì)問(wèn)題
Simcenter Micred Power Tester功率循環(huán)測(cè)試儀
![Simcenter Micred Power Tester功率<b class='flag-5'>循環(huán)</b>測(cè)試儀](https://file1.elecfans.com/web2/M00/05/C8/wKgZomberEOAN841AAAsGK6TY38525.png)
深入理解C語(yǔ)言:循環(huán)語(yǔ)句的應(yīng)用與優(yōu)化技巧
![深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>循環(huán)</b>語(yǔ)句的應(yīng)用與優(yōu)化技巧](https://file1.elecfans.com/web2/M00/FC/CD/wKgZomaWI5uASgBaAABuQHdMO4I302.png)
結(jié)構(gòu)體成員的順序會(huì)影響結(jié)構(gòu)體的大小嗎
如何選擇適合自己的編程語(yǔ)言
C語(yǔ)言和C++中結(jié)構(gòu)體的區(qū)別
C語(yǔ)言與Java語(yǔ)言的對(duì)比
計(jì)算機(jī)程序的三種基本控制結(jié)構(gòu)是什么
技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:掌握程序結(jié)構(gòu)知識(shí)
![技術(shù)干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:掌握程序<b class='flag-5'>結(jié)構(gòu)</b>知識(shí)](https://file1.elecfans.com/web2/M00/FC/CD/wKgZomaWI5uASgBaAABuQHdMO4I302.png)
【《大語(yǔ)言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)篇
PLC常用編程語(yǔ)言有哪些
嵌入式中C語(yǔ)言結(jié)構(gòu)體基本實(shí)現(xiàn)
![嵌入式中<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>結(jié)構(gòu)</b>體基本實(shí)現(xiàn)](https://file1.elecfans.com//web2/M00/E4/42/wKgZomY_FOKAdlRXAADOabNodfI522.jpg)
C語(yǔ)言結(jié)構(gòu)體史上最詳細(xì)的講解【軟件干貨】
使用 MISRA C++:2023? 避免基于范圍的 for 循環(huán)中的錯(cuò)誤
![使用 MISRA <b class='flag-5'>C</b>++:2023? 避免基于范圍的 for <b class='flag-5'>循環(huán)</b>中的錯(cuò)誤](https://file1.elecfans.com/web2/M00/A9/66/wKgZomUl7m-AHJX6AABuJjgxs14678.png)
嵌入式系統(tǒng)中C語(yǔ)言結(jié)構(gòu)體的基礎(chǔ)實(shí)現(xiàn)與應(yīng)用
![嵌入式系統(tǒng)中<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>結(jié)構(gòu)</b>體的基礎(chǔ)實(shí)現(xiàn)與應(yīng)用](https://file1.elecfans.com/web2/M00/C4/E6/wKgaomXv9r6Aaj6DAAAYJ3PfWAU110.jpg)
評(píng)論