首頁  >  文章  >  後端開發  >  for迴圈是先執行迴圈體語句,後再判斷表達式嗎?

for迴圈是先執行迴圈體語句,後再判斷表達式嗎?

青灯夜游
青灯夜游原創
2020-07-23 14:53:4525298瀏覽

不是,for迴圈是先判斷表達式,然後執行迴圈體語句。一般形式“for(表達式1;表達式2;表達式3){循環體}”;先執行“表達式1”;再執行“表達式2”,如果它的值為真(非0),則執行循環體,否則結束循環;執行完循環體後再執行「表達式3」。

for迴圈是先執行迴圈體語句,後再判斷表達式嗎?

for 迴圈的一般形式為:

for(表达式1; 表达式2; 表达式3){
    语句块
}

它的運作過程為:

1) 先執行「表達式1」。

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

3) 執行完循環體後再執行「表達式3」。

4) 重複執行步驟 2) 和 3),直到「表達式2」的值為假,就結束循環。

在上面的步驟中,2) 和 3) 是一次循環,會重複執行,for 語句的主要作用就是不斷執行步驟 2) 和 3)。

「表達式1」只在第一次迴圈時執行,以後都不會再執行,可以認為這是初始化語句。 「表達式2」一般是一個關係表達式,決定了是否還要繼續下次循環,稱為「循環條件」。 「表達式3」很多情況下是一個帶有自增或自減操作的表達式,以使循環條件逐漸變得「不成立」。

for迴圈的執行過程可用下圖表示:

for迴圈是先執行迴圈體語句,後再判斷表達式嗎?

#我們來分析一下「計算從1加到100的和」的程式碼:

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

執行結果:

5050

程式碼分析:

1) 執行到for 語句時,先給i 賦初值1,判斷i

2) 第二次迴圈時,i 的值為2,i

3) 重複執行步驟 2),直到第101次循環,此時 i 的值為101,i

由此我們可以總結for迴圈的一般形式:

for(初始化语句; 循环条件; 自增或自减){
    语句块
}

for迴圈中的三個表達式

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

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

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

可以看到,將i=1 移到了for 迴圈的外面。

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

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

相當於:

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

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

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

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」一般是關係表達式或邏輯表達式,但也可是數值或字符,只要其值非零,就執行循環體。例如:

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

又如:

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

相關推薦:《c語言教學

以上是for迴圈是先執行迴圈體語句,後再判斷表達式嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn