標籤:
C語言提供了多種迴圈語句,可以組成各種不同形式的迴圈結構:
- 用goto語句和if語句構成迴圈;
- 用while語句;
- 用do-while語句;
- 用for語句;
一、goto語句
goto語句是一種無條件轉移語句,與BASIC中的goto語句相似。goto 語句的使用格式為:
goto 語句標號;
其中標號是一個有效標識符,這個標識符加上一個“:”一起出現在函數內某處,執行goto語句後,程式將跳轉到該標號處並執行其後的語句。
goto語句通常不用,主要因為它將使程式層次不清,且不易讀,但在多層嵌套退出時,用goto語句則比較合理。
二、while
while語句的一般形式為:
while(運算式) 語句
其中運算式是迴圈條件,語句為迴圈體。
while語句的語義是:計算運算式的值,當值為真(非0)時, 執行迴圈體語句。
練習:統計從鍵盤輸入一行字元的個數。
- #include <stdio.h>
- int main(void){
- int n=0;
- printf("input a string:\n");
- while(getchar()!=‘\n‘) n++;
- printf("%d",n);
- return 0;
- }
三、do...while
do-while語句的一般形式為:
do
語句
while(運算式);
這個迴圈與while迴圈的不同在於:它先執行迴圈中的語句,然後再判斷運算式是否為真,如果為真則繼續迴圈;如果為假,則終止迴圈。因此,do-while迴圈至少要執行一次迴圈語句。
四、for
在C語言中,for語句使用最為靈活,它完全可以取代 while 語句。它的一般形式為:
for(運算式1; 運算式2; 運算式3) 語句
它的執行過程如下:
- 先求解運算式1。
- 求解運算式2,若其值為真(非0),則執行for語句中指定的內嵌語句,然後執行下面第3)步;若其值為假(0),則結束迴圈,轉到第5)步。
- 求解運算式3。
- 轉回上面第2)步繼續執行。
- 迴圈結束,執行for語句下面的一個語句。
注意:
1) for迴圈中的“運算式1(迴圈變數賦初值)”、“運算式2(迴圈條件)”和“運算式3(迴圈變數增量)”都是選擇項,即可以預設,但分號(;)不能預設。
2) 省略了“運算式1(迴圈變數賦初值)”,表示不對迴圈控制變數賦初值。
3) 省略了“運算式2(迴圈條件)”,則不做其它處理時便成為死迴圈。
4) 省略了“運算式3(迴圈變數增量)”,則不對迴圈控制變數進行操作,這時可在語句體中加入修改迴圈控制變數的語句。
5) 省略了“運算式1(迴圈變數賦初值)”和“運算式3(迴圈變數增量)”。
6) 3個運算式都可以省略。例如:
for( ; ; ) 語句
相當於:
while(1) 語句
7) 運算式1可以是設定迴圈變數的初值的賦值運算式,也可以是其他運算式。
8) 運算式1和運算式3可以是一個簡單運算式也可以是逗號運算式。
9) 運算式2一般是關聯運算式或邏輯運算式,但也可是數值運算式或字元運算式,只要其值非零,就執行迴圈體。
五、break 跳出迴圈
break語句通常用在迴圈語句和開關語句中。當break用於開關語句switch中時,可使程式跳出switch而執行switch以後的語句;
當break語句用於do-while、for、while迴圈語句中時,可使程式終止迴圈而執行迴圈後面的語句,通常break語句總是與if語句聯在一起,即滿足條件時便跳出迴圈。
六、continue 結束本次迴圈
ontinue語句的作用是跳過迴圈體中剩餘的語句而強行執行下一次迴圈。continue語句只用在for、while、do-while等迴圈體中,常與if條件陳述式一起使用,用來加速迴圈。
練習:求100至200間的全部素數。
- #include <stdio.h>
- #include <math.h>
- int main(void){
- int m,i,k,n=0;
- for(m=101;m<=200;m=m+2){
- k=sqrt(m); // m 的開方
- for(i=2;i<=k;i++)
- if(m%i==0) break;
- if(i>=k+1){
- printf("%d\n",m);
- n=n+1;
- }
- }
- printf("\n");
- return 0;
- }
練習2:用下面的公式求π:
分析:首先,係數為正數的項的分母是4n-3(n為正數項的項數),為負數的項的分母為4n-1(n為負數項的項數),即分母的變化規律是1、3、5、7...的奇數數列,則第n項的分母為2n-1,第10000項的分母為2*10000-1。
- #include <stdio.h>
- #include <math.h>
- int main(void)
- {
- double p=0,j=1;
- int i;
- for( i=1;i<10000;i++ ) //此處i為項數
- {
- j=pow(-1.0,i+1)/(2*i-1); //pow(x,y)求x的y次冪
- p+=j;
- printf("%lf\n",4*p); //輸出每一項的值
- }
- printf("%lf\n",4*p); //輸出最終pi值
- return 0;
- }
【C-迴圈結構】