C語(yǔ)言中 循環(huán)結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言中 循環(huán)結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言中 循環(huán)結(jié)構(gòu)_第3頁(yè)
C語(yǔ)言中 循環(huán)結(jié)構(gòu)_第4頁(yè)
C語(yǔ)言中 循環(huán)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第五章

循環(huán)控制結(jié)構(gòu)

11精選ppt本章知識(shí)點(diǎn):while語(yǔ)句的一般形式及應(yīng)用for語(yǔ)句的一般形式及應(yīng)用do...while語(yǔ)句的一般形式及應(yīng)用多重循環(huán)結(jié)構(gòu)的使用break語(yǔ)句和continue語(yǔ)句22精選ppt5.1while語(yǔ)句

語(yǔ)句的一般形式如下: while(表達(dá)式)

循環(huán)體語(yǔ)句說(shuō)明:while語(yǔ)句屬于“當(dāng)型”循環(huán)。表達(dá)式循環(huán)體語(yǔ)句假(0)真(非0)圖5.1while語(yǔ)句流程圖3精選ppt說(shuō)明:(1)while是關(guān)鍵字。while后圓括號(hào)內(nèi)的表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是C語(yǔ)言中任意合法的表達(dá)式。(2)循環(huán)體語(yǔ)句可以是一條語(yǔ)句,也可以是多條語(yǔ)句,如果循環(huán)體語(yǔ)句包含多條語(yǔ)句,則需要用一對(duì)花括號(hào)“{}”把循環(huán)體語(yǔ)句括起來(lái),采用復(fù)合語(yǔ)句的形式。while(表達(dá)式)循環(huán)體語(yǔ)句4精選ppt【例5.1】求前100個(gè)自然數(shù)的和

。#include<stdio.h>intmain(){ intn,sum; n=1;sum=0;/*變量賦初值*/ while(n<=100)

{ sum=sum+n;/*累加求和*/ n++;/*修改基本數(shù)據(jù)項(xiàng)n*/ } printf(" sum=%d\n",sum);return0;}55精選ppt需要注意的幾個(gè)問(wèn)題:(1)累加求和算法。這個(gè)程序采用的算法思想稱為累加求和,即:不斷用新累加的值取代變量的舊值,最終得到求和結(jié)果,變量sum也叫“累加器”,初值一般為0。(2)必須給變量賦初值。(3)正確判斷條件的邊界值。(4)避免出現(xiàn)“死循環(huán)”。(5)可能出現(xiàn)循環(huán)體不執(zhí)行。(6)while后面圓括號(hào)內(nèi)的表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是其它類(lèi)型的表達(dá)式,.6精選ppt【例5.2】使用while語(yǔ)句求n!。#include<stdio.h>intmain(){ intn,i=1; doublesum=1;printf("請(qǐng)輸入一個(gè)正整數(shù):");scanf("%d",&n);while(i<=n) { sum=sum*i;/*累乘求積*/ i++;/*修改基本數(shù)據(jù)項(xiàng)i*/ } printf("%d!=%.0f\n",n,sum);return0; }77精選ppt循環(huán)三要素之間的關(guān)系。

循環(huán)變量賦初值、判斷控制表達(dá)式和修改循環(huán)變量是所謂的“循環(huán)三要素”。一般來(lái)說(shuō),進(jìn)入循環(huán)之前,應(yīng)該給循環(huán)變量賦初值,確保循環(huán)能夠正常開(kāi)始;在控制表達(dá)式中判斷循環(huán)變量是否達(dá)到循環(huán)的終止值;在循環(huán)體中對(duì)循環(huán)變量進(jìn)行修改,以使循環(huán)正常的趨向終止。在編寫(xiě)程序時(shí)要注意他們的位置關(guān)系。8精選ppt【例5.3】編寫(xiě)程序,輸入一個(gè)字符序列,直至換行為止,統(tǒng)計(jì)出大寫(xiě)字母、小寫(xiě)字母、數(shù)字、空格和其他字符的個(gè)數(shù)。intmain(){ charch; inta,b,c,d,e; a=b=c=d=e=0; while((ch=getchar())!='\n') { if(ch>='A'&&ch<='Z')a++;/*判斷是否為大寫(xiě)字母*/

elseif(ch>='a'&&ch<='z')b++;/*判斷是否為小寫(xiě)字母*/

elseif(ch>='0'&&ch<='9')c++;/*判斷是否為數(shù)字*/

elseif(ch=='')d++; elsee++; } printf("%d,%d,%d,%d,%d\n",a,b,c,d,e); return0;}99精選ppt5.2for語(yǔ)句 for語(yǔ)句的一般形式如下:

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

循環(huán)體語(yǔ)句說(shuō)明:for語(yǔ)句屬于“計(jì)數(shù)”型循環(huán)。10精選ppt11循環(huán)體語(yǔ)句真(非0)假(0)表達(dá)式1表達(dá)式2表達(dá)式3for語(yǔ)句流程圖11精選pptFor語(yǔ)句最常用、最簡(jiǎn)單的形式for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)12【例5.1】求前100個(gè)自然數(shù)的和

。#include<stdio.h>intmain(){intn,sum=0;for(n=1;n<=100;n++) sum=sum+n;printf("sum=%d\n",sum);return0;}12精選ppt

【例5.4】設(shè)n=30,編寫(xiě)程序,計(jì)算并輸出S(n)的值。S(n)=(1*2)/(3*4)-(3*4)/(5*6)+(5*6)/(7*8)+…+(-1)(n-1)*[(2n-1)*2n]/[(2n+1)*(2n+2)]+…#include<stdio.h>#include<math.h>intmain(){ intn;

floats=0; for(n=1;n<=30;n++) s=s+pow((-1),(n-1))*((2*n-1)*2*n)/((2*n+1)*(2*n+2)); printf("s(n)=%f",s); return0;}1313精選ppt關(guān)于for語(yǔ)句的幾點(diǎn)說(shuō)明:(1)循環(huán)體語(yǔ)句可以是簡(jiǎn)單語(yǔ)句也可以是使用一對(duì)花括號(hào)括起來(lái)的復(fù)合語(yǔ)句。如果是一個(gè)語(yǔ)句,也可以和for寫(xiě)在一行上,這樣使程序看起來(lái)更加簡(jiǎn)潔;如果循環(huán)體包含多條語(yǔ)句,最好是另起一行,采用一對(duì)花括號(hào)括起來(lái)的復(fù)合語(yǔ)句形式,增加程序的可讀性。(2)表達(dá)式的省略。for語(yǔ)句中的三個(gè)表達(dá)式均可以省略,但是兩個(gè)分號(hào)不能省略。for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體語(yǔ)句14精選ppt【例5.5】編寫(xiě)程序,輸出所有的水仙花數(shù)。水仙花數(shù)是指一個(gè)3位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如:153=13+53+33=153,所以153就是水仙花數(shù)。intmain(){ inta,b,c,i; for(i=100;i<=999;i++) { a=i/100; b=i/10%10; c=i%10; if(i==a*a*a+b*b*b+c*c*c) printf("%d\n",i); } printf("\n");}1515精選ppt【例5.11】判斷m是否為素?cái)?shù)。

程序分析:所謂素?cái)?shù),就是一個(gè)正整數(shù),除了本身和1以外并沒(méi)有任何其他因子。例如

2,3,5,7就是素?cái)?shù)。intmain(){ intm,i,k,flag;/*定義標(biāo)志變量*/scanf("%d",&m);

flag=1;/*假設(shè)m是素?cái)?shù)*/for(i=2;i<m;i++)if(m%i==0) { flag=0;/*表示m不是素?cái)?shù)*/ break;/*跳出循環(huán)*/ }if(flag==1)printf("%disaprimenumber\n",m);elseprintf("%disnotaprimenumber\n",m); return0;}1616精選ppt5.3do…while語(yǔ)句 for語(yǔ)句的一般形式如下:

do

循環(huán)體語(yǔ)句

While{表達(dá)式};說(shuō)明:dowhile語(yǔ)句屬于“直到型”循環(huán)。17精選ppt (1)do…while語(yǔ)句中“While{表達(dá)式};”后面的分號(hào)是不能省略的,這一點(diǎn)是和while語(yǔ)句不一樣的。 (2)do…while語(yǔ)句是先執(zhí)行循環(huán)體語(yǔ)句,后判斷表達(dá)式,因此無(wú)論條件是否成立,將至少執(zhí)行一次循環(huán)體。而while語(yǔ)句是先判斷表達(dá)式,后執(zhí)行循環(huán)體語(yǔ)句,因此,如果表達(dá)式在第一次判斷時(shí)就不成立,則循環(huán)體一次也不執(zhí)行。18精選ppt注意:(1)在計(jì)算機(jī)解決實(shí)際問(wèn)題時(shí),常常會(huì)用到類(lèi)似本程序的“窮舉法”。“窮舉法”解決的問(wèn)題一般具有這種特點(diǎn):如果問(wèn)題有解,一組或多組,必定全在某個(gè)集合中;如果這個(gè)集合內(nèi)無(wú)解,集合外也肯定無(wú)解。這樣,在解決問(wèn)題時(shí),就可以將集合中的元素一一列舉出來(lái),驗(yàn)證是否為問(wèn)題的解。本題就是一一驗(yàn)證100~999之間所有的數(shù),最終找出答案。(2)程序中在做是否相等關(guān)系判斷(“i==a*a*a+b*b*b+c*c*c)使用到了關(guān)系運(yùn)算符“==”,而不是“=”,后者是賦值運(yùn)算符,在c語(yǔ)言中這兩種運(yùn)算符形式是不一樣的,要注意區(qū)別。19精選ppt20循環(huán)體語(yǔ)句表達(dá)式假(0)真(非0)圖5.5do…while語(yǔ)句流程圖20精選pptWhile語(yǔ)句和do…while語(yǔ)句的比較:一般來(lái)說(shuō),對(duì)于同一個(gè)問(wèn)題,使用While語(yǔ)句或do…while語(yǔ)句結(jié)果是一樣的,但有時(shí)并不一樣,比較以下兩段程序:21#include<stdio.h>intmain(){intn,sum=0;scanf("%d",&n);while(n<=10){sum=sum+n;n++;}printf("sum=%d\n",sum);return0;}#include<stdio.h>intmain(){ intn,sum=0; scanf("%d",&n); do { sum=sum+n; n++; } while(n<=10); printf("sum=%d\n",sum);return0;}21精選ppt intmain() { charc; do { c=getchar(); }while(c!='A'); printf("校驗(yàn)成功\n"); return0; }【例5.6】編寫(xiě)程序,實(shí)現(xiàn)對(duì)用戶輸入口令的校驗(yàn)。用戶輸入的口令如果與預(yù)設(shè)口令不一致,則需要重新輸入,直到與預(yù)設(shè)口令一致為止。22精選pptvoidmain(){ doublen=1.0,d=1.0,pi=0.0;intsign=1; do { pi=pi+d; n=n+2; sign=-sign;/*改變數(shù)據(jù)項(xiàng)的符號(hào)*/ d=sign/n;/*求出數(shù)據(jù)項(xiàng)*/ } while(fabs(d)>=1.0e-6); pi=4.0*pi; printf("pi=%10.7lf\n",pi); }23【例5.7】用公式…求π的近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6為止。23精選ppt

三種循環(huán)的比較:

(1)while和do…while語(yǔ)句一般實(shí)現(xiàn)標(biāo)志式循環(huán),即無(wú)法預(yù)知循環(huán)的次數(shù),循環(huán)只是在一定條件下進(jìn)行;而for語(yǔ)句大多實(shí)現(xiàn)計(jì)數(shù)式循環(huán)。

(2)一般來(lái)說(shuō),while和do…while語(yǔ)句的循環(huán)變量賦初值在循環(huán)語(yǔ)句之前,循環(huán)結(jié)束條件是while后面圓括號(hào)內(nèi)的表達(dá)式,循環(huán)體中包含循環(huán)變量修改語(yǔ)句;一般for循環(huán)則是循環(huán)三要素集于一行。因此,for循環(huán)語(yǔ)句功能更強(qiáng)大,形式更簡(jiǎn)潔,使用更靈活。

(3)while和for是先測(cè)試循環(huán)條件,后執(zhí)行循環(huán)體語(yǔ)句,循環(huán)體可能一次也不執(zhí)行。而do…while語(yǔ)句是先執(zhí)行循環(huán)體語(yǔ)句,后測(cè)試循環(huán)條件,所以循環(huán)體至少被執(zhí)行一次。24精選ppt5.4多重循環(huán)結(jié)構(gòu)for(;;){…

…}for(;;){…}for(;;){…}…for(;;){…}for(;;){…for(;;){}…}嵌套循環(huán)并列循環(huán)交叉循環(huán)(錯(cuò)誤)25精選ppt循環(huán)的嵌套是指一個(gè)循環(huán)語(yǔ)句的循環(huán)體內(nèi)完整的包含另一個(gè)完整的循環(huán)結(jié)構(gòu)。前述三種循環(huán)結(jié)構(gòu)(while循環(huán)、for循環(huán)、do-while循環(huán))可以任意組合嵌套。

循環(huán)的嵌套有雙重循環(huán)嵌套和多重循環(huán)嵌套。但一般使用兩重或三重的比較多,若嵌套層數(shù)太多,就降低了程序的可讀性和執(zhí)行效率。

如果是多重循環(huán),外循環(huán)和內(nèi)循環(huán)應(yīng)選用不同的循環(huán)控制變量。

2626精選ppt雙重循環(huán)嵌套:嵌套層次數(shù)為2層的循環(huán)嵌套執(zhí)行過(guò)程是:首先進(jìn)行外層循環(huán)的條件判斷,當(dāng)外層循環(huán)條件成立時(shí)順序執(zhí)行外層循環(huán)體語(yǔ)句,遇到內(nèi)層循環(huán),則進(jìn)行內(nèi)層循環(huán)條件判斷,并在內(nèi)層循環(huán)條件成立的情況下反復(fù)執(zhí)行內(nèi)層循環(huán)體語(yǔ)句,當(dāng)內(nèi)層循環(huán)因循環(huán)條件不成立而退出后重新返回到外層循環(huán)并順序執(zhí)行外層循環(huán)體的其它語(yǔ)句,外層循環(huán)體執(zhí)行一次后,重新進(jìn)行下一次的外層循環(huán)條件判斷,若條件依然成立,則重復(fù)上述過(guò)程,直到外層循環(huán)條件不成立時(shí),退出雙重循環(huán)嵌套,執(zhí)行后面其它語(yǔ)句。27精選ppt【例5.8】編寫(xiě)程序,輸出1000以內(nèi)所有的完數(shù)。如果一個(gè)整數(shù)的因子之和等于這個(gè)數(shù)本身,這個(gè)數(shù)就被稱為完數(shù)。例如:1、2、3是6的因子,并且6=1+2+3,所以6是完數(shù)。 程序分析:此題應(yīng)該分成兩步來(lái)做。

第一步:判斷一個(gè)數(shù)n是否為完數(shù)。可以定義一個(gè)變量s作為“累加器”,此問(wèn)題仍然需要用前面講過(guò)的“窮舉法”,從1~n-1逐一去除n,如果能除盡,就說(shuō)明是n的因子,把它累加到s上??梢赃x用for循環(huán)。

第二步:外層循環(huán)對(duì)1000以內(nèi)的所有正整數(shù)一一進(jìn)行判斷,利用第一步的方法,逐個(gè)判斷n的因子之和s是否等于n。若相等,則顯示輸出。同樣選用for循環(huán)。2828精選ppt#include<stdio.h>intmain(){ inti,n,s; for(n=2;n<=1000;n++)/*外循環(huán)*/ { s=0; for(i=1;i<n;i++)/*內(nèi)循環(huán)求出n的所有因子之和*/ if(n%i==0) s+=i; if(n==s)/*判斷a是否等于所有因子之和*/ printf("%d\n",n); } return0;29精選ppt【例5.9】打印九九乘法口訣表。程序分析:乘法口訣表的形式如下:1*1=11*2=2

2*2=41*3=3

2*3=6

3*3=91*4=4

2*4=8

3*4=12 4*4=16…1*9=9

2*9=18

3*9=27 4*9=36

5*9=45

6*9=54

7*9=63 8*9=72 9*9=8130精選ppt #include<stdio.h> intmain() { inti,j; for(i=1;i<=9;i++)/*外循環(huán)控制輸出行*/ { for(j=1;j<=i;j++)/*輸出該行的內(nèi)容*/ printf("%2d*%d=%2d",j,i,i*j); printf("\n"); /*每行結(jié)束后輸出換行*/ } return0; }31精選ppt5.5break語(yǔ)句和continue語(yǔ)句5.5.1break語(yǔ)句break語(yǔ)句可以使流程跳出switch結(jié)構(gòu),它也可以用在while語(yǔ)句、for語(yǔ)句和do…while語(yǔ)句中。可使程序跳出本層循環(huán)結(jié)構(gòu),接著執(zhí)行循環(huán)體下面的語(yǔ)句。其一般形式如下:

break; 32精選ppt33例子:intr; floatarea,pi=3.14159; for(r=1;r<=10;r++) { area=pi*r*r; if(area>100)break; printf("r=%d,area=%f\n",r,area); }說(shuō)明:(1)break語(yǔ)句只能用于while、for和do…while循環(huán)語(yǔ)句以及switch語(yǔ)句中,不能用于其他語(yǔ)句。(2)如果break語(yǔ)句用在多重循環(huán)結(jié)構(gòu)體中,使用break語(yǔ)句只能使程序退出break語(yǔ)句所在的最內(nèi)層循環(huán)。

33精選ppt5.5.2continue語(yǔ)句

continue語(yǔ)句的作用是結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷。其一般形式如下: continue;

continue語(yǔ)句只能用于循環(huán)結(jié)構(gòu)中。34精選ppt

inti,n,score; floatsum=0,aver; printf("請(qǐng)輸入學(xué)生的個(gè)數(shù):"); scanf("%d",&n); for(i=1;i<=n;i++){ printf("請(qǐng)輸入學(xué)生的成績(jī):"); scanf("%d",&score); if(score<0||score>100)/*學(xué)生成績(jī)輸入有誤*/ {printf("輸入成績(jī)有誤,請(qǐng)重新輸入!\n"); i--;/*此次輸入成績(jī)不算,計(jì)數(shù)應(yīng)減去1*/

continue;} sum=sum+score; } aver=sum/n; printf("%.2f\n",aver);

35【例5.10】輸入若干學(xué)生的成績(jī),求平均值。35精選ppt5.5break語(yǔ)句和continue語(yǔ)句continue語(yǔ)句的作用是結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷。其一般形式如下:continue;注意:continue語(yǔ)句只能用于循環(huán)結(jié)構(gòu)中。

對(duì)于while和do…while語(yǔ)句,continue語(yǔ)句使程序結(jié)束本次循環(huán),跳轉(zhuǎn)到循環(huán)條件的判斷部分,根據(jù)條件判斷是否進(jìn)行下一次循環(huán);對(duì)于for語(yǔ)句,continue語(yǔ)句使程序不再執(zhí)行循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,直接跳轉(zhuǎn)去執(zhí)行“表達(dá)式3”,然后再對(duì)循環(huán)條件“表達(dá)式2進(jìn)行判斷”,根據(jù)條件判斷是否進(jìn)行下一次循環(huán)。

36精選ppt5.6應(yīng)用程序舉例37【例5.12】從鍵盤(pán)輸入兩個(gè)正整數(shù)m和n,求它們的最大公約數(shù)和最小公倍數(shù)。方法一:根據(jù)最大公約數(shù)的數(shù)學(xué)定義,使用for循環(huán)查找即能整除m又能整除n的最大的數(shù)就是m、n的最大公約數(shù)。

intm,n,k,max,x,y,z;printf("inputmandn:\n");scanf("%d",&m);scanf("%d",&n);x=m;y=n;for(k=1;k<=(m<n?m:n);k++)/*循環(huán)變量k的最大值應(yīng)是m和n中的較小數(shù)*/if(m%k==0&&n%k==0)max=k;z=x*y/max; /*求最小公倍數(shù)*/printf("m和n的最大公約數(shù)為:%d,\n最小公倍數(shù)為:%d\n",max,z);37精選ppt方法二:輾轉(zhuǎn)相除法。首先定義一個(gè)變量r,用來(lái)存儲(chǔ)m除以n的余數(shù)。Step1:將兩個(gè)數(shù)中的大者放在m中,小者放在n中。Step2:求m除以n的余數(shù)r,即r=m%n。Step3:若r不等于0,轉(zhuǎn)Step4;若r等于0,則此時(shí)的n就是最大公約數(shù),轉(zhuǎn)Step5Step4:把n的值賦給m,把r的值賦給n,即mn,nr,然后轉(zhuǎn)Step2。Step5:跳出循環(huán)結(jié)構(gòu),執(zhí)行循環(huán)結(jié)構(gòu)的下一個(gè)語(yǔ)句。

intm,n,r,x,y,z,k; scanf("%d",&m); scanf("%d",&n); if(n>m)/*若

溫馨提示

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

評(píng)論

0/150

提交評(píng)論