C語言循環結構深入刨析

總述

生活中不止處處是選擇,還時常面臨著重復做某事,比如呢,我們日復一日的學習、敲代碼、

C語言中提供瞭 —while循環—for循環—do-while循環來表達循環

接下來,對三種循環進行分別介紹

while循環

while循環的流程圖大致就是這樣子

語法結構

while( expression )   //判斷表達式是否成立,成立就執行循環體,不成立則不進入
循環體;

接下來我們使用一下while循環,打印1-10的數字

#include <stdio.h>
int main(){
    int i = 1;
    while(i < 11)
        printf("%d ",i++);
    return 0;
}

這便是while最簡單的用法,接下來看一下while中的break和continue

while循環中break和continue

break

看到break大傢肯定不陌生,選擇結構中的switch-case就要搭配著break使用哦

#include <stdio.h>
int main(){
    int i = 1;
    while(i < 11)
    {
        if( 5 == i)
            break;
        printf("%d ",i++);
    }
    return 0;
}

可以看出,當i=5的時候,直接跳出瞭整個循環不再執行

break是直接跳出循環,也是直接跳出switch-case

continue

在英語中,continue是繼續的意思 ,在循環中,表示跳過這次循環進行下一次循環

#include <stdio.h>
int main() {
    int i = 1;
    while (i < 11)
    {
        if (5 == i)
            continue; // 把break換成continue試一下
        printf("%d ", i++);
    }
    return 0;
}

大傢可以猜一下,可想而知,大傢可能會認為結果是 1 2 3 4 6 7 8 9 10 跳過5,我們來分析一下

光標一直在閃爍,死循環,那怎麼樣才能達到跳過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就不會跳過循環因子 -i 的變化,所以不會死循環,來看結果

成功跳過瞭5,大傢在while循環中使用continue時一定要註意循環因子的問題

continue 在while循環中的作用就是:

  • 本次循環中continue後邊的代碼不會再執行而是直接跳轉到while語句的判斷部分。
  • 進行下一次循環的入口判斷。

for循環

語法結構

for( 表達式1 ; 表達式2 ; 表達式3)

循環體;

  • 表達式1為**初始化部分,用於初始化循環變量的**。
  • 表達式2為_條件判斷部分_,用於**判斷循環時候終止**。
  • 表達式3為_調整部分_,用於**_循環條件的調整 _**。

for循環中break和continue

break

for循環中break與while循環中break完全相同,表示跳出循環

#include <stdio.h>
int main() {
	int i = 0;
	for (i = 1; i < 10; i++) {
		if (5 == i)
			break;
		printf("%d ", i);
	}
	return 0;
}

break基本沒啥區別,就是跳出循環

continue

for循環中continue跳出的依然是此次循環,但是並不會跳過表達式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++可以執行,不會造成死循環

當然,一個人想寫bug誰也攔不住他

比如:

for循環中省略表達式的問題

for循環中有3個表達式,都可以省略,但是分號一個不能少

int main(){
    int i = 0;
    //可以寫成這樣
    for (i=0;i<10;)
        ;
    //還可以這樣
    for(i = 0;;)
        ;
    //甚至是這樣
    for(;;);  //三分號一個也不能少
}

for(;😉; 這樣的代碼,如果循環體中沒有break,基本就是妥妥死循環,並不建議大傢這樣使用

for循環嵌套

當出現兩個for循環的時候,需要考慮循環控制的問題,行列,內外循環都代表什麼?大傢需要想清楚

寫一個九九乘法表

#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;
}

一般情況下,內層循環因子的控制條件都和外層循環因子有關系

下面給大傢幾個for循環的註意事項

  • 不可在for 循環體內修改循環變量,防止 for 循環失去控制。
  • 建議for語句的循環控制變量的取值采用“前閉後開區間”寫法
#include <stdio.h>
int main(){
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};//數組下標從0到9
    int i = 0;
    for(;i <=9;i++)  //前閉後閉
        printf("%d ",arr[i]);    
    for(;i < 10;i++)//前閉後開
        printf("%d ",arr[i]);
    return 0;
}

前閉後開區間的寫法,可能使數字有瞭某種含義,比如例子中的10,剛好是打印元素的個數,也是數組的長度

給大傢補充一個小知識

警惕for循環後邊直接跟分號的題,學校愛出這玩意,懂得都懂

do-while循環

do-while循環與其他兩種循環有很大不同,而也是使用頻率最小的循環

do
    循環體
while(判斷條件);

do-while循環最大的特點就是無論如何,循環體一定會執行一次

隻有在對應場景中,才應該使用do-while循環

do-while循環中,break以及continue的用法與while循環中一樣,本文不在贅述。

goto語句

對於goto語句,是一種跳轉,其實沒必要說,因為能用它解決的用循環都能解決

簡單介紹一下,但是並不推薦大傢使用

#include <stdio.h>
int main()
{
    printf("hehe\n");
    goto flag;
    printf("haha\n");
flag:
    printf("heihei\n");
    return 0;
}

goto 會直接跳轉到flag標記處,跳過打印haha

這隻是goto語句的語法

goto語句真正使用在多層循環嵌套中,跳出循環,使用break達不到,隻能跳出一次,這些後續碰到再說

總結

  • for循環對於初始化、條件、循環因子的控制都在一起
  • do-while循環的循環體至少執行一次
  • goto不推薦大傢使用

各種循環各有千秋,大傢要根據對應的場景,選擇對應的循環,達到需求

本文隻是對循環語法進行瞭介紹,對於循環,大傢要勤加練習, 多思考

到此這篇關於C語言循環結構深入刨析的文章就介紹到這瞭,更多相關C語言循環結構內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: