您好,登錄后才能下訂單哦!
這篇文章主要淺談c語言中實現循環結構的控制語句,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
c語言中實現循環結構的控制語句有:while語句、do-while語句和for語句,一般形式為“while(表達式){語句塊}”,“do{語句塊}while(表達式);”,“for(表達式1; 表達式2; 表達式3){語句塊}”。
所謂循環(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循環較多。
除了while循環,C語言中還有 for 循環,它的使用更加靈活,完全可以取代 while 循環。
for循環
上面我們使用 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 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語言中實現循環結構的控制語句有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。