程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言for循環

C語言for循環

編輯:C語言基礎知識
除了while循環,C語言中還有 for 循環,它的使用更加靈活,完全可以取代 while 循環。

上節我們使用 while 循環來計算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;
}
可以看到,語句①②③被放到了不同的地方,代碼結構較為松散。為了讓程序更加緊湊,可以使用 for 循環來代替,如下所示:
#include <stdio.h>
int main(){
    int i, sum=0;
    for(i=1/*語句①*/; i<=100/*語句②*/; i++/*語句③*/){
        sum+=i;
    }
    printf("%d\n",sum);
    return 0;
}
在 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循環的執行過程可用下圖表示:


我們再來分析一下“計算從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;
}
運行結果:
5050

代碼分析:
1) 執行到 for 語句時,先給 i 賦初值1,判斷 i<=100 是否成立;因為此時 i=1,i<=100 成立,所以執行循環體。循環體執行結束後(sum的值為1),再計算 i++。

2) 第二次循環時,i 的值為2,i<=100 成立,繼續執行循環體。循環體執行結束後(sum的值為3),再計算 i++。

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

由此我們可以總結出for循環的一般形式:

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

for 循環中的三個表達式

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

1) 修改“從1加到100的和”的代碼,省略“表達式1(初始化條件)”:
int main(){
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);
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved