C語言中的循環(huán)
其特點(diǎn)是,在給定條件成立時(shí),反復(fù)執(zhí)行某程序段, 直到條件不成立為止夯巷。
給定的條件稱為"循環(huán)條件",反復(fù)執(zhí)行的程序段稱為"循環(huán)體"
- 循環(huán)分為三種循環(huán)
while循環(huán),do...while循環(huán),for循環(huán).三種都是能實(shí)現(xiàn)共同的功能,不同的方法有不同的用法每種都需要掌握.
)int a = 1; while(a > 3){ printf("我是a"); a++; }(
)這段代碼就是證明了我的說法,我一開始定義一個(gè)a值為1,然后走到while循環(huán)()里僅需判斷a是否大于3,不大于就開始執(zhí)行輸出語句,然后a++,a就變成了2,繼續(xù)走到while循環(huán)的()進(jìn)行判斷2還是不大于3繼續(xù)執(zhí)行輸出語句,直到條件不成立了這個(gè)循環(huán)也就結(jié)束了
執(zhí)行流程:1.首先會判定"循環(huán)控制條件"是否為真, 如果為假直接跳到循環(huán)語句后面
2.如果"循環(huán)控制條件"為真, 執(zhí)行一次循環(huán)體, 然后再次判斷"循環(huán)控制條件"是否為真, 為真繼續(xù)執(zhí)行循環(huán)體,為假跳出循環(huán)
3.重復(fù)以上操作, 直到"循環(huán)控制條件"為假為止
while循環(huán)注意點(diǎn)
- 任何數(shù)值都有真假性--> (
) while (1) { // 死循環(huán) printf("發(fā)射子彈~嗶嗶嗶嗶\n"); // 沒有能夠讓循環(huán)結(jié)束的語句 }(
) - 上面就是一個(gè)死循環(huán),while里面的判斷是1,表示永遠(yuǎn)為真,然后就會一直執(zhí)行里面的語句不會停止
- 當(dāng)while后面只有一條語句時(shí),while后面的大括號可以省略
()int a = 1;while(a < 3)printf("我是a");(
)
如果while省略了大括號, 那么后面不能定義變量
do...while循環(huán)
- 先執(zhí)行程序在進(jìn)行判斷,一般while能做到的do...while也能做到,do...while能做到的,while也能做到;
do{
printf("我是先執(zhí)行的")
}while(判斷的條件是否要進(jìn)行循環(huán));
這就是do...while語句的基本結(jié)構(gòu)
do-while循環(huán)執(zhí)行流程
1.首先不管while中的條件是否成立, 都會執(zhí)行一次"循環(huán)體"
2.執(zhí)行完一次循環(huán)體,接著再次判斷while中的條件是否為真, 為真繼續(xù)執(zhí)行循環(huán)體,為假跳出循環(huán)
3.重復(fù)以上操作, 直到"循環(huán)控制條件"為假為止
while和dowhile應(yīng)用場景
絕大多數(shù)情況下while和dowhile可以互換, 所以能用while就用while
無論如何都需要先執(zhí)行一次循環(huán)體的情況, 才使用dowhile
do while 曾一度提議廢除,但是他在輸入性檢查方面還是有點(diǎn)用的
for循環(huán)
- for循環(huán)是所有循環(huán)里面用的最多的,也是最好用的一個(gè),企業(yè)開發(fā)中一般能用for循環(huán)就盡量用for循環(huán)
()for(初始化表達(dá)式;循環(huán)條件表達(dá)式;循環(huán)后的操作表達(dá)式){循環(huán)體中的語句;}(
)
例如:for(int a = 1;a < 3;a ++){printf("a");}初始化一個(gè)表達(dá)式a等于1,然后進(jìn)行循環(huán)條件判斷,1小于3是對的然后進(jìn)行輸出,輸出完后執(zhí)行循環(huán)后的表達(dá)式,然后在進(jìn)行判斷a是否小于3如果小于就繼續(xù)執(zhí)行,直到哪次條件不滿足了就不會輸出了
- for循環(huán)執(zhí)行流程
- 首先執(zhí)行"初始化表達(dá)式"恐锦,而且在整個(gè)循環(huán)過程中,只會執(zhí)行一次初始化表達(dá)式
接著判斷"循環(huán)條件表達(dá)式"是否為真贤牛,為真執(zhí)行循環(huán)體中的語句
循環(huán)體執(zhí)行完畢后,接下來會執(zhí)行"循環(huán)后的操作表達(dá)式"沽翔,然后再次判斷條件是否為真,為真繼續(xù)執(zhí)行循環(huán)體,為假跳出循環(huán)
重復(fù)上述過程,直到條件不成立就結(jié)束for循環(huán)
- 最簡單的死循環(huán)for(;;);
for循環(huán)的優(yōu)點(diǎn)在于節(jié)省空間
四大跳轉(zhuǎn)
C語言中一共有四種跳轉(zhuǎn) 分別是return局劲、break、continue奶赠、goto
- break:
立即跳出switch語句或循環(huán)語句 - 應(yīng)用場景:
switch
循環(huán)結(jié)構(gòu) - break離開應(yīng)用范圍鱼填,存在是沒有意義的
- 在多層循環(huán)中,一個(gè)break語句只向外跳一層
- break下面不可以有語句,因?yàn)閳?zhí)行不到
- continue
直接結(jié)束本輪循環(huán)毅戈,進(jìn)入下一輪循環(huán) - 應(yīng)用場景:
循環(huán)結(jié)構(gòu)
和break一樣離開應(yīng)用范圍剔氏,存在是沒有意義的
- goto這個(gè)要分開來講爭議很多
goto
這是一個(gè)不太值得探討的話題,goto 會破壞結(jié)構(gòu)化程序設(shè)計(jì)流程竹祷,它將使程序?qū)哟尾磺澹也灰鬃x羊苟,所以慎用
goto 語句塑陵,僅能在本函數(shù)內(nèi)實(shí)現(xiàn)跳轉(zhuǎn),不能實(shí)現(xiàn)跨函數(shù)跳轉(zhuǎn)(短跳轉(zhuǎn))蜡励。但是他在跳出多重循環(huán)的時(shí)候效率還是蠻高的
return
結(jié)束當(dāng)前函數(shù)令花,將結(jié)果返回給調(diào)用者
循環(huán)結(jié)構(gòu)的循環(huán)體中存在其他的循環(huán)結(jié)構(gòu),我們稱之為循環(huán)嵌套
注意: 一般循環(huán)嵌套不超過三層
外循環(huán)執(zhí)行的次數(shù) * 內(nèi)循環(huán)執(zhí)行的次數(shù)就是 內(nèi)循環(huán)總共執(zhí)行的次數(shù)
在多重循環(huán)中凉倚,如果有可能兼都,應(yīng)當(dāng)將最長的循環(huán)放在最內(nèi)層,最短的循環(huán)放在最外層稽寒,以減少 CPU 跨切循環(huán)層的次數(shù)
- 一般外循環(huán)控制行數(shù)內(nèi)循環(huán)控制列數(shù)
來幾個(gè)練習(xí)