溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺談c語言中實現(xiàn)循環(huán)結(jié)構(gòu)的控制語句

發(fā)布時間:2020-07-21 10:44:52 來源:億速云 閱讀:201 作者:小豬 欄目:編程語言

這篇文章主要淺談c語言中實現(xiàn)循環(huán)結(jié)構(gòu)的控制語句,內(nèi)容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

c語言中實現(xiàn)循環(huán)結(jié)構(gòu)的控制語句有:while語句、do-while語句和for語句,一般形式為“while(表達式){語句塊}”,“do{語句塊}while(表達式);”,“for(表達式1; 表達式2; 表達式3){語句塊}”。

淺談c語言中實現(xiàn)循環(huán)結(jié)構(gòu)的控制語句

所謂循環(huán)(Loop),就是重復地執(zhí)行同一段代碼,例如要計算 1+2+3+……+99+100 的值,就要重復進行99次加法運算。

while循環(huán)

while循環(huán)的一般形式為:

while(表達式){
    語句塊
}

意思是,先計算“表達式”的值,當值為真(非0)時, 執(zhí)行“語句塊”;執(zhí)行完“語句塊”,再次計算表達式的值,如果為真,繼續(xù)執(zhí)行“語句塊”……這個過程會一直重復,直到表達式的值為假(0),就退出循環(huán),執(zhí)行 while 后面的代碼。

我們通常將“表達式”稱為循環(huán)條件,把“語句塊”稱為循環(huán)體,整個循環(huán)的過程就是不停判斷循環(huán)條件、并執(zhí)行循環(huán)體代碼的過程。

用 while 循環(huán)計算1加到100的值:

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

運行結(jié)果:

5050

代碼分析:

1) 程序運行到 while 時,因為 i=1,i<=100 成立,所以會執(zhí)行循環(huán)體;執(zhí)行結(jié)束后 i 的值變?yōu)?2,sum 的值變?yōu)?1。

2) 接下來會繼續(xù)判斷 i<=100是否成立,因為此時 i=2,i<=100 成立,所以繼續(xù)執(zhí)行循環(huán)體;執(zhí)行結(jié)束后 i 的值變?yōu)?3,sum 的值變?yōu)?。

3) 重復執(zhí)行步驟 2)。

4) 當循環(huán)進行到第100次,i 的值變?yōu)?101,sum 的值變?yōu)?050;因為此時 i<=100 不再成立,所以就退出循環(huán),不再執(zhí)行循環(huán)體,轉(zhuǎn)而執(zhí)行while循環(huán)后面的代碼。

while 循環(huán)的整體思路是這樣的:設置一個帶有變量的循環(huán)條件,也即一個帶有變量的表達式;在循環(huán)體中額外添加一條語句,讓它能夠改變循環(huán)條件中變量的值。這樣,隨著循環(huán)的不斷執(zhí)行,循環(huán)條件中變量的值也會不斷變化,終有一個時刻,循環(huán)條件不再成立,整個循環(huán)就結(jié)束了。

如果循環(huán)條件中不包含變量,會發(fā)生什么情況呢?

1) 循環(huán)條件成立時的話,while 循環(huán)會一直執(zhí)行下去,永不結(jié)束,成為“死循環(huán)”。例如:

#include <stdio.h>
int main(){
    while(1){
        printf("1");
    }
    return 0;
}

運行程序,會不停地輸出“1”,直到用戶強制關(guān)閉。

2) 循環(huán)條件不成立的話,while 循環(huán)就一次也不會執(zhí)行。例如:

#include <stdio.h>
int main(){
    while(0){
        printf("1");
    }
    return 0;
}

運行程序,什么也不會輸出。

再看一個例子,統(tǒng)計從鍵盤輸入的一行字符的個數(shù):

#include <stdio.h>
int main(){
    int n=0;
    printf("Input a string:");
    while(getchar()!='\n') n++;
    printf("Number of characters: %d\n", n);
    return 0;
}

運行結(jié)果:

Input a string:c.biancheng.net↙
Number of characters: 15

本例程序中的循環(huán)條件為getchar()!='\n',其意義是,只要從鍵盤輸入的字符不是回車就繼續(xù)循環(huán)。循環(huán)體n++;完成對輸入字符個數(shù)計數(shù)。

do-while循環(huán)

除了while循環(huán),在C語言中還有一種 do-while 循環(huán)。

do-while循環(huán)的一般形式為:

do{
    語句塊
}while(表達式);

do-while循環(huán)與while循環(huán)的不同在于:它會先執(zhí)行“語句塊”,然后再判斷表達式是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。因此,do-while 循環(huán)至少要執(zhí)行一次“語句塊”。

用do-while計算1加到100的值:

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

運行結(jié)果:

5050

注意while(i<=100);最后的分號;,這個必須要有。

while循環(huán)和do-while各有特點,大家可以適當選擇,實際編程中使用while循環(huán)較多。

除了while循環(huán),C語言中還有 for 循環(huán),它的使用更加靈活,完全可以取代 while 循環(huán)。

for循環(huán)

上面我們使用 while 循環(huán)來計算1加到100的值,代碼如下:

#include <stdio.h>
int main(){
    int i, sum=0;
    i = 1;  //語句①
    while(i<=100 /*語句②*/ ){
        sum+=i;
        i++;  //語句③
    }
    printf("%d\n",sum);
    return 0;
}

可以看到,語句①②③被放到了不同的地方,代碼結(jié)構(gòu)較為松散。為了讓程序更加緊湊,可以使用 for 循環(huán)來代替,如下所示:

#include <stdio.h>
int main(){
    int i, sum=0;
    for(i=1/*語句①*/; i<=100/*語句②*/; i++/*語句③*/){
        sum+=i;
    }
    printf("%d\n",sum);
    return 0;
}

在 for 循環(huán)中,語句①②③被集中到了一起,代碼結(jié)構(gòu)一目了然。

for 循環(huán)的一般形式為:

for(表達式1; 表達式2; 表達式3){
    語句塊
}

它的運行過程為:

1) 先執(zhí)行“表達式1”。

2) 再執(zhí)行“表達式2”,如果它的值為真(非0),則執(zhí)行循環(huán)體,否則結(jié)束循環(huán)。

3) 執(zhí)行完循環(huán)體后再執(zhí)行“表達式3”。

4) 重復執(zhí)行步驟 2) 和 3),直到“表達式2”的值為假,就結(jié)束循環(huán)。

上面的步驟中,2) 和 3) 是一次循環(huán),會重復執(zhí)行,for 語句的主要作用就是不斷執(zhí)行步驟 2) 和 3)。

“表達式1”僅在第一次循環(huán)時執(zhí)行,以后都不會再執(zhí)行,可以認為這是一個初始化語句?!氨磉_式2”一般是一個關(guān)系表達式,決定了是否還要繼續(xù)下次循環(huán),稱為“循環(huán)條件”。“表達式3”很多情況下是一個帶有自增或自減操作的表達式,以使循環(huán)條件逐漸變得“不成立”。

for循環(huán)的執(zhí)行過程可用下圖表示:

淺談c語言中實現(xiàn)循環(huán)結(jié)構(gòu)的控制語句

我們再來分析一下“計算從1加到100的和”的代碼:

#include <stdio.h>
int main(){
    int i, sum=0;
    for(i=1; i<=100; i++){
        sum+=i;
    }
    printf("%d\n",sum);
    return 0;
}

運行結(jié)果:

5050

代碼分析:

1) 執(zhí)行到 for 語句時,先給 i 賦初值1,判斷 i<=100 是否成立;因為此時 i=1,i<=100 成立,所以執(zhí)行循環(huán)體。循環(huán)體執(zhí)行結(jié)束后(sum的值為1),再計算 i++。

2) 第二次循環(huán)時,i 的值為2,i<=100 成立,繼續(xù)執(zhí)行循環(huán)體。循環(huán)體執(zhí)行結(jié)束后(sum的值為3),再計算 i++。

3) 重復執(zhí)行步驟 2),直到第101次循環(huán),此時 i 的值為101,i<=100 不成立,所以結(jié)束循環(huán)。

由此我們可以總結(jié)出for循環(huán)的一般形式:

for(初始化語句; 循環(huán)條件; 自增或自減){
    語句塊
}

for循環(huán)中的三個表達式

for 循環(huán)中的“表達式1(初始化條件)”、“表達式2(循環(huán)條件)”和“表達式3(自增或自減)”都是可選項,都可以省略(但分號;必須保留)。

1) 修改“從1加到100的和”的代碼,省略“表達式1(初始化條件)”:

int i = 1, sum = 0;
for( ; i<=100; i++){
    sum+=i;
}

可以看到,將i=1移到了 for 循環(huán)的外面。

2) 省略了“表達式2(循環(huán)條件)”,如果不做其它處理就會成為死循環(huán)。例如:

for(i=1; ; i++) sum=sum+i;

相當于:

i=1;
while(1){
    sum=sum+i;
    i++;
}

所謂死循環(huán),就是循環(huán)條件永遠成立,循環(huán)會一直進行下去,永不結(jié)束。死循環(huán)對程序的危害很大,一定要避免。

3) 省略了“表達式3(自增或自減)”,就不會修改“表達式2(循環(huán)條件)”中的變量,這時可在循環(huán)體中加入修改變量的語句。例如:

for( i=1; i<=100; ){
    sum=sum+i;
    i++;
}

4) 省略了“表達式1(初始化語句)”和“表達式3(自增或自減)”。例如:

for( ; i<=100 ; ){
    sum=sum+i;
    i++;
}

相當于:

while(i<=100){
    sum=sum+i;
    i++;
}

5) 3個表達式可以同時省略。例如:

for( ; ; )  語句

相當于:

while(1)  語句

6) “表達式1”可以是初始化語句,也可以是其他語句。例如:

for( sum=0; i<=100; i++ )  sum=sum+i;

7) “表達式1”和“表達式3”可以是一個簡單表達式也可以是逗號表達式。

for( sum=0,i=1; i<=100; i++ )  sum=sum+i;

或:

for( i=0,j=100; i<=100; i++,j-- )  k=i+j;

8) “表達式2”一般是關(guān)系表達式或邏輯表達式,但也可是數(shù)值或字符,只要其值非零,就執(zhí)行循環(huán)體。例如:

for( i=0; (c=getchar())!='\n'; i+=c );

又如:

for( ; (c=getchar())!='\n' ; )
    printf("%c",c);

看完上述內(nèi)容,是不是對淺談c語言中實現(xiàn)循環(huán)結(jié)構(gòu)的控制語句有進一步的了解,如果還想學習更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI