上期我們介紹了分支語句的兩種句型:if 語句和 switch case語句。 而在c語言中我們經(jīng)常會需要重復(fù)地進行一些指令,但是不斷的編輯重復(fù)代碼不僅很繁瑣,還容易出現(xiàn)bug,因此循環(huán)語句的使用就非常有必要。今天要介紹的就是循環(huán)語句相關(guān)的知識。
本期主要介紹三種循環(huán)語句
1) while語句
2) do while語句
-
for 語句
-
代碼規(guī)范化
- while語句
我們已經(jīng)掌握了 if 語句
if(條件)
語句;
當(dāng)條件滿足的情況下,if語句后面的語句執(zhí)行,否則不執(zhí)行。這個語句只會執(zhí)行一次。
但我們發(fā)現(xiàn)生活中很多實際的例子是:同一件事情我們需要循環(huán)執(zhí)行多次。
那如何去滿足上述需求呢?c語言中引入了:while語句,可以實現(xiàn)循環(huán)。
while語句的語法結(jié)構(gòu):
while(表達(dá)式)
循環(huán)語句;
還是使用一個代碼來解釋while循環(huán)的執(zhí)行過程:
#include
int main()
{
int i = 1;
while (i<=10)
{
printf("%d\\n", i);
i++;
}
return 0;
}
通過代碼可以看到,表達(dá)式i<=10在i==1的情況下判斷為真,所以循環(huán)體中的語句執(zhí)行,最后打印出1-10,那么我們可以知道,當(dāng)表達(dá)式為真時,while循環(huán)才會執(zhí)行,當(dāng)表達(dá)式為假,循環(huán)則不會執(zhí)行。那么如果表達(dá)式是一個非0的數(shù),循環(huán)會不會一直執(zhí)行呢?
#include
int main()
{
while (1)
{
printf("a");
}
return 0;
}
通過運行結(jié)果可以看到,當(dāng)表達(dá)式為1時,while循環(huán)會一直執(zhí)行循環(huán)體,也就變成了一個死循環(huán)。
while循環(huán)中的break:
#include
int main()
{
int i = 1;
while (i<=10)
{
printf("%d\\n", i);
if (i==5)
{
break;
}
i++;
}
return 0;
}
通過前面的代碼我們知道這個代碼是用于打印1-10,那么如果在i==5的時候加入break,會發(fā)生什么呢?
可以看到當(dāng)加入了break之后,當(dāng)執(zhí)行到i==5時,后面的循環(huán)并沒有執(zhí)行,那么可以理解為break語句的意思是終止循環(huán)。
while循環(huán)中的continue語句
#include
int main()
{
int i = 1;
while (i<=10)
{
if (i == 5)
{
continue;
}
printf("%d\\n", i);
i++;
}
return 0;
}
上面我們知道了break的作用,那么continue和break有什么區(qū)別呢,通過運行結(jié)果可以看到,當(dāng)輸出到4時,代碼進入了一個死循環(huán),而不是像break一樣終止,這是為什么呢?我來解釋一下,continue的意思為繼續(xù),當(dāng)代碼執(zhí)行到continue時,會跳過本次循環(huán)而繼續(xù)下一次,從代碼中看到,當(dāng)i==5時,循環(huán)跳過,那么i++不會執(zhí)行,i的值就不會改變,那么i==5回到表達(dá)式判斷5<10,進入循環(huán),那么這個時候i==5就又會觸發(fā)continue,然后i++又不能執(zhí)行,就造成i的值一直為5,一直跳過,就成了一個死循環(huán)。
- do while語句
語法結(jié)構(gòu):
do {
循環(huán)體語句;
} while(條件判斷語句);
執(zhí)行流程:
①執(zhí)行初始化語句
②執(zhí)行循環(huán)體語句
③執(zhí)行條件控制語句
④執(zhí)行條件判斷語句,看其結(jié)果是true還是false
如果是false,循環(huán)結(jié)束
如果是true,循環(huán)繼續(xù)執(zhí)行
⑤回到②繼續(xù)
do while語句與while很相似,只不過do while語句是先執(zhí)行循環(huán)體語句后進行條件判斷
此循環(huán)語句使用的較其他兩種較少,一般是在一些小游戲(猜數(shù)字,三子棋)中使用
- for循環(huán)
語法結(jié)構(gòu):
for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3)
{
語句;
}
首先要強調(diào)兩點:
-
表達(dá)式1、表達(dá)式2和表達(dá)式3之間是用分號“ ;”隔開的,千萬不要寫成逗號。
-
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
的后面千萬不要加分號,很多新手都會犯這種錯誤——會情不自禁地在后面加分號。因為 for 循環(huán)只能控制到其后的一條語句,而在C語言中分號也是一個語句——空語句。所以如果在后面加個分號,那么 for 循環(huán)就只能控制到這個分號,下面大括號里面的語句就不屬于 for 循環(huán)了。
執(zhí)行流程:
//求解表達(dá)式1。
//求解表達(dá)式2。若其值為真,則執(zhí)行 for 語句中指定的內(nèi)嵌語句,然后執(zhí)行第3步;若表達(dá)式2值為假,則結(jié)束循環(huán),轉(zhuǎn)到第5步。
//求解表達(dá)式3。
//轉(zhuǎn)回上面第2步繼續(xù)執(zhí)行。
//循環(huán)結(jié)束,執(zhí)行 for 語句下面的語句。
從這個執(zhí)行過程中可以看出,“表達(dá)式1”只執(zhí)行一次,循環(huán)是在“表達(dá)式2”“表達(dá)式3”和“內(nèi)嵌語句”之間進行的。
for循環(huán)的最簡單形式:
for (循環(huán)變量賦初值; 循環(huán)條件; 循環(huán)變量增值)
{
語句;
}
下面我們使用for循環(huán)寫一個簡單的代碼
例:<求 1+2+3+4+…+100 的總和。>
# include
int main(void)
{
int i;
int sum = 0; //
for (i=1; i<=100; ++i) //++是自加的意思, ++i相當(dāng)于i = i + 1
{
sum = sum + i; /*等價于sum += i;但是不建議這么寫, 因為sum = sum + i看起來更清楚、更舒服*/
}
printf("sum = %d\\n", sum);
return 0;
}
三種循環(huán)的區(qū)別:
for循環(huán)和while循環(huán)先判斷條件是否成立,然后決定是否執(zhí)行循環(huán)體(先判斷后執(zhí)行)
do…while循環(huán)先執(zhí)行一次循環(huán)體,然后判斷條件是否成立,是否繼續(xù)執(zhí)行循環(huán)體(先執(zhí)行后判斷)
- 代碼規(guī)范化
1)if、else、for、while、do 都只能控制到其后的一條語句,如果要控制多條語句必須加大括號 {}
。但基于代碼規(guī)范化,if、else、for、while、do 后面的執(zhí)行語句不論有多少行,就算只有一行也要加 {}
。
2)像 if、for、while 等關(guān)鍵字之后應(yīng)留一個空格再跟左括號 (
,以突出關(guān)鍵字。
此外上面的程序還有一個知識點要跟大家說一下:從功能上講, for(i=1; i<=100;++i)
完全可以寫成 for(i=1; i<101; ++i)
,而且建議大家盡量使用這種寫法。也就是說,循環(huán)語句的循環(huán)條件盡量寫成半開半閉的,不管是 for 循環(huán)還是 while 循環(huán)。
for(i=1; i<101; ++i)
實際上是 1≤i<101,是半開半閉的;而 for(i=1; i<=100; ++i)
實際上是 1≤i≤100,是全閉的。那么為什么建議使用半開半閉的呢?因為如果寫成 i<=100 的話,那么每次判斷的時候都要判斷兩次,即 i<100 和 i==100,而寫成 i<101 的話每次只需要判斷一次。
也許有人說:程序在執(zhí)行 i<=100 的時候不是將它轉(zhuǎn)換成 i<100||i==100 嗎?這樣由“短路或”的知識可知,如果前面的為真那么后面的不就不會執(zhí)行了嗎?這樣不也是判斷一次嗎?不是這樣的,系統(tǒng)是不會將 i<=100 轉(zhuǎn)換成 i<100||i==100 的,每次判斷的時候 i<100 和 i==100 都要判斷。
但是寫成半開半閉也有一個問題,就是會影響對代碼的理解。有時候?qū)懗扇]的區(qū)間理解起來才順暢,而寫成半開半閉反而不易理解,比如 `<=`右邊是變量或表達(dá)式的時候。這時候要以可讀性為第一要素,即哪種好理解就使用哪種?,F(xiàn)在 CPU 速度那么快,也不在乎那點效率。所以前面說“盡量”,沒有要求一定要那樣寫。
-
指令
+關(guān)注
關(guān)注
1文章
614瀏覽量
36133 -
C語言
+關(guān)注
關(guān)注
180文章
7628瀏覽量
139697 -
代碼
+關(guān)注
關(guān)注
30文章
4880瀏覽量
69999
發(fā)布評論請先 登錄
相關(guān)推薦
C語言中for循環(huán)的用法和應(yīng)用 C語言中for循環(huán)與while循環(huán)的區(qū)別

C語言循環(huán)結(jié)構(gòu)的使用方法

深入理解C語言:C語言循環(huán)控制

C語言入門教程-if語句和while循環(huán)
C語言教程之循環(huán)顯示隨機數(shù)問題
C++語言程序設(shè)計時如何控制語句?

C語言程序設(shè)計教程之如何設(shè)計循環(huán)結(jié)構(gòu)

C語言教程之使用循環(huán)結(jié)構(gòu)設(shè)計C語言程序的資料說明

從零開始跟我學(xué)C語言之分支結(jié)構(gòu)(下)
C語言的循環(huán)與分支

C語言基礎(chǔ)篇--選擇/順序/循環(huán)結(jié)構(gòu)

評論