項目4-循環(huán)結(jié)構(gòu)程序設計1_第1頁
項目4-循環(huán)結(jié)構(gòu)程序設計1_第2頁
項目4-循環(huán)結(jié)構(gòu)程序設計1_第3頁
項目4-循環(huán)結(jié)構(gòu)程序設計1_第4頁
項目4-循環(huán)結(jié)構(gòu)程序設計1_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

循環(huán):跑圈循環(huán)結(jié)構(gòu)就像一圈圈地跑足球場,跑完一圈再跑一圈。也就是說,在符合的條件下,重復執(zhí)行某項任務。像400米一圈的跑道,跑800米的話就跑2圈,當跑完第一圈接著跑第二圈,第二圈結(jié)束已經(jīng)到達800米,終止跑步。i=1;//從第1圈開始跑do{//跑10圈

printf("在跑第"%d"圈。",i); i++;}while(i<=10);任務4.1用while語句實現(xiàn)的循環(huán)結(jié)構(gòu)任務說明在日常生活中遇到的有些循環(huán)問題,事前不知道循環(huán)次數(shù),這時可以使用while語句實現(xiàn)循環(huán)。在本任務中,將學習while語句的格式、執(zhí)行流程和應用方法。任務實施1.任務功能編寫程序,用while語句求1+2+3+…+100的值。2.編程思路〔1〕取數(shù)。第一個數(shù)為1,其后的數(shù)都是在前一個數(shù)的根底上加1得到,直至100?!?〕求和??啥x一個變量sum來存放和,給sum賦初值0。當?shù)?次判斷表達式i<=100成立時,第一次執(zhí)行循環(huán)體,sum+1賦給sum,i的值變?yōu)?;當?shù)?次判斷表達式i<=100成立時,第二次執(zhí)行循環(huán)體時,sum+2賦給sum,i的值變?yōu)?;…。以此類推,直至循環(huán)結(jié)束,執(zhí)行流程如圖4-1所示。圖4-1求1+2+3+…+100流程圖3.源程序Ex4-1.c#include<stdio.h>voidmain(){inti=1,sum=0;//循環(huán)控制變量i和累計器sum初始化

while(i<=100){sum+=i;//累加

i++; //i自加

}printf("sum=%d\n",sum);//輸出結(jié)果}4.運行、調(diào)試用VC++6.0開發(fā)環(huán)境下,編輯、編譯和調(diào)試源程序Ex4-1.c。程序運行的結(jié)果為:sum=5050任務拓展在源程序Ex4-1.c的根底上,假設把while的循環(huán)體改為:{i++; /*i自加*/sum+=i;/*累加*/}請同學們分析一下結(jié)果為多少?如果想得到正確的結(jié)果sum=5050,那么如何修改源程序Ex4-1.c?1.while語句格式

while又叫“當型”循環(huán)語句,它的格式為:

while(表達式)

{

循環(huán)體語句;

}相關(guān)知識2.while語句執(zhí)行流程

while語句執(zhí)行流程如圖4-2所示。

while循環(huán)執(zhí)行過程是:

①求解表達式(循環(huán)繼續(xù)條件)。如果其值為非0,轉(zhuǎn)第②步;否則轉(zhuǎn)第③步。②執(zhí)行循環(huán)體語句組,然后轉(zhuǎn)第①步。③執(zhí)行while語句的下一條。圖4-2while語句的執(zhí)行流程

注意事項:(1)循環(huán)體如包括有一個以上的語句,則必須用{}括起來,組成復合語句。(2)while語句的表達式一般是關(guān)系表達或邏輯表達式,也可以是其它表達式,只要表達式的值為非0,即可使循環(huán)繼續(xù)。(3)由于while語句是先判斷表達式,后執(zhí)行循環(huán)體語句,所以循環(huán)體語句有可能一次也不執(zhí)行。

課堂練習:

編寫程序,求的值??偨Y(jié):用while循環(huán)求#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體課堂練習:功能:為指定的成績進行加分,直到分數(shù)大于等于60分為止,輸出加分前的成績和加分后的成績,并且統(tǒng)計加分的次數(shù)。步驟:1.定義一個變量,用來保存加分的次數(shù)。2.使用循環(huán)為成績加分3.每次執(zhí)行循環(huán)加分操作,加1分,并且統(tǒng)計加分的次數(shù)

P72思考與練習:2.〔1〕〔2〕1.do-while語句格式do-while語句也稱之為“直到〞循環(huán)語句,它的格式為:do{循環(huán)體語句;}while(表達式);2.dowhile語句執(zhí)行流程do-while語句執(zhí)行流程如圖4-4所示。do-while循環(huán)執(zhí)行流程是:①執(zhí)行循環(huán)體語句。②求解表達式。如果表達式的值為非0〔真〕,那么轉(zhuǎn)向第①步繼續(xù)執(zhí)行;否那么,轉(zhuǎn)向第③步。③執(zhí)行do-while的下一條語句。do-while循環(huán)語句的特點是:先執(zhí)行循環(huán)體語句,然后再求解表達式,決定是否繼續(xù)循環(huán)。循環(huán)體語句至少被執(zhí)行一次。相關(guān)知識圖4-4do-while語句的執(zhí)行流程本卷須知:〔1〕“while(表達式)〞后面的分號不能省?!?〕當循環(huán)體語句僅由一條語句構(gòu)成時,可以省略大括號{}。

【例4-1】用do-while語句求1+2+3+…+100的值。#include<stdio.h>voidmain(){inti=1,sum=0;//循環(huán)控制變量i和累計器sum初始化

do{sum+=i;//累加

i++;//變量i自加

}while(i<=100);printf("sum=%d\n",sum);}任務說明while語句在進入循環(huán)之前先判斷循環(huán)條件。但在日常生活中,有時也需要先無條件執(zhí)行一次循環(huán)體語句,然后再根據(jù)判斷條件確定是否重復執(zhí)行循環(huán)體語句。這時可以使用do-while語句實現(xiàn)循環(huán)控制。在本任務中,將學習do-while語句的格式、執(zhí)行流程和應用方法。任務實施1.任務功能編寫程序,計算數(shù)學式的近似值。要求至少累加到1/n<=0.00984為止。輸出循環(huán)次數(shù)及累加和。

2.編程思路圖4-3計算數(shù)學式近似值的流程圖

3.源程序Ex4-2.c#include<stdio.h>voidmain(){intn=1,N;floatsum=0;do{sum=sum+(float)1/n;//將每一項累加到sum中

n++;//變量n自加,求新的分母值

}while((float)1/n>0.00984);N=n-1;//求循環(huán)的次數(shù)

printf("N=%d\nsum=%.4f\n",N,sum);}4.運行、調(diào)試用VC++6.0開發(fā)環(huán)境下,編輯、編譯和調(diào)試源程序Ex4-2.c。程序運行的結(jié)果為:任務拓展用while語句編寫循環(huán)結(jié)構(gòu)程序,重新計算本任務中的數(shù)學式的近似值。要求至少累加到1/n≤0.00984為止。

作業(yè)與練習補充題思考與練習P733.編程題〔1〕1.for語句格式

for(表達式1;表達式2;表達式3)

{

循環(huán)體語句;

}“表達式1”-對循環(huán)變量賦初值?!氨磉_式2”-判斷循環(huán)變量是否滿足繼續(xù)循環(huán)的條件。“表達式3”-改變循環(huán)變量。2.for語句的執(zhí)行流程執(zhí)行過程流程如圖4-6所示。相關(guān)知識圖4-6for語句的執(zhí)行流程【例4-2】用for語句求1~100的累計和。#include<stdio.h>voidmain(){inti,sum=0;//循環(huán)控制變量i和累計器sum初始化for(i=1;i<=100;i++){sum+=i;//累加

}

printf("sum=%d\n",sum);}程序運行的結(jié)果為:sum=50503.for語句的幾點說明〔1〕“表達式1〞、“表達式2〞和“表達式3〞局部均可缺省,甚至全部缺省,但其間的分號不能省略。如for(;;)①表達式1省略。例:i=1;for(;i<=100;i++)sun+=i;由此可以看出表達式1并不是真的省略了,而是換了一個地方。②表達式3也可以省略。例:for(i=1;i<=100;){sum+=i;i++;}③表達式2省略。例如:for(i=1;;i++)sum+=i;如果表達式2省略,就不判斷循環(huán)條件,即認為循環(huán)條件始終為真,循環(huán)無終止地進行,如果沒有別的方法退出循環(huán),將成為死循環(huán)。循環(huán)條件2省略的流程如圖4-7所示。

圖4-7循環(huán)條件省略流程圖〔2〕當循環(huán)體語句僅由一條語句構(gòu)成時,可以省略大括號{}?!?〕表達式1,既可以是給循環(huán)變量賦初值的賦值表達式,也可以是其它表達式〔如逗號表達式〕。例如:for(sum=0,i=1;i<=100;i++)sum+=i;〔4〕表達式2是一個邏輯量,除一般的關(guān)系〔或邏輯〕表達式外,也允許是數(shù)值〔或字符〕表達式。C語言將非0值看成是邏輯真,將0值看成是邏輯假。

P72思考與練習:3.〔3〕任務4.3用for語句實現(xiàn)的循環(huán)結(jié)構(gòu)任務說明在三種循環(huán)語句中,for語句功能更強、最為靈活,不僅可用于循環(huán)次數(shù)已經(jīng)確定的情況,也可用于循環(huán)次數(shù)雖不確定,但給出了循環(huán)繼續(xù)的條件的情況。本任務將學習for語句的格式、執(zhí)行流程和應用方法。任務實施1.任務功能編寫程序,求n的階乘n!〔n!=1*2*…*n〕。2.編程思路由任務要求可知n!=1*2*…*n,假設從鍵盤輸入n的值為5,那么5!=1*2*3*4*5=120。編程時,可首先設一個累乘器fact用來存放乘積,初值為1。然后分別把1,2,…,n與fact相乘后賦值給fact。具體重復運算如下:圖4-5求n!的流程圖

第1次:fact=fact*1

第2次:fact=fact*2

第n次:fact=fact*n

執(zhí)行流程如圖4-5所示。3.源程序Ex4-3.c

#include<stdio.h>voidmain(){ 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);}4.運行、調(diào)試用VC++6.0開發(fā)環(huán)境下,編輯、編譯和調(diào)試源程序。程序運行的結(jié)果為:Inputn:5<回車>5!=120任務拓展用while循環(huán)求n的階乘n!〔n!=1×2×…×n〕,體會與本任務中用for循環(huán)求階乘n!的不同之處。三種循環(huán)的比較while和do...while可以根據(jù)具體情況選用。假設有一種棋類游戲,首先擲骰子,假設不為6,前進骰子的點數(shù)的步長;假設為6,前進骰子的點數(shù)的步長,并可以再擲一次。循環(huán)的嵌套三種循環(huán)可互相嵌套,層數(shù)不限不允許交叉,循環(huán)與分支可以相互嵌套但不允許交叉外層循環(huán)可包含兩個以上內(nèi)循環(huán),但不能相互交叉嵌套循環(huán)的執(zhí)行流程

(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)

1.for循環(huán)嵌套

for循環(huán)嵌套如圖4-9~圖4-11所示。圖4-9for與for循環(huán)的嵌套圖4-10for與while循環(huán)的嵌套圖4-11for與do-while循環(huán)的嵌套循環(huán)嵌套相關(guān)知識

2.while循環(huán)嵌套while循環(huán)嵌套如圖4-12~圖4-14所示。圖4-12while與while循環(huán)的嵌套圖4-13while與for循環(huán)的嵌套圖4-14while與do-while循環(huán)的嵌套3.do-while循環(huán)嵌套do-while循環(huán)嵌套如圖4-15~圖4-17所示。圖4-15do-while與do-while嵌套圖4-16do-while與for嵌套圖4-17do-while與while嵌套

4.課堂練習〔1〕設計一程序,計算1!+2!+3!+…+10!。執(zhí)行流程如圖4-18所示。#include<stdio.h>voidmain(){inti,j,fact,sum=0;for(i=1;i<=10;i++){fact=1; for(j=1;j<=i;j++) { fact=fact*j;} sum=sum+fact;}printf("sum=%ld\n",sum);}圖4-18階乘和的執(zhí)行流程〔2〕設計一程序,顯示輸出如下所示的矩形。矩形圖案如圖4-19所示,執(zhí)行流程如圖4-20所示。#include<stdio.h>voidmain(){

inti,j;

for(i=1;i<=5;i++){for(j=1;j<=9;j++){ printf("*");}printf("\n");}}圖4-20輸出矩形圖案的執(zhí)行流程圖4-19矩形圖案

〔3〕設計一程序,顯示輸出如下所示的三角形。三角形圖案如圖4-21所示,執(zhí)行流程如圖4-22所示。#include<stdio.h>voidmain(){

inti,j,k;

for(i=1;i<=5;i++)

{

for(j=1;j<=5-i;j++)

{

printf("");

}

for(k=1;k<=2*i-1;k++)

{

printf("*");

}

printf("\n");

}}圖4-21三角形圖案

圖4-22輸出三角形圖案的執(zhí)行流程分析:共有5行,外循環(huán)變量i:1~5第一行輸出4個空格,1個星號第二行輸出3個空格,3個星號第三行輸出2個空格,5個星號第5行輸出0個空格,9個星號任務4.4循環(huán)嵌套任務說明假設在循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi),又出現(xiàn)了另一個完整的循環(huán)結(jié)構(gòu),那么稱為“循環(huán)嵌套〞。通常把里面的循環(huán)稱為“內(nèi)循環(huán)〞,外面的循環(huán)稱為“外循環(huán)〞。本任務主要學習循環(huán)嵌套編程的方法。任務實施1.任務功能用循環(huán)嵌套編寫程序輸出九九乘法口訣表。2.編程思路乘法表的特點是:〔1〕共有9行;〔2〕每行的式子數(shù)很有規(guī)律,第幾行,就有幾個式子;〔3〕對于每一個式子,既與所在的行有關(guān),又與所在的行上的位置〔列〕有關(guān)。我們先看輸出其中一行的情況。假設要輸出的是第i行,我們知道i行共有i個式子,可用如下程序段實現(xiàn):for(j=1;j<=i;j++) printf("%3d*%d=%-2d",j,i,i*j);如果給上述程序段加一個外循環(huán),使i從1取到9,每執(zhí)行一次內(nèi)循環(huán),就輸出了乘法表中對應行的所有式子。執(zhí)行流程如圖4-8所示。圖4-8輸出九九乘法口訣表執(zhí)行流程圖3.源程序Ex4-4.c#include<stdio.h>//包含頭文件voidmain(){ inti,j,k=0;for(i=1;i<=9;i++)//外循環(huán)執(zhí)行9次

{ for(j=1;j<=i;j++)//內(nèi)循環(huán)每次的執(zhí)行次數(shù)與i有關(guān)

{ k=i*j; printf("%3d*%d=%-2d",j,i,k);//輸出結(jié)果

}printf("\n");//換行

}}4.運行、調(diào)試用VC++6.0開發(fā)環(huán)境下,編輯、編譯和調(diào)試源程序。程序運行的結(jié)果為:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81任務拓展用雙層for循環(huán)打印下面的圖形。********************提示:外層用一個for循環(huán)〔控制圖形所在的行〕,內(nèi)層用兩個for循環(huán)〔一個用來控制每行圖形中“*〞輸出,另一用來控制每行圖形中空格“〞的輸出?!橙蝿?.5break、continue語句的應用任務說明前面介紹的while,do-while,for語句,都是在判定循環(huán)條件不成立時,才結(jié)束整個循環(huán)。在實際應用中,有時還要求在循環(huán)的中途退出循環(huán),這就要用到break,continue語句。如果需要將程序轉(zhuǎn)到指定的位置去執(zhí)行,可以采用goto語句。本任務介紹以上三種語句的使用方法。任務實施

1.任務功能編寫程序,把100~200之間的能被3整除的數(shù)輸出,并且每行輸出10個。

2.編程思路重復判斷100~200之間的每一個數(shù),可用前面介紹的while、do-while和for語句實現(xiàn)。假設某個數(shù)不能被3整除,那么可提前結(jié)束本次循環(huán)而直接進入下次循環(huán),用continue即可。執(zhí)行流程如圖4-23所示。圖4-23執(zhí)行流程3.源程序Ex4-5.c#include<stdio.h>voidmain(){intn,count=0;//count用來計數(shù)for(n=100;n<=200;n++){if(n%3!=0)continue;//不能被3整除的跳過count++;printf("%5d",n);if(count%10==0)printf("\n");//假設count能被10整除,換行}printf("\n");//換行}4.運行、調(diào)試用VC++6.0開發(fā)環(huán)境下,編輯、編譯和調(diào)試源程序。任務拓展求100~200之間的全部素數(shù)。提示:在源程序Ex4-5.c的根底上,用一個for循環(huán)嵌套即可處理。1.break語句break語句的格式很簡單,由關(guān)鍵字break和分號組成。break語句的一般格式是:break;該語句只用于以下兩個場合:〔1〕在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論