在C語言中,共有三大常用的程序結構:
-
順序結構:代碼從前往後執行,沒有任何“拐彎抹角”;
-
選擇結構:也叫分支結構,重點要掌握 if else、switch 以及條件運算符;
-
循環結構:重復執行同一段代碼。
前面講解了順序結構和選擇結構,本節開始講解循環結構。所謂循環(Loop),就是重復地執行同一段代碼,例如要計算 1+2+3+……+99+100 的值,就要重復進行99次加法運算。
while循環
while循環的一般形式為:
while(表達式){
語句塊
}
意思是,先計算“表達式”的值,當值為真(非0)時, 執行“語句塊”;執行完“語句塊”,再次計算表達式的值,如果為真,繼續執行“語句塊”……這個過程會一直重復,直到表達式的值為假(0),就退出循環,執行 while 後面的代碼。
我們通常將“表達式”稱為循環條件,把“語句塊”稱為循環體,整個循環的過程就是不停判斷循環條件、並執行循環體代碼的過程。
用 while 循環計算1加到100的值:
#include <stdio.h>
int main(){
int i=1, sum=0;
while(i<=100){
sum+=i;
i++;
}
printf("%d\n",sum);
return 0;
}
運行結果:
5050
代碼分析:
1) 程序運行到 while 時,因為 i=1,i<=100 成立,所以會執行循環體;執行結束後 i 的值變為 2,sum 的值變為 1。
2) 接下來會繼續判斷 i<=100是否成立,因為此時 i=2,i<=100 成立,所以繼續執行循環體;執行結束後 i 的值變為 3,sum 的值變為3。
3) 重復執行步驟 2)。
4) 當循環進行到第100次,i 的值變為 101,sum 的值變為5050;因為此時 i<=100 不再成立,所以就退出循環,不再執行循環體,轉而執行while循環後面的代碼。
while 循環的整體思路是這樣的:設置一個帶有變量的循環條件,也即一個帶有變量的表達式;在循環體中額外添加一條語句,讓它能夠改變循環條件中變量的值。這樣,隨著循環的不斷執行,循環條件中變量的值也會不斷變化,終有一個時刻,循環條件不再成立,整個循環就結束了。
如果循環條件中不包含變量,會發生什麼情況呢?
1) 循環條件成立時的話,while 循環會一直執行下去,永不結束,成為“死循環”。例如:
#include <stdio.h>
int main(){
while(1){
printf("1");
}
return 0;
}
運行程序,會不停地輸出“1”,直到用戶強制關閉。
2) 循環條件不成立的話,while 循環就一次也不會執行。例如:
#include <stdio.h>
int main(){
while(0){
printf("1");
}
return 0;
}
運行程序,什麼也不會輸出。
再看一個例子,統計從鍵盤輸入的一行字符的個數:
#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;
}
運行結果:
Input a string:c.biancheng.net↙
Number of characters: 15
本例程序中的循環條件為
getchar()!='\n'
,其意義是,只要從鍵盤輸入的字符不是回車就繼續循環。循環體
n++;
完成對輸入字符個數計數。
do-while循環
除了while循環,在C語言中還有一種 do-while 循環。
do-while循環的一般形式為:
do{
語句塊
}while(表達式);
do-while循環與while循環的不同在於:它會先執行“語句塊”,然後再判斷表達式是否為真,如果為真則繼續循環;如果為假,則終止循環。因此,do-while 循環至少要執行一次“語句塊”。
用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;
}
運行結果:
5050
注意while(i<=100);
最後的分號;
,這個必須要有。
while循環和do-while各有特點,大家可以適當選擇,實際編程中使用while循環較多。