C語(yǔ)言循環(huán)結(jié)構(gòu)深入刨析
總述
生活中不止處處是選擇,還時(shí)常面臨著重復(fù)做某事,比如呢,我們?nèi)諒?fù)一日的學(xué)習(xí)、敲代碼、
C語(yǔ)言中提供了 —while循環(huán)—for循環(huán)—do-while循環(huán)來(lái)表達(dá)循環(huán)
接下來(lái),對(duì)三種循環(huán)進(jìn)行分別介紹
while循環(huán)
while循環(huán)的流程圖大致就是這樣子
語(yǔ)法結(jié)構(gòu)
while( expression ) //判斷表達(dá)式是否成立,成立就執(zhí)行循環(huán)體,不成立則不進(jìn)入
循環(huán)體;
接下來(lái)我們使用一下while循環(huán),打印1-10的數(shù)字
#include <stdio.h> int main(){ int i = 1; while(i < 11) printf("%d ",i++); return 0; }
這便是while最簡(jiǎn)單的用法,接下來(lái)看一下while中的break和continue
while循環(huán)中break和continue
break
看到break大家肯定不陌生,選擇結(jié)構(gòu)中的switch-case就要搭配著break使用哦
#include <stdio.h> int main(){ int i = 1; while(i < 11) { if( 5 == i) break; printf("%d ",i++); } return 0; }
可以看出,當(dāng)i=5的時(shí)候,直接跳出了整個(gè)循環(huán)不再執(zhí)行
break是直接跳出循環(huán),也是直接跳出switch-case
continue
在英語(yǔ)中,continue是繼續(xù)的意思 ,在循環(huán)中,表示跳過(guò)這次循環(huán)進(jìn)行下一次循環(huán)
#include <stdio.h> int main() { int i = 1; while (i < 11) { if (5 == i) continue; // 把break換成continue試一下 printf("%d ", i++); } return 0; }
大家可以猜一下,可想而知,大家可能會(huì)認(rèn)為結(jié)果是 1 2 3 4 6 7 8 9 10 跳過(guò)5,我們來(lái)分析一下
光標(biāo)一直在閃爍,死循環(huán),那怎么樣才能達(dá)到跳過(guò)5的效果呢,
核心問(wèn)題在于**這樣i的值沒(méi)辦法變化,那我們把i放在continue前面來(lái)試試**
#include <stdio.h> int main() { int i = 0; while (i < 11) { i++; if (5 == i) continue; printf("%d ", i); } return 0; }
這樣continue就不會(huì)跳過(guò)循環(huán)因子 -i 的變化,所以不會(huì)死循環(huán),來(lái)看結(jié)果
成功跳過(guò)了5,大家在while循環(huán)中使用continue時(shí)一定要注意循環(huán)因子的問(wèn)題
continue 在while循環(huán)中的作用就是:
- 本次循環(huán)中continue后邊的代碼不會(huì)再執(zhí)行而是直接跳轉(zhuǎn)到while語(yǔ)句的判斷部分。
- 進(jìn)行下一次循環(huán)的入口判斷。
for循環(huán)
語(yǔ)法結(jié)構(gòu)
for( 表達(dá)式1 ; 表達(dá)式2 ; 表達(dá)式3)
循環(huán)體;
- 表達(dá)式1為**初始化部分,用于初始化循環(huán)變量的**。
- 表達(dá)式2為_(kāi)條件判斷部分_,用于**判斷循環(huán)時(shí)候終止**。
- 表達(dá)式3為_(kāi)調(diào)整部分_,用于**_循環(huán)條件的調(diào)整 _**。
for循環(huán)中break和continue
break
for循環(huán)中break與while循環(huán)中break完全相同,表示跳出循環(huán)
#include <stdio.h> int main() { int i = 0; for (i = 1; i < 10; i++) { if (5 == i) break; printf("%d ", i); } return 0; }
break基本沒(méi)啥區(qū)別,就是跳出循環(huán)
continue
for循環(huán)中continue跳出的依然是此次循環(huán),但是并不會(huì)跳過(guò)表達(dá)式3
#include <stdio.h> int main() { int i = 0; for (i = 1; i < 10; i++) { if (5 == i) continue; printf("%d ", i); } return 0; }
依然是跳過(guò)5,continue不會(huì)跳過(guò)表達(dá)式3,意味著i++可以執(zhí)行,不會(huì)造成死循環(huán)
當(dāng)然,一個(gè)人想寫(xiě)bug誰(shuí)也攔不住他
比如:
for循環(huán)中省略表達(dá)式的問(wèn)題
for循環(huán)中有3個(gè)表達(dá)式,都可以省略,但是分號(hào)一個(gè)不能少
int main(){ int i = 0; //可以寫(xiě)成這樣 for (i=0;i<10;) ; //還可以這樣 for(i = 0;;) ; //甚至是這樣 for(;;); //三分號(hào)一個(gè)也不能少 }
for(;??; 這樣的代碼,如果循環(huán)體中沒(méi)有break,基本就是妥妥死循環(huán),并不建議大家這樣使用
for循環(huán)嵌套
當(dāng)出現(xiàn)兩個(gè)for循環(huán)的時(shí)候,需要考慮循環(huán)控制的問(wèn)題,行列,內(nèi)外循環(huán)都代表什么?大家需要想清楚
寫(xiě)一個(gè)九九乘法表
#include <stdio.h> int main() { int i = 0; int j = 0; for (i = 1; i < 10; i++) { //控制行 for (j = 1; j <= i; j++) { printf("%d * %d = %d ", j, i, i * j); //控制列 } printf("\n"); } return 0; }
一般情況下,內(nèi)層循環(huán)因子的控制條件都和外層循環(huán)因子有關(guān)系
下面給大家?guī)讉€(gè)for循環(huán)的注意事項(xiàng)
- 不可在for 循環(huán)體內(nèi)修改循環(huán)變量,防止 for 循環(huán)失去控制。
- 建議for語(yǔ)句的循環(huán)控制變量的取值采用“前閉后開(kāi)區(qū)間”寫(xiě)法
#include <stdio.h> int main(){ int arr[10] = {1,2,3,4,5,6,7,8,9,10};//數(shù)組下標(biāo)從0到9 int i = 0; for(;i <=9;i++) //前閉后閉 printf("%d ",arr[i]); for(;i < 10;i++)//前閉后開(kāi) printf("%d ",arr[i]); return 0; }
前閉后開(kāi)區(qū)間的寫(xiě)法,可能使數(shù)字有了某種含義,比如例子中的10,剛好是打印元素的個(gè)數(shù),也是數(shù)組的長(zhǎng)度
給大家補(bǔ)充一個(gè)小知識(shí)
警惕for循環(huán)后邊直接跟分號(hào)的題,學(xué)校愛(ài)出這玩意,懂得都懂
do-while循環(huán)
do-while循環(huán)與其他兩種循環(huán)有很大不同,而也是使用頻率最小的循環(huán)
do
循環(huán)體
while(判斷條件);
do-while循環(huán)最大的特點(diǎn)就是無(wú)論如何,循環(huán)體一定會(huì)執(zhí)行一次
只有在對(duì)應(yīng)場(chǎng)景中,才應(yīng)該使用do-while循環(huán)
do-while循環(huán)中,break以及continue的用法與while循環(huán)中一樣,本文不在贅述。
goto語(yǔ)句
對(duì)于goto語(yǔ)句,是一種跳轉(zhuǎn),其實(shí)沒(méi)必要說(shuō),因?yàn)槟苡盟鉀Q的用循環(huán)都能解決
簡(jiǎn)單介紹一下,但是并不推薦大家使用
#include <stdio.h> int main() { printf("hehe\n"); goto flag; printf("haha\n"); flag: printf("heihei\n"); return 0; }
goto 會(huì)直接跳轉(zhuǎn)到flag標(biāo)記處,跳過(guò)打印haha
這只是goto語(yǔ)句的語(yǔ)法
goto語(yǔ)句真正使用在多層循環(huán)嵌套中,跳出循環(huán),使用break達(dá)不到,只能跳出一次,這些后續(xù)碰到再說(shuō)
總結(jié)
- for循環(huán)對(duì)于初始化、條件、循環(huán)因子的控制都在一起
- do-while循環(huán)的循環(huán)體至少執(zhí)行一次
- goto不推薦大家使用
各種循環(huán)各有千秋,大家要根據(jù)對(duì)應(yīng)的場(chǎng)景,選擇對(duì)應(yīng)的循環(huán),達(dá)到需求
本文只是對(duì)循環(huán)語(yǔ)法進(jìn)行了介紹,對(duì)于循環(huán),大家要勤加練習(xí), 多思考
到此這篇關(guān)于C語(yǔ)言循環(huán)結(jié)構(gòu)深入刨析的文章就介紹到這了,更多相關(guān)C語(yǔ)言循環(huán)結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++11關(guān)于auto關(guān)鍵字的使用示例
今天小編就為大家分享一篇關(guān)于C++11關(guān)于auto關(guān)鍵字的使用示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12C語(yǔ)言中程序環(huán)境和預(yù)處理的詳細(xì)圖文講解
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中程序環(huán)境和預(yù)處理的相關(guān)資料,我們寫(xiě)的C語(yǔ)言代碼,從運(yùn)行,到在屏幕上生成結(jié)果,經(jīng)歷了比較復(fù)雜的過(guò)程,需要的朋友可以參考下2023-02-02C++ 開(kāi)發(fā)之實(shí)現(xiàn)操作符重載的實(shí)例
這篇文章主要介紹了C++ 開(kāi)發(fā)之實(shí)現(xiàn)操作符重載的實(shí)例的相關(guān)資料,這里附有實(shí)例代碼和實(shí)現(xiàn)效果圖幫助大家參考實(shí)踐,需要的朋友可以參考下2017-07-07C語(yǔ)言使用libZPlay錄制聲音并寫(xiě)到文件的方法
這篇文章主要介紹了C語(yǔ)言使用libZPlay錄制聲音并寫(xiě)到文件的方法,實(shí)例分析了C語(yǔ)言操作音頻文件的相關(guān)技巧,需要的朋友可以參考下2015-06-06C語(yǔ)言用封裝方法實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言用封裝方法實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05詳解如何用c++實(shí)現(xiàn)平衡二叉樹(shù)
平衡二叉樹(shù)(Balanced Binary Tree)又被稱(chēng)為AVL樹(shù)(有別于AVL算法),由前蘇聯(lián)的數(shù)學(xué)家Adelse-Velskil和Landis在1962年提出的高度平衡的二叉樹(shù),根據(jù)科學(xué)家的英文名也稱(chēng)為AVL樹(shù)。本文介紹了它的原理和如何用C++代碼來(lái)實(shí)現(xiàn)2021-06-06Objective-C不帶加減號(hào)的方法實(shí)例
顯而易見(jiàn)的事實(shí)是,Objective-C 中,+ 表示類(lèi)方法,- 表示實(shí)例方法,這篇文章主要給大家介紹了關(guān)于Objective-C不帶加減號(hào)的相關(guān)資料,需要的朋友可以參考下2021-06-06C++實(shí)現(xiàn)LeetCode(347.前K個(gè)高頻元素)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(347.前K個(gè)高頻元素),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08