循環結構是程序中一種很重要的結構。其特點是, 在給定條件成立時,反復執行某程序段,直到條件不成立為止。 給定的條件稱為循環條件,反復執行的程序段稱為循環體。 C語言提供了多種循環語句,可以組成各種不同形式的循環結構。
while語句
while語句的一般形式為: while(表達式)語句; 其中表達式是循環條件,語句為循環體。
while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體語句。其執行過程可用圖3—4表示。 統計從鍵盤輸入一行字符的個數。
#include void main(){ int n=0; printf("input a string:\n"); while(getchar()!='\n') n++; printf("%d",n); } int n=0; printf("input a string:\n"); while(getchar()!='\n') n++; printf("%d",n);
本例程序中的循環條件為getchar()!='\n',其意義是, 只要從鍵盤輸入的字符不是回車就繼續循環。循環體n++完成對輸入字符個數計數。從而程序實現了對輸入一行字符的字符個數計數。
使用while語句應注意以下幾點:
1.while語句中的表達式一般是關系表達或邏輯表達式,只要表達式的值為真(非0)即可繼續循環。
void main(){ int a=0,n; printf("\n input n: "); scanf("%d",&n); while (n--) printf("%d ",a++*2); } int a=0,n; printf("\n input n: "); scanf("%d",&n); while (n--) printf("%d ",a++*2);
本例程序將執行n次循環,每執行一次,n值減1。循環體輸出表達式a++*2的值。該表達式等效于(a*2;a++)
2.循環體如包括有一個以上的語句,則必須用{}括起來, 組成復合語句。
3.應注意循環條件的選擇以避免死循環。
void main(){ int a,n=0; while(a=5) printf("%d ",n++); } int a,n=0; while(a=5) printf("%d ",n++);
本例中while語句的循環條件為賦值表達式a=5, 因此該表達式的值永遠為真,而循環體中又沒有其它中止循環的手段, 因此該循環將無休止地進行下去,形成死循環。4.允許while語句的循環體又是while語句,從而形成雙重循環。
do-while語句
do-while語句的一般形式為:
do 語句; while(表達式);
其中語句是循環體,表達式是循環條件。
do-while語句的語義是:
先執行循環體語句一次, 再判別表達式的值,若為真(非0)則繼續循環,否則終止循環。
do-while語句和while語句的區別在于do-while是先執行后判斷,因此do-while至少要執行一次循環體。而while是先判斷后執行,如果條件不滿足,則一次循環體語句也不執行。
while語句和do-while語句一般都可以相互改寫。
void main(){ int a=0,n; printf("\n input n: "); scanf("%d",&n); do printf("%d ",a++*2); while (--n); } int a=0,n; printf("\n input n: "); scanf("%d",&n); do printf("%d ",a++*2); while (--n);
在本例中,循環條件改為--n,否則將多執行一次循環。這是由于先執行后判斷而造成的。
對于do-while語句還應注意以下幾點:
1.在if語句,while語句中, 表達式后面都不能加分號, 而在 do-while語句的表達式后面則必須加分號。
2.do-while語句也可以組成多重循環,而且也可以和while語句相互嵌套。
3.在do和while之間的循環體由多個語句組成時,也必須用{}括起來組成一個復合語句。
4.do-while和while語句相互替換時,要注意修改循環控制條件。
for語句
for語句是C語言所提供的功能更強,使用更廣泛的一種循環語句。其一般形式為:
for(表達式1;表達式2;表達3)
語句:
表達式1 通常用來給循環變量賦初值,一般是賦值表達式。也允許在for語句外給循環變量賦初值,此時可以省略該表達式。
表達式2 通常是循環條件,一般為關系表達式或邏輯表達式。
表達式3 通常可用來修改循環變量的值,一般是賦值語句。
這三個表達式都可以是逗號表達式, 即每個表達式都可由多個表達式組成。三個表達式都是任選項,都可以省略。
一般形式中的“語句”即為循環體語句。for語句的語義是:
1.首先計算表達式1的值。
2.再計算表達式2的值,若值為真(非0)則執行循環體一次, 否則跳出循環。 [1] [2] 下一頁
|