專升本第5章循環(huán)結(jié)構(gòu)_第1頁
專升本第5章循環(huán)結(jié)構(gòu)_第2頁
專升本第5章循環(huán)結(jié)構(gòu)_第3頁
專升本第5章循環(huán)結(jié)構(gòu)_第4頁
專升本第5章循環(huán)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章循環(huán)結(jié)構(gòu)內(nèi)容提要:循環(huán)結(jié)構(gòu)程序設(shè)計概述構(gòu)成循環(huán)的語句ifgoto、while、do-while、for幾種循環(huán)的比較循環(huán)的嵌套break語句和continue語句循環(huán)控制的應(yīng)用范圍很廣,循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序三種基本結(jié)構(gòu)之一,熟練掌握循環(huán)結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的概念是程序設(shè)計的基本要求.實現(xiàn)循環(huán)的語句(四種):1、用goto語句和if語句構(gòu)成循環(huán);不提倡2、用while語句;當(dāng)型循環(huán)—先判斷后執(zhí)行3、用dowhile語句;直到型循環(huán)—先執(zhí)行后判斷4、用for語句;多功能§5.1while和do…while循環(huán)結(jié)構(gòu)§5.1.1while語句的一般形式一般形式:while(表達式)循環(huán)體語句

特點:先判斷,后執(zhí)行.表達式語句非00當(dāng)表達式的值為真(非0)時,執(zhí)行其中的內(nèi)嵌語句(循環(huán)體),然后回過頭來再判斷表達式的值,如此重復(fù);當(dāng)表達式為假(0)時,結(jié)束循環(huán)。如:k=1;

while(k<=100){s=s+k;k++;}循環(huán)控制變量循環(huán)控制表達式循環(huán)體注意:(1)循環(huán)體若包含兩條或兩條以上的語句,應(yīng)用花括弧括起來,以復(fù)合語句形式出現(xiàn);(2)應(yīng)有使循環(huán)結(jié)束的語句.循環(huán)體中,必須有改變循環(huán)控制變量值的語句;(3)循環(huán)前,必須給循環(huán)控制變量賦初值;(4)、循環(huán)體可以為空.如:while((c=getchar())!=‘A’);

等價:c=getchar();while(c!=‘A’)c=getchar();例5-1:計算1到3的累加和#include<stdio.h>voidmain(){intk,s=0;k=1;while(k<=3){s=s+k;k++;}printf("%d\n",s);}注意:s,k的初值s=0,k=1;當(dāng)k3s=s+k;k++;循環(huán)體例5-2:讀程序#include<stdio.h>voidmain(){intk,s,n;printf("entern:");scanf("%d",&n);s=0;k=1;while(k<=n){s+=k;k++;}printf("sum%d=%d\n",n,s);}#include<stdio.h>voidmain(){intk,t,n;printf("entern:");scanf("%d",&n);t=1;k=1;while(k<=n){t*=k;k++;}printf("%d!=%d\n",n,t);}#include<stdio.h>voidmain(){intk,t,n,s=0;printf("entern:");scanf("%d",&n);t=1;k=1;while(k<=n){t*=k;s+=t;k++;}printf("s=%d\n",s);}s=1!+2!+3!+…+n!例5-3:求100以內(nèi)的奇數(shù)、偶數(shù)之和分析:設(shè)偶數(shù)和放在even變量中even=2+4+6+…+100奇數(shù)和放在odd變量中odd=1+3+5+…+99計數(shù)器n初值為1while(n<100){odd=odd+n;even=even+(n+1);n=n+2;}#include<stdio.h>voidmain(){intn=1,odd=0,even=0;while(n<100){odd+=n;even+=n+1;n+=2;}printf("odd和=%d,even和=%d\n",odd,even);}運行結(jié)果:odd和=2500,even和=2550思考:n+=2改為n++#include<stdio.h>voidmain(){intn=1,odd=0,even=0;while(n<=100){if(n%2==0)even+=n;elseodd+=n;n++;}printf("odd和=%d,even和=%d\n",odd,even);}運行結(jié)果:odd和=2500,even和=2550§5.1.2while語句使用說明(1)While語句是先判斷條件,然后決定是否執(zhí)行循環(huán)體;(2)為使循環(huán)能正常結(jié)束,應(yīng)保證每次執(zhí)行循環(huán)體后,表達式的值會有一種向假變化的趨勢;(3)在進入循環(huán)之前應(yīng)做好有關(guān)變量的初始化賦值操作.例5-4編寫一個程序,用戶從鍵盤輸入5個數(shù),求它們的和并輸出結(jié)果.#include<stdio.h>voidmain(){floatx,sum=0;inti=0;while(i<5){scanf(“%f”,&x);sum+=x;i++;}printf(“%f”,sum);}§5.1.3do—while語句一般流程圖:語句表達式非00一般形式:do循環(huán)體語句

while(表達式);該語句的特點:先執(zhí)行語句,后判斷表達式.當(dāng)表達式的值為非零時,循環(huán)執(zhí)行,當(dāng)表達式的值為零時,結(jié)束循環(huán).注意:循環(huán)體內(nèi)要有使循環(huán)結(jié)束的語句.比較:while語句do—while語句一般情況二者相同,但在while后面的表達式一開始就為假(0值)時,兩種循環(huán)結(jié)果是不同的.voidmain(){intsum=0,i;scanf(“%d”,&i);while(i<=10){sum=sum+i;i++;}printf(%d”,sum);}當(dāng)i值小于或等于10時,二者結(jié)果相同,而當(dāng)i>10時,二者結(jié)果不同。因為此時對while循環(huán),不執(zhí)行循環(huán),而對do—while循環(huán),要執(zhí)行一次循環(huán)體。voidmain(){intsum=0,i;scanf(“%d”,&i);do{sum=sum+i;i++;}while(i<=10);printf(%d”,sum);}例5-5編寫一個程序,用戶從鍵盤輸入5個數(shù),求它們的和并輸出結(jié)果.#include<stdio.h>voidmain(){floatx,sum=0;inti=0;do{scanf(“%f”,&x);sum+=x;i++;}while(i<5);printf(“%f”,sum);}§5.1.4do...while語句使用說明(1)do…while語句不論循環(huán)條件是否成立,循環(huán)語句總會至少被執(zhí)行一次;(2)為使循環(huán)能正常結(jié)束,應(yīng)保證每次執(zhí)行循環(huán)體后,表達式的值會有一種向假變化的趨勢;(3)在進入循環(huán)之前應(yīng)做好有關(guān)變量的初始化賦值操作.§5.2for循環(huán)結(jié)構(gòu)和循環(huán)的嵌套

§5.2.1for循環(huán)結(jié)構(gòu)一般形式:for(表達式1;表達式2;表達式3)循環(huán)體語句執(zhí)行過程:求解表達式1表達式2語句求解表達式3for語句的下一語句

真假注:表達式1在進入循環(huán)之前求解(循環(huán)變量賦初值)表達式3是循環(huán)體的一部分for循環(huán)的其他形式:for(表達式1;表達式2;表達式3)語句表達式1可以移到for語句的前邊表達式3可以移到內(nèi)嵌語句后邊等價:表達式1;

for(;表達式2;

{語句表達式3;}注意:(1)表達式1省略時,應(yīng)在for之前給循環(huán)變量賦初值例子⑸表達式2一般是關(guān)系表達式或邏輯表達式;也可以是字符表達式或數(shù)值表達式.例如:for(k=1;k-4;k++)s=s+k;僅當(dāng)k的值等于4時終止循環(huán).k-4是數(shù)值表達式.(2)、表達式2省略時,不判斷循環(huán)條件,將成為死循環(huán)(3)表達式3省略時,循環(huán)體內(nèi)應(yīng)有使循環(huán)改變的語句。(4)、同時省略表達式1和表達式3,只有表達式2,此時相當(dāng)于while語句例子例5-6:讀程序,判斷程序功能#include<stdio.h>voidmain(){charc;for(;(c=getchar())!='\n';)putchar(c);putchar('\n');}功能:讀入一個字符,當(dāng)它不是回車時就輸出。例5-7編寫一個程序,用戶從鍵盤輸入5個數(shù),求它們的和并輸出結(jié)果.#include<stdio.h>voidmain(){floatx,sum=0;inti;for(i=0;i<5;i++){scanf(“%f”,&x);sum+=x;i++;}printf(“%f”,sum);}作業(yè):求100以內(nèi)的奇數(shù)、偶數(shù)之和(用for語句實現(xiàn))§5.2.2循環(huán)的嵌套循環(huán)的嵌套:一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu).三種循環(huán)(while循環(huán)、do—while循環(huán)、for循環(huán))可以互相嵌套.

while(){…while(){…}}while(){…do{…}while()}for(;;){…for(;;){…}}do{…do{…}while()}while()while(){…for(;;){…}}do{…while(){…}}While()do{…for(;;){…}}While()for(;;){…while(){…}}for(;;){…do{…}while()}【例5.7】編寫程序,計算s=1!+2!+3!+...+n!,其中n是由用戶輸入的整數(shù)(小于8),計算完成后顯示結(jié)果。#include<stdio.h>voidmain(){inti,j,x,n,s=0;/*定義并初始化變量*/printf("請輸入n的值:");scanf("%d",&n);/*輸入n的值*/外層循環(huán)內(nèi)層循環(huán)

for(i=1;i<=n;i++){j=1;x=1;/*循環(huán)控制變量初始化*/while(j<=i){x*=j;/*把j累乘到x中*/j++;/*循環(huán)控制變量自增*/}s+=x;/*累加到s變量中*/}printf("s=%d\n",s);/*顯示結(jié)果*/}

嵌套的循環(huán)控制變量不能相同內(nèi)循環(huán)變化快,外循環(huán)變化慢。如:#include<stdio.h>voidmain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%d",i,j,i*j);printf("\n");}}正確確定循環(huán)體。循環(huán)控制變量常與求解的問題掛鉤。例5-8:試找出滿足下列條件的所有三位數(shù):①其百位數(shù)不大于2;②將個位與百位對換,得到的三位數(shù)是原三位數(shù)的兩倍多;分析:用三重循環(huán)的控制變量分別表示百位數(shù)、十位數(shù)和個位數(shù)。百位數(shù)i取值1~2十位數(shù)j取值0~9個位數(shù)k取值2-9n=100*i+10*j+km=100*k+10*j+i若m>=2*n并且m<=3*n,則n為滿足條件的三位數(shù)#include<stdio.h>voidmain(){inti,j,k,n,m,s=0;for(i=0;i<=2;++i)for(j=0;j<=9;++j)for(k=2;k<=9;++k){n=100*i+10*j+k;m=100*k+10*j+i;if(m>=2*n&&m<3*n){++s;printf("%d",n);if(s%10==0)printf("\n");}}}思考并編程實現(xiàn):用一重循環(huán)控制變量i.§5.3流程轉(zhuǎn)向語句§5.3.1goto語句一、goto語句一般形式:goto語句標(biāo)號語句標(biāo)號用于定義程序中的某個位置,用標(biāo)識符表示,由字母、數(shù)字、下劃線組成,第一個字符必須為字母或下劃線,不能用整數(shù)作標(biāo)號.goto123(×)goto

語句功能是無條件地轉(zhuǎn)到標(biāo)號所指的位置。二、用if-goto語句構(gòu)成循環(huán)例5-9:求1到3的和#include<stdio.h>voidmain(){inti,sum=0;i=1;loop:if(i<=3){sum=sum+i;i++;gotoloop;}printf("運行結(jié)果:%d\n",sum);}運行結(jié)果:6冒號是標(biāo)號的標(biāo)志§5.3.2break語句break語句:用于退出循環(huán).例如注意:break語句只能用于結(jié)束循環(huán)語句和switch語句.#include<stdio.h>voidmain(){inti=1,s=0;while(i<100){s+=i;if(s>999){break;}}printf("s=%d",s);}#include<stdio.h>#definePI3.14voidmain(){floatr,area;for(r=1;r<=10;r++){area=PI*r*r;if(area>100)break;printf("%f",area);}}continue語句:結(jié)束本次循環(huán),繼續(xù)進行下次是否執(zhí)行循環(huán)的判定.(提前下一輪的循環(huán).)

例如§5.3.3continue語句例5-10將100—200的不能被3整除的數(shù)輸出#include<stdio.h>voidmain(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d",n);}}也可以用if語句處理:if(n%3!=0)printf("%d",n);§5.3.3幾種循環(huán)的比較(1)四種循環(huán)可以用來處理同一問題.for語句的功能強,建議使用,goto語句一般不提倡.(2)while,do-while循環(huán)的初始化在語句之前,使循環(huán)結(jié)束的語句在循環(huán)體中,如i=i+1,而for語句的初始化在表達式1中實現(xiàn).(3)while和for循環(huán)是先判斷表達式后執(zhí)行語句,而do-while循環(huán)是先執(zhí)行語句后判斷表達式.(4)break、continue語句可以結(jié)束switch結(jié)構(gòu)和三種循環(huán)§5.4循環(huán)結(jié)構(gòu)程序設(shè)計舉例§

5.4.1循環(huán)的執(zhí)行次數(shù)例5-11編寫一個程序,接收用戶從鍵盤輸入的字符,當(dāng)用戶輸入回車時表示確認輸入,統(tǒng)計輸入了多少個字符.#include<stdio.h>voidmain(){charc;inti=0;c=getchar();while(c!='\n'){i++;c=getchar();}printf("%d",i);}§

5.4.2選擇循環(huán)語句例5-12編寫一個程序,輸入一個大于或等于0的整數(shù),計算它是一個幾位數(shù).#include<stdio.h>voidmain(){intx,n;printf("請輸入一個整數(shù):");scanf("%d",&x);n=0;do{n++;x/=10;}while(x>0);printf("位數(shù)是:%d\n",n);}例5-13編程實現(xiàn)輸出n層用字符*構(gòu)成的金字塔圖形,n是由用戶輸入的正整數(shù).#include<stdio.h>voidmain(){inti,j,n;printf("請輸入行數(shù):");scanf("%d",&n);for(i=1;i<=n;i++){for(j=0;j<n-i;j++){printf("");}for(j=0;j<2*i-1;j++){printf("*");}printf("\n");}}例5-14編程計算e的值.#include<stdio.h>voidmain(){doublet=1,e=1,i=1;/*定義變量并初始化*/while(t>=1e-5)/*根據(jù)累加數(shù)據(jù)項的大小來判斷*/{t*=1.0/i;/*計算要累加的數(shù)據(jù)項*/e+=t;/*累加數(shù)據(jù)到e中*/i++;/*變量更新準備用來計算下一個數(shù)據(jù)項*/}printf("e=%f\n",e);/*顯示結(jié)果*/}§

5.4.3提前結(jié)束循環(huán)例5-15用戶輸入一個數(shù),判斷它是不是素數(shù)并給出其他判斷結(jié)果.#include<stdio.h>voidmain(){inti,x,flag=1;/*定義變量,初始化標(biāo)志變量flag為1*/printf("請輸入一個數(shù):");/*提示用戶輸入*/scanf("%d",&x);/*接收輸入*/for(i=2;i<x;i++)/*循環(huán)判斷*/{if(x%i==0)/*判斷能否整除*/{flag=0;break;}/*能整除則不是素數(shù),終止循環(huán)*/}if(flag)/*根據(jù)標(biāo)志變量flag的值顯示結(jié)果*/printf("%d是素數(shù)!",x);elseprintf("%d不是素數(shù)!",x);}#include<stdio.h>#include<math.h>voidmain(){intm,i,k;scanf("%d",&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf("%disaprimenumber\n",m);elseprintf("%disnotaprimenumber\n",m);}§

5.4.4其他應(yīng)用舉例例5-16張丘建〈算經(jīng)〉中提出”百雞問題“:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、母、雛各幾何?(1)、分析:cocks+hens+chicks=1005*cocks+3*hens+chicks/3=100其中:0≤cocks≤19,0≤hens≤33,0≤chicks≤100思路:依次取cocks的值域中的值,然后求其余兩數(shù),看是否合乎題意(2)、用計算機語言寫出程序#include<stdio.h>voidmain(){intcocks=0,hens,chicks;while(cocks<=19){hens=0;while(hens<=33){chicks=100-cocks-hens;if((5.0*cocks+3.0*hens+chicks/3.0)==100.0)printf("%d%d%d\n",cocks,hens,chicks);hens++;}cocks++;}}例5-17猜數(shù)游戲。由計算機隨機產(chǎn)生一個在1-100范圍內(nèi)的隨機數(shù),由游戲者猜,猜數(shù)過程中,如果猜錯,計算機提示猜高了或猜低了,如果猜對,游戲者獲勝;游戲者共可以猜10次,若10次均未猜對,則計算機獲勝。#include

溫馨提示

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

評論

0/150

提交評論