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