




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章循環結構程序設計5.1循環語句概述
5.2for語句和while語句
5.3直到型循環do-while語句
5.4break語句與continue語句5.5應用舉例良好的源程序書寫習慣──注釋(續)[Return]第5章循環結構程序設計5.1循環語句概述
5.215.1循環語句概述求1~100的累計和。根據已有的知識,可以用“1+2+……+100”來求解,但顯然很繁瑣?,F在換個思路來考慮:首先設置一個累計器sum,其初值為0,利用sum+=n來計算(n依次取1、2、……、100),只要解決以下3個問題即可:
(1)將n的初值置為1;
(2)每執行1次“sum+=n”后,n增1;
(3)當n增到101時,停止計算。此時,sum的值就是1~100的累計和。
根據已有的知識,單獨實現每一步都不難。但是,由于需要經常使用這種重復計算結構(稱為循環結構),C語言提供了3條循環語句來實現,以簡化、并規范循環結構程序設計。在C語言中,可用以下語句實現循環:(1)用for語句。(2)用do-while語句。(3)用while語句。5.1循環語句概述求1~100的累計和。2(4)用goto語句和if語句構成循環。使用goto語句實現求解1~100累計和的程序可以如下:main(){intn=1,sum=0;loop:sum+=n;n++;if(n<=100)gotoloop;printf(“sum=%d\n”,sum);}其中“loop:”為語句標號(格式:標號:語句行),其命名遵循標識符命名規則。goto語句格式:goto標號,功能為:使系統轉向標號所在的語句行執行。注意:結構化程序設計方法,主張限制使用goto語句。因為濫用goto語句,將會導致程序結構無規律、可讀性差。
另外,從功能上說,for語句可完全代替當型循環語句while,所以該語句也不是必需的。[Return]
(4)用goto語句和if語句構成循環。使用goto語句實現35.1.1while語句(1)一般格式
while(循環繼續條件)
{ 循環體語句組; }(2)執行過程1.求解“循環繼續條件”表達式。如果其值為非0,轉2;否則轉3。2.執行循環體語句組,然后轉1)。3.執行while語句的下一條。顯然,while循環是for循環的一種簡化形式(缺省“變量賦初值”和“循環變量增值”表達式)。
5.1while語句和用while語句構成的循環結構5.1while語句和用while語句構成的循環結構4[案例5.3]用while語句求1~100的累計和。
/*案例代碼文件名:AL5_3.C*/
/*程序功能:求1~100的累計和*/
main()
{inti=1,sum=0; /*初始化循環控制變量i和累計器sum*/
while(i<=100)
{sum+=i; /*實現累加*/
i++; /*循環控制變量i增1*/
}
printf(“sum=%d\n”,sum);
} [程序演示]程序運行情況如下:
sum=5050
[案例5.3]用while語句求1~100的累計和。
/*55.循環嵌套(1)循環語句的循環體內,又包含另一個完整的循環結構,稱為循環的嵌套。循環嵌套的概念,對所有高級語言都是一樣的。(2)for語句和while語句允許嵌套,do-while語句也不例外。[Return]5.循環嵌套65.2直到型循環do-while語句1.一般格式do{循環體語句組;}while(循環繼續條件); /*本行的分號不能缺省*/當循環體語句組僅由一條語句構成時,可以不使用復合語句形式。2.執行過程執行過程如圖5-3所示。(1)執行循環體語句組。(2)計算“循環繼續條件”表達式。如果“循環繼續條件”表達式的值為非0(真),則轉向(1)繼續執行;否則,轉向(3)。(3)執行do-while的下一條語句。do-while循環語句的特點是:先執行循環體語句組,然后再判斷循環條件。5.2直到型循環do-while語句1.一般格式7[案例5.4]用do-while語句求解1~100的累計和。
/*案例代碼文件名:AL5_4.C*/
/*程序功能:求1~100的累計和*/
main()
{inti=1,sum=0; /*定義并初始化循環控制變量,以及累計器*/
do
{sum+=i; /*累加*/
i++;
}
while(i<=100); /*循環繼續條件:i<=100*/
printf(“sum=%d\n”,sum);
} [程序演示]do-while語句比較適用于處理:不論條件是否成立,先執行1次循環體語句組的情況。除此之外,do-while語句能實現的,for語句也能實現,而且更簡潔。[Return][案例5.4]用do-while語句求解1~100的累計和81.for語句的一般格式
for([變量賦初值];[循環繼續條件];[循環變量增值])
{循環體語句組;}2.for語句的執行過程執行過程如圖5-1所示。(1)求解“變量賦初值”表達式。(2)求解“循環繼續條件”表達式。如果其值非0,執行(3);否則,轉至(4)。(3)執行循環體語句組,并求解“循環變量增值”表達式,然后轉向(2)。(4)執行for語句的下一條語句。3.說明(1)“變量賦初值”、“循環繼續條件”和“循環變量增值”部分均可缺省,甚至全部缺省,但其間的分號不能省略。1.for語句的一般格式
for([變量賦初值9(2)當循環體語句組僅由一條語句構成時,可以不使用復合語句形式,如上例所示。(3)“循環變量賦初值”表達式,既可以是給循環變量賦初值的賦值表達式,也可以是與此無關的其它表達式(如逗號表達式)。例如,for(sum=0;i<=100;i++)sum+=i;for(sum=0,i=1;i<=100;i++)sum+=i; (4)“循環繼續條件”部分是一個邏輯量,除一般的關系(或邏輯)表達式外,也允許是數值(或字符)表達式。
(2)當循環體語句組僅由一條語句構成時,可以不使用復合語句形10在3條循環語句中,for語句最為靈活,不僅可用于循環次數已經確定的情況,也可用于循環次數雖不確定、但給出了循環繼續條件的情況。
[案例5.1]求1~100的累計和。
/*案例代碼文件名:AL5_1.C*/
/*程序功能:求1~100的累計和*/
main()
{inti,sum=0; /*將累加器sum初始化為0*/
for(i=1;i<=100;i++)sum+=i; /*實現累加*/
printf("sum=%d\n",sum);
} [程序演示]程序運行情況如下:sum=5050在3條循環語句中,for語句最為靈活,不僅可11[案例5.2]求n的階乘n!(n!=1*2*……*n)。
/*案例代碼文件名:AL5_2.C*/
/*程序功能:求n!*/
main()
{inti,n;
longfact=1; /*將累乘器fact初始化為1*/
printf(“Inputn:”);scanf(“%d”,&n);
for(i=1;i<=n;i++)fact*=i; /*實現累乘*/
printf("%d!=%ld\n",n,fact);
} [程序演示]程序運行情況如下:
Inputn:5↙
5!=120[案例5.2]求n的階乘n!(n!=1*2*……*n)。
125.4break語句與continue語句為了使循環控制更加靈活,C語言提供了break語句和continue語句。1.一般格式:break;continue;2.功能(1)break:強行結束循環,轉向執行循環語句的下一條語句。(2)continue:對于for循環,跳過循環體其余語句,轉向循環變量增量表達式的計算;對于while和do-while循環,跳過循環體其余語句,但轉向循環繼續條件的判定。3.break和continue語句對循環控制的影響如圖5-4所示。4.說明(1)break能用于循環語句和switch語句中,continue只能用于循環語句中。(2)循環嵌套時,break和continue只影響包含它們的最內層循環,與外層循環無關。[Return]5.4break語句與continue語句為了使循環控135.5應用舉例[例5.5]求Fibonacci數列的前40個數。該數列的生成方法為:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即從第3個數開始,每個數等于前2個數之和。算法設計,請參見第2章第1節(2.1)。參考源程序如下:
/*案例代碼文件名:AL5_5.C*/
main()
{longintf1=1,f2=1; /*定義并初始化數列的頭2個數*/
inti=1; /*定義并初始化循環控制變量i*/
for(;i<=20;i++) /*1組2個,20組40個數*/
{printf(“%15ld%15ld”,f1,f2); /*輸出當前的2個數*/
if(i%2==0)printf(“\n”); /*輸出2次(4個數),換行*/
f1+=f2;f2+=f1; /*計算下2個數*/
}
} [程序演示]5.5應用舉例[例5.5]求Fibonacci數列的14[例5.6]輸出10~100之間的全部素數。所謂素數n是指,除1和n之外,不能被2~(n-1)之間的任何整數整除。算法設計要點:(1)顯然,只要設計出判斷某數n是否是素數的算法,外面再套一個for循環即可。(2)判斷某數n是否是素數的算法:根據素數的定義,用2~(n-1)之間的每一個數去整除n,如果都不能被整除,則表示該數是一個素數。判斷一個數是否能被另一個數整除,可通過判斷它們整除的余數是否為0來實現。參考源程序如下:main()
{inti=11,j,counter=0;
for(;i<=100;i+=2) /*外循環:為內循環提供一個整數i*/
[例5.6]輸出10~100之間的全部素15{for(j=2;j<=i-1;j++) /*內循環:判斷整數i是否是素數*/
if(i%j==0) /*i不是素數*/
break; /*強行結束內循環,執行下面的if語句*/
if(counter%10==0) /*每輸出10個數換一行*/
printf(“\n”);
if(j>=i) /*整數i是素數:輸出,計數器加1*/
{printf(“%6d”,i);
counter++;
}
}
} [程序演示]
思考題:外循環控制變量i的初值從11開始、增量為2的作法有什么好處?為提高運行速度,如何優化內循環?(提示:從減少計算次數角度來考慮)
[Return]{for(j=2;j<=i-1;j++)16良好的源程序書寫習慣──注釋(續)(3)循環結構在C語言中,循環結構由循環語句for、while和do...while來實現。作為注釋,應在它們的前面說明其功能,在循環條件判斷語句行的后面,說明循環繼續條件的含義,如下所示。
1)for語句/*功能*/for(變量初始化;循環條件;變量增值)/*循環繼續條件的含義*/{……}良好的源程序書寫習慣──注釋(續)(3)循環結構172)while語句/*功能說明*/while(循環條件) /*循環繼續條件的含義*/{……}3)do...while語句/*功能說明*/do{……}while(循環條件); /*循環繼續條件的含義*/如果循環嵌套,還應說明每層循環各控制什么。
[Return]
2)while語句18第5章循環結構程序設計5.1循環語句概述
5.2for語句和while語句
5.3直到型循環do-while語句
5.4break語句與continue語句5.5應用舉例良好的源程序書寫習慣──注釋(續)[Return]第5章循環結構程序設計5.1循環語句概述
5.2195.1循環語句概述求1~100的累計和。根據已有的知識,可以用“1+2+……+100”來求解,但顯然很繁瑣。現在換個思路來考慮:首先設置一個累計器sum,其初值為0,利用sum+=n來計算(n依次取1、2、……、100),只要解決以下3個問題即可:
(1)將n的初值置為1;
(2)每執行1次“sum+=n”后,n增1;
(3)當n增到101時,停止計算。此時,sum的值就是1~100的累計和。
根據已有的知識,單獨實現每一步都不難。但是,由于需要經常使用這種重復計算結構(稱為循環結構),C語言提供了3條循環語句來實現,以簡化、并規范循環結構程序設計。在C語言中,可用以下語句實現循環:(1)用for語句。(2)用do-while語句。(3)用while語句。5.1循環語句概述求1~100的累計和。20(4)用goto語句和if語句構成循環。使用goto語句實現求解1~100累計和的程序可以如下:main(){intn=1,sum=0;loop:sum+=n;n++;if(n<=100)gotoloop;printf(“sum=%d\n”,sum);}其中“loop:”為語句標號(格式:標號:語句行),其命名遵循標識符命名規則。goto語句格式:goto標號,功能為:使系統轉向標號所在的語句行執行。注意:結構化程序設計方法,主張限制使用goto語句。因為濫用goto語句,將會導致程序結構無規律、可讀性差。
另外,從功能上說,for語句可完全代替當型循環語句while,所以該語句也不是必需的。[Return]
(4)用goto語句和if語句構成循環。使用goto語句實現215.1.1while語句(1)一般格式
while(循環繼續條件)
{ 循環體語句組; }(2)執行過程1.求解“循環繼續條件”表達式。如果其值為非0,轉2;否則轉3。2.執行循環體語句組,然后轉1)。3.執行while語句的下一條。顯然,while循環是for循環的一種簡化形式(缺省“變量賦初值”和“循環變量增值”表達式)。
5.1while語句和用while語句構成的循環結構5.1while語句和用while語句構成的循環結構22[案例5.3]用while語句求1~100的累計和。
/*案例代碼文件名:AL5_3.C*/
/*程序功能:求1~100的累計和*/
main()
{inti=1,sum=0; /*初始化循環控制變量i和累計器sum*/
while(i<=100)
{sum+=i; /*實現累加*/
i++; /*循環控制變量i增1*/
}
printf(“sum=%d\n”,sum);
} [程序演示]程序運行情況如下:
sum=5050
[案例5.3]用while語句求1~100的累計和。
/*235.循環嵌套(1)循環語句的循環體內,又包含另一個完整的循環結構,稱為循環的嵌套。循環嵌套的概念,對所有高級語言都是一樣的。(2)for語句和while語句允許嵌套,do-while語句也不例外。[Return]5.循環嵌套245.2直到型循環do-while語句1.一般格式do{循環體語句組;}while(循環繼續條件); /*本行的分號不能缺省*/當循環體語句組僅由一條語句構成時,可以不使用復合語句形式。2.執行過程執行過程如圖5-3所示。(1)執行循環體語句組。(2)計算“循環繼續條件”表達式。如果“循環繼續條件”表達式的值為非0(真),則轉向(1)繼續執行;否則,轉向(3)。(3)執行do-while的下一條語句。do-while循環語句的特點是:先執行循環體語句組,然后再判斷循環條件。5.2直到型循環do-while語句1.一般格式25[案例5.4]用do-while語句求解1~100的累計和。
/*案例代碼文件名:AL5_4.C*/
/*程序功能:求1~100的累計和*/
main()
{inti=1,sum=0; /*定義并初始化循環控制變量,以及累計器*/
do
{sum+=i; /*累加*/
i++;
}
while(i<=100); /*循環繼續條件:i<=100*/
printf(“sum=%d\n”,sum);
} [程序演示]do-while語句比較適用于處理:不論條件是否成立,先執行1次循環體語句組的情況。除此之外,do-while語句能實現的,for語句也能實現,而且更簡潔。[Return][案例5.4]用do-while語句求解1~100的累計和261.for語句的一般格式
for([變量賦初值];[循環繼續條件];[循環變量增值])
{循環體語句組;}2.for語句的執行過程執行過程如圖5-1所示。(1)求解“變量賦初值”表達式。(2)求解“循環繼續條件”表達式。如果其值非0,執行(3);否則,轉至(4)。(3)執行循環體語句組,并求解“循環變量增值”表達式,然后轉向(2)。(4)執行for語句的下一條語句。3.說明(1)“變量賦初值”、“循環繼續條件”和“循環變量增值”部分均可缺省,甚至全部缺省,但其間的分號不能省略。1.for語句的一般格式
for([變量賦初值27(2)當循環體語句組僅由一條語句構成時,可以不使用復合語句形式,如上例所示。(3)“循環變量賦初值”表達式,既可以是給循環變量賦初值的賦值表達式,也可以是與此無關的其它表達式(如逗號表達式)。例如,for(sum=0;i<=100;i++)sum+=i;for(sum=0,i=1;i<=100;i++)sum+=i; (4)“循環繼續條件”部分是一個邏輯量,除一般的關系(或邏輯)表達式外,也允許是數值(或字符)表達式。
(2)當循環體語句組僅由一條語句構成時,可以不使用復合語句形28在3條循環語句中,for語句最為靈活,不僅可用于循環次數已經確定的情況,也可用于循環次數雖不確定、但給出了循環繼續條件的情況。
[案例5.1]求1~100的累計和。
/*案例代碼文件名:AL5_1.C*/
/*程序功能:求1~100的累計和*/
main()
{inti,sum=0; /*將累加器sum初始化為0*/
for(i=1;i<=100;i++)sum+=i; /*實現累加*/
printf("sum=%d\n",sum);
} [程序演示]程序運行情況如下:sum=5050在3條循環語句中,for語句最為靈活,不僅可29[案例5.2]求n的階乘n!(n!=1*2*……*n)。
/*案例代碼文件名:AL5_2.C*/
/*程序功能:求n!*/
main()
{inti,n;
longfact=1; /*將累乘器fact初始化為1*/
printf(“Inputn:”);scanf(“%d”,&n);
for(i=1;i<=n;i++)fact*=i; /*實現累乘*/
printf("%d!=%ld\n",n,fact);
} [程序演示]程序運行情況如下:
Inputn:5↙
5!=120[案例5.2]求n的階乘n!(n!=1*2*……*n)。
305.4break語句與continue語句為了使循環控制更加靈活,C語言提供了break語句和continue語句。1.一般格式:break;continue;2.功能(1)break:強行結束循環,轉向執行循環語句的下一條語句。(2)continue:對于for循環,跳過循環體其余語句,轉向循環變量增量表達式的計算;對于while和do-while循環,跳過循環體其余語句,但轉向循環繼續條件的判定。3.break和continue語句對循環控制的影響如圖5-4所示。4.說明(1)break能用于循環語句和switch語句中,continue只能用于循環語句中。(2)循環嵌套時,break和continue只影響包含它們的最內層循環,與外層循環無關。[Return]5.4break語句與continue語句為了使循環控315.5應用舉例[例5.5]求Fibonacci數列的前40個數。該數列的生成方法為:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即從第3個數開始,每個數等于前2個數之和。算法設計,請參見第2章第1節(2.1)。參考源程序如下:
/*案例代碼文件名:AL5_5.C*/
main()
{longintf1=1,f2=1; /*定義并初始化數列的頭2個數*/
inti=1; /*定義并初始化循環控制變量i*/
for(;i<=20;i++) /*1組2個,20組40個數*/
{printf(“%15ld%15ld”,f1,f2); /*輸出當前的2個數*/
if(i%2==0)printf(“\n”); /*輸出2次(4個數),換行*/
f1+=f2;f2+=f1; /*計算下2個數*/
}
} [程序演示]5.5應用舉例[例5.5]求Fibonacci數列的32[例5.6]輸出10~100之間的全部素數。所謂素數n是指,除1和n之外,不能被2~(n-1)之間的任何整數整除。算法設計要點:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論