摘要:在面向過程結構化程序設計中,循環是程序設計是一項重點應用,所以在高級語言程序設計課程中,掌握循環學好程序設計的基礎,也是程序設計能否入門的關鍵。在C語言中,循環結構主要是由for和while、do-while語句實現的,其中for語句的應用更為普遍一些。for語句的用法對于有程序設計經驗的學生來說輕而易舉,但是對于那些沒有經驗的初學者來說,難度卻不小。從初學者的角度,詳盡闡述了C語言中for語句在循環結構幾種典型應用的實現方法。
關鍵詞:C語言;結構化程序設計;循環結構
中圖分類號:TP
文獻標識碼:A
文章編號:1672-3198(2010)13-0329-02
1 for循環語句的應用規則
C語言中的for循環語句使用非常靈活,不僅可以用于循環次數已經確定的情況,而且可以用于循環次數不確定而只給出循環結束條件的情況,它完全可以代替while語句。
1.1 for循環語句的格式
for(表達式1;表達式2;表達式3)語句;
這里邊的“語句”就是循環體語句,若其中只有一條語句,可以不用花括號,若多于一條,則必須用花括號將這些循環體語句括起來。
1.2 for循環語句的執行過程
(1)先操作表達式1;
(2)操作表達式2,若其值為真(值為非0),則執行for語句中的循環體語句一次,然后執行下面第三步,若為假(值為0),則結束循環,轉到第5步;
(3)操作表達式3;
(4)轉回上面第2步驟繼續執行;
(5)結束循環,執行for語句下面的語句。
一定要搞清楚這三個表達式的執行次序!且要注意表達式1只執行一次!
通常,表達式1用來為循環變量賦初值,表達式2用來設置執行循環的條件,表達式3用來改變循環變量的值。所以for語句的格式也可以這樣描述:
for(循環變量賦初值;循環條件;循環變量增值)語句;
2 fo與while語句的編程對比
通過結合例子,如求sum=1+2+3+…+100的和,來分別看一下for和while語句的編程效果。
首先用for循環語句來編程實現
main()
{
int i,sum=0;/*定義變量i,sum為基本整型,且為sum賦初值0*/
for(i=1;i<=100;i++)sum=sum+i;/*用for語句實現循環,循環體只有一句,可不用花括號*/
printf(“sum=%d”,sum); /*退出循環后的語句,即輸出sum的值*/
}
再用while語句進行編程實現
main()
{
int i=1,sum=0; /*定義變量i,sum為基本整型,且為它們分別賦初值1和0*/
while(i<=100) /*執行循環體的判斷語句*/
{
sum=sum+i; /*將變量i與其前各項之和累加*/
i++; /*循環變量增加1*/
} /*循環體多于一個語句時要用花括號括起來*/
printf(“sum=%d”,sum); /*退出循環,輸出sum的值*/
}
對比以上程序,顯然我們發現,用for語句在編程語句上更簡單、方便,編程效率更高。而while語句在編程過程中,要書寫更多的語句。
3 for語句的深入應用
(1)for語句一般形式中的表達式1可以省略,此時應在for語句之前給循環變量賦初值。注意省略表達式1時,其后的分號不能省略。如for(;i<=100;i++){…};
(2)表達式2也可以省略,即沒有判斷循環的條件,此時編譯系統將循環條件默認為真,循環將無終止地循環下去,這種情況可以在循環體中設置條件控制循環。
例如:for(i=1;;i++)sum=sum+i;為死循環語句,若使其實現1+2+3+…+100后結束循環,則可以在循環體中加上控制條件:
for(i=1;;i++){if(i>100)break;sum=sum+i;}
(3)表達式3也可以省略,即沒有設置用來改變循環變量的語句,循環將無終止地循環執行下去,但此時程序設計者可以在循環體中加上用來改變循環變量的語句。如:
for(i=1;i<=100;)
{sum=sum+i;
i++;/*循環變量增加1,改變循環變量的值*/
}
另外表達式3不一定都要寫成如i++這樣的形式,要根據循環變量的實際變化規律而定,如可以寫成這樣的形式:i=i+2或i=i*3…。
(4)可以省略表達式1和表達式3,只有表達式2即只給循環條件。此時可以在程序的適當位置對循環變量賦初值和改變循環變量的值。如:
int i=1,sum=0; /*定義變量i,sum為基本整型,且為它們分別賦初值1和0*/
for(;i<=100;)
sum=sum+i++; /*改變循環變量的值*/
(5)三個表達式都可以省略。
如:for(;;)語句;
即不設初值,沒有判斷條件(認為表達式2為真值),循環變量不增值,將無終止的執行循環體。在實際應用中程序設計者可以將這三個內容分寫在程序的適當位置。
如:
main()
{
int i=1,sum=0; /*定義變量賦初值1和0*/
for(;;)
{if(i>100);{sum=sum+i++;}}/*為循環設置控制條件,改變循環變量的值*/
printf(“sum=%d”,sum);
}
(6)表達式1也可以是設置循環變量初值的賦值表達式,也可以是與循環變量無關的其他表達式.且可以有多個,此時用逗號將其分隔開,如:
for(i=1,sum=0;i<=100;i++);/*可以為多個變量賦初值,用逗號分隔*/
{
sum=sum+i;
}
(7)當循環的次數不確定時,表達式2即控制循環的條件語句,其判斷對象就不能是循環變量了。如:
已知s=1+2+3+…+n,求滿足s>=1000的最小n值。
這個程序的循環執行的條件為“s<1000”,退出循環時n的值不知道是多少,所以循環條件的判斷對象應該是s,其程序可以如下編寫:
main()
{ int n,s; /*定義變量賦不賦初值*/
for(n=1,s=0;s<1000;n++) /*用for語句實現循環*/
s=s+n; /*將變量n與其前各項之和累加*/
printf(“n=%d”,n-1); /*,輸出n的值*/
}
用while語句可以這樣編寫:
main()
{int n=1,s=0;
while(s<1000)
s=s+n++;
printf(“n=%d”,n-1);
}
上面這個程序循環的次數在編寫程序時不能確定,遇到這種情況人們首先想到的是用while語句來實現循環,以為for語句無法實現,其實這是一種誤解。在BASIC語言中for循環只能用在循環次數確定的循環當中,而C語言中for語句格式卻有其特殊性,而應用更具靈活性。
參考文獻
[1]譚浩強.C程序設計(第二版)[M].北京:清華大學出版社,2003.
[2]譚浩強.C程序設計題解與上機指導(第二版)[M].北京:清華大學出版社,2003.