浙江大學(xué)劉加海C語(yǔ)言課件2_第1頁(yè)
浙江大學(xué)劉加海C語(yǔ)言課件2_第2頁(yè)
浙江大學(xué)劉加海C語(yǔ)言課件2_第3頁(yè)
浙江大學(xué)劉加海C語(yǔ)言課件2_第4頁(yè)
浙江大學(xué)劉加海C語(yǔ)言課件2_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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)介

1、-第2章程序的控制構(gòu)造本章要點(diǎn)1if語(yǔ)句和用if語(yǔ)句構(gòu)成的選擇構(gòu)造。2if語(yǔ)句的嵌套。3switch語(yǔ)句。4while循環(huán)。5dowhile循環(huán)。6for循環(huán)。7循環(huán)的嵌套。本章難點(diǎn)1if語(yǔ)句中的條件表達(dá)式的理解。2if與else的配對(duì)問(wèn)題。3switch語(yǔ)句的程序流向。4while、dowhile、for循環(huán)的特色。5for循環(huán)中的履行過(guò)程及for循環(huán)的變化形式。6循環(huán)嵌套中的履行過(guò)程。在程序的編寫(xiě)過(guò)程中常常會(huì)遇到程序的流向問(wèn)題,C語(yǔ)言中控制程序流向的語(yǔ)句構(gòu)造叫控制構(gòu)造,而控制構(gòu)造中的條件表達(dá)式含相關(guān)系運(yùn)算和邏輯運(yùn)算,C語(yǔ)言供給了能夠進(jìn)行邏輯判斷的選擇語(yǔ)句,依據(jù)邏輯判斷的結(jié)果斷定程序的不同流

2、程,任何復(fù)雜的程序都是由次序構(gòu)造、分支構(gòu)造及循環(huán)構(gòu)造構(gòu)成。程序的這三種構(gòu)造是程序設(shè)計(jì)中最基本的問(wèn)題,也是程-序設(shè)計(jì)的基礎(chǔ)。程序設(shè)計(jì)中要決定程序的流向、能否重復(fù)地履行某項(xiàng)任務(wù)等都要波及到程序的流程控制。本章將要點(diǎn)介紹程序控制構(gòu)造語(yǔ)句及其使用方法。-2.1程序的分支構(gòu)造if語(yǔ)句和用if語(yǔ)句構(gòu)成的選擇構(gòu)造if語(yǔ)句的作用是使程序在運(yùn)轉(zhuǎn)過(guò)程中,依據(jù)判斷指定的條件能否知足來(lái)決定能否履行某操作。if語(yǔ)句的運(yùn)用能使程序針對(duì)不同狀況作不同的辦理,增添了程序的靈巧性。if語(yǔ)句是一種選擇構(gòu)造,它的基本形式有以下三種。1if選擇構(gòu)造語(yǔ)句格式:if(表達(dá)式)語(yǔ)句塊這里的語(yǔ)句塊能夠是簡(jiǎn)單語(yǔ)句、空語(yǔ)句或復(fù)合語(yǔ)句,復(fù)合語(yǔ)句用

3、用開(kāi)始,符號(hào)結(jié)束,在邏輯上復(fù)合語(yǔ)句作為一條語(yǔ)句來(lái)使用。語(yǔ)句的功能:假如表達(dá)式的值為真(非0),則履行語(yǔ)句塊,不然不履行該語(yǔ)句塊。程序流程圖如2.1所示。假(0)表達(dá)式真(非0)語(yǔ)句塊圖2.1程序流程圖比如學(xué)生的成績(jī)grade大于等于60,在屏幕上顯示“恭-喜你,經(jīng)過(guò)了!”,則可用以下語(yǔ)句描繪。if(grade=60)printf(恭賀你,經(jīng)過(guò)了!n);假如學(xué)生的成績(jī)grade大于等于60,除了在屏幕上顯示“恭賀你,經(jīng)過(guò)了!”,還要使已獲得總學(xué)分score加2,則改正以上語(yǔ)句為以下:if(grade=60)/*把多個(gè)語(yǔ)句用括起來(lái)構(gòu)成一個(gè)復(fù)合語(yǔ)句*/printf(恭賀你,經(jīng)過(guò)了!n);score+

4、=2;假如以上語(yǔ)句寫(xiě)成:if(grade=60)printf(恭賀你,經(jīng)過(guò)了!n);/*只好有一條語(yǔ)句屬于if語(yǔ)句構(gòu)造*/score+=2;/*這條語(yǔ)句不在if語(yǔ)句構(gòu)造中*/其程序流程圖變成如圖2.2所示,這樣使“score加2”操作在學(xué)生成績(jī)小于60時(shí)也履行了,這與要求不符,程序結(jié)果是錯(cuò)的。假(0)grade=60真(非0)printf(恭賀你,經(jīng)過(guò)了!n)score+=2-圖2.2程序流程圖所以if語(yǔ)句構(gòu)造中,若需要用多條語(yǔ)句實(shí)現(xiàn)操作時(shí),一定把多條語(yǔ)句用括起來(lái)構(gòu)成一條復(fù)合語(yǔ)句。相同,在此后介紹的選擇構(gòu)造和循環(huán)構(gòu)造語(yǔ)句中也都有近似的狀況。if語(yǔ)句中的表達(dá)式(包含循環(huán)語(yǔ)句中的表達(dá)式)往常是邏輯

5、表達(dá)式或關(guān)系表達(dá)式,但也能夠是其余表達(dá)式,如賦值表達(dá)式等,甚至能夠不過(guò)一個(gè)簡(jiǎn)單變量。如:if(i)printf(i0);判斷i的值能否不為0,來(lái)決定語(yǔ)句printf(i0);能否履行。if(ch=getchar()!=n)printf(%c,ch);從鍵盤(pán)輸入一個(gè)字母賦給ch,假如ch的值不為換行符,履行語(yǔ)句printf(c,ch);輸出該值。思慮:定義一字符變量ch并從鍵盤(pán)讀入,如為小寫(xiě)字母轉(zhuǎn)變成大寫(xiě)字母后輸出,不然什么也不做,程序結(jié)束。提示:判斷能否為小寫(xiě)字母可寫(xiě)為:(ch=a&ch=60)printf(恭賀你,經(jīng)過(guò)了!n);elseprintf(很對(duì)不起,沒(méi)經(jīng)過(guò)!n);依據(jù)編程者的愛(ài)好或

6、程序構(gòu)造方面的考慮,能夠改正表達(dá)式,調(diào)整語(yǔ)句為:if(grade=60)printf(恭賀你,經(jīng)過(guò)了!n);score+=2;elseprintf(很對(duì)不起,沒(méi)經(jīng)過(guò)!n);或:if(grade=0)y=x*x;elsey=-x;-例2.1輸入三個(gè)整數(shù),并輸出最大數(shù)。算法設(shè)計(jì):(1)輸入三個(gè)整數(shù)x、y、z;(2)先比較x和y的大小,把大的數(shù)賦值給max;(3)再比較max和z的大小,把大的數(shù)再賦值給max。此時(shí)max的值就是三個(gè)整數(shù)的最大值;4)輸出max。程序流程圖如圖2.4所示。開(kāi)始輸入x,y,z真(非0)假(0)xymax=xmax=y真(非0)maxz假(0)max=z輸出max結(jié)束圖2

7、.4程序流程圖#includevoidmain()intx,y,z,max;printf(pleaseinputx,y,z:);scanf(%d%d%d,&x,&y,&z);-if(xy)max=x;elsemax=y;if(max89)、良79grade90)、中(69grade80)、及格(59grade70)、不及格(grade89)printf(恭賀你,你的成績(jī)是優(yōu)!n);elseif(grade79)printf(恭賀你,你的成績(jī)是良!n);elseif(grade69)-printf(恭賀你,你的成績(jī)是中!n);elseif(grade59)printf(恭賀你,你的成績(jī)是及格!n

8、);elseprintf(很對(duì)不起,你的成績(jī)是不及格!n);if語(yǔ)句嵌套if語(yǔ)句同意嵌套,即在一個(gè)if語(yǔ)句中包含有另一個(gè)if語(yǔ)句。上一節(jié)介紹的ifelseif構(gòu)造也是if語(yǔ)句的嵌套構(gòu)造。比如要表示分段函數(shù)1x0y0 x01x0能夠表示如圖2.6所示的流程圖。真x=0y=-1真假x=0y=0y=1圖2.6程序流程圖-用if語(yǔ)句的嵌套表示為:if(x=0)if(x=0)y=0;elsey=1;elsey=-1;自然用條件運(yùn)算符表示為:y=x0?x=0?0:1:-1;但ifelseif構(gòu)造很規(guī)范,很好理解,而一般if語(yǔ)句的嵌套構(gòu)造相對(duì)照較復(fù)雜,常常因?yàn)椴徽_的if與else配對(duì)理解致使程序功能的錯(cuò)誤

9、。C語(yǔ)言中規(guī)定,在有多個(gè)if.else語(yǔ)句的構(gòu)造中,else老是與近來(lái)的還沒(méi)有配對(duì)的if配對(duì)。例2.2剖析以下程序段輸出的結(jié)果為()intx=-10,y=;if(x=0)if(x0)y=0;elsey=-1;printf(“y=%dn”,y);剖析:因if(x=0)非真,所以if(x0)y=0;elsey=-1;不履行,打印結(jié)果為。例2.3編寫(xiě)一個(gè)程序,由鍵盤(pán)輸入三個(gè)整數(shù)作為三角形的三條邊,判斷能否能構(gòu)成一個(gè)三角形,如能并判斷是等邊三角形、等腰三角形,仍是其余三角形。剖析:設(shè)三個(gè)整數(shù)分別為:a、b、c,構(gòu)成三角形的條件為:a+bc&a+cb&b+ca構(gòu)成等邊三角形的條件為:-a=b&b=c構(gòu)成

10、等腰三角形的條件為:a=b|b=c|a=c關(guān)于判斷能否能構(gòu)成三角形,什么樣的三角形的語(yǔ)句構(gòu)造為:if(a+bc&a+cb&b+ca)printf(“能構(gòu)成一個(gè)三角形n”);進(jìn)一步判斷構(gòu)成什么三角形elseprintf(“不可以構(gòu)成一個(gè)三角形n”);完好的程序設(shè)計(jì)為:#includevoidmain()inta,b,c;scanf(%d%d%d,&a,&b,&c);if(a+bc&a+cb&b+ca)printf(能構(gòu)成一個(gè)三角形n);if(a=b&b=c)printf(能構(gòu)成一個(gè)等邊三角形n);elseif(a=b|b=c|a=c)printf(能構(gòu)成一個(gè)等腰三角形n);elseprintf(

11、能構(gòu)成一個(gè)一般的三角形n);else-printf(不可以構(gòu)成一個(gè)三角形n);switch語(yǔ)句if語(yǔ)句只好辦理從二者間選擇此中之一,用if-else-if或多重嵌套if語(yǔ)句能夠?qū)崿F(xiàn)多分支選擇,但程序冗長(zhǎng),可讀性差。C語(yǔ)言供給switch語(yǔ)句特意辦理多分支選擇,使程序構(gòu)造簡(jiǎn)短、清楚。語(yǔ)句格式:switch(表達(dá)式)case常量表達(dá)式1:語(yǔ)句序列break;case常量表達(dá)式2:語(yǔ)句序列break;case常量表達(dá)式n;語(yǔ)句序列nbreak;default:語(yǔ)句序列n+1當(dāng)履行switch語(yǔ)句時(shí),第一計(jì)算緊跟后來(lái)一對(duì)括號(hào)中的表達(dá)式的值,而后在switch語(yǔ)句體內(nèi)找尋與該值符合的case標(biāo)號(hào),假如有

12、與該值相等的標(biāo)號(hào),則履行該標(biāo)號(hào)后開(kāi)始-的各語(yǔ)句,包含在后來(lái)的全部case和default中的語(yǔ)句,直到break語(yǔ)句或switch語(yǔ)句體結(jié)束。假如沒(méi)有與該值相等有break語(yǔ)句真(非0)表達(dá)式=常量表達(dá)式1語(yǔ)句序列1break假(0)無(wú)break語(yǔ)句有break語(yǔ)句真(非0)表達(dá)式=常量表達(dá)式2語(yǔ)句序列2break假(0)無(wú)break語(yǔ)句真(非0)有break語(yǔ)句表達(dá)式=常量表達(dá)式n語(yǔ)句序列nbreak假(0)無(wú)break語(yǔ)句語(yǔ)句序列n+1的標(biāo)號(hào),而且存在default標(biāo)號(hào),則從default標(biāo)號(hào)后的語(yǔ)句開(kāi)始履行,直到switch語(yǔ)句體結(jié)束。假如沒(méi)有與該值相等的標(biāo)號(hào),且不存在default標(biāo)號(hào)

13、,則跳過(guò)switch語(yǔ)句體,什么也不做。圖2.7語(yǔ)句履行的流程圖注意(1)switch、case、default是要點(diǎn)字。(2)switch語(yǔ)句后邊用花括號(hào)括起來(lái)的部分稱為switch語(yǔ)句體。(3)switch的表達(dá)式能夠是整型表達(dá)式、字符表達(dá)式、列舉型表達(dá)式等。(4)case中常量表達(dá)式的種類一定與switch的表達(dá)式種類相同,各case語(yǔ)句標(biāo)號(hào)的值應(yīng)當(dāng)互不相同。(5)default代表全部case標(biāo)號(hào)以外的那些標(biāo)號(hào),default標(biāo)-號(hào)能夠出此刻語(yǔ)句體中任何標(biāo)號(hào)地點(diǎn)上,在switch語(yǔ)句體中也能夠沒(méi)有default標(biāo)號(hào)。每個(gè)選擇支路都以case開(kāi)頭,case的標(biāo)號(hào)后要有:,每個(gè)支路后能夠有

14、多個(gè)語(yǔ)句。(6)必需時(shí),case語(yǔ)句標(biāo)號(hào)后的語(yǔ)句能夠省略不寫(xiě)。(7)在要點(diǎn)字case和常量表達(dá)式之間必定要有空格。比如case10:不可以寫(xiě)成case10:。例2.4求履行以下程序段后k的值。charc=2;intk;switch(c+1-0)case2:k+=1;case2+1:k+=2;case4:k+=3;剖析:switch中表達(dá)式的值為,從case2+1進(jìn)口,履行語(yǔ)句k+=2;得k=3,因?yàn)榇苏Z(yǔ)句后無(wú)break;語(yǔ)句,持續(xù)履行case4后語(yǔ)句:k+=3;最后k。例2.5求履行以下程序段后k的值。charc;intk2;scanf(“%d”,&c);switch(c-A)case0:k+

15、;case1:k+=2;break;default:k*=k;case4:k*=3;-問(wèn):當(dāng)程序履行時(shí)輸入分別為:A、B、C、E時(shí)k的值。剖析:當(dāng)輸入A時(shí),從case0進(jìn)口,k為3,因?yàn)閗+;后無(wú)break;又從case1:進(jìn)口k為5,然退后出switch語(yǔ)句;同應(yīng)當(dāng)輸入B時(shí),k為4;當(dāng)輸入C時(shí),轉(zhuǎn)入default:k為4;k*=k;后無(wú)break;語(yǔ)句,持續(xù)履行case4后語(yǔ)句:k*=3;最后k12。當(dāng)輸入E時(shí),從case4進(jìn)口,k為6。例2.6輸入一個(gè)字符,假如是Y、N或y、n,則分別履行一輸出語(yǔ)句;假如是其余字母則履行另一輸出語(yǔ)句。程序以下所示:#includevoidmain()cha

16、rch;printf(pleaseinputY/N(y/n):);scanf(%c,&ch);switch(ch)casey:caseY:printf(nthisisYory.n);break;casen:caseN:printf(nthisisNorn.n);break;default:printf(nthisisotherchar.n);例2.7編寫(xiě)一個(gè)菜單顯示程序,輸入1表示:增添記錄、-2表示:顯示記錄、3表示:讀取記錄、4表示:保留記錄、0表示:結(jié)束運(yùn)轉(zhuǎn),輸入04能夠進(jìn)行相應(yīng)的選擇。#includevoidmain()inta;printf(1.增添記錄n2.顯示記錄n3.讀取記錄n

17、4.保留記錄n0.結(jié)束運(yùn)轉(zhuǎn)n);printf(n請(qǐng)選擇04:);scanf(%d,&a);switch(a)case1:printf(你的選擇是:1n);break;case2:printf(你的選擇是:2n);break;case3:printf(你的選擇是:3n);break;case4:printf(你的選擇是:4n);break;default:printf(輸入錯(cuò)誤!n);這個(gè)例子不過(guò)一個(gè)簡(jiǎn)單的框架,它表現(xiàn)了編寫(xiě)控制菜單的基本思想。思慮:鍵盤(pán)輸入學(xué)生的百分制成績(jī),輸出相應(yīng)的等級(jí),等級(jí)的區(qū)分為:90100:優(yōu)、8089:良、7079:中、6069:及格、059:不及格,用switch語(yǔ)

18、句實(shí)現(xiàn)。-提示:假設(shè)分?jǐn)?shù)用x表示,可用:switch(x/10)case10:case9:printf(“優(yōu)n”);break;case8:printf(“良n”);break;此外請(qǐng)讀者思慮如何防止非法數(shù)據(jù)的輸入?2.2程序的循環(huán)構(gòu)造在實(shí)質(zhì)應(yīng)用中,需要程序依據(jù)給定條件時(shí),重復(fù)履行某程序段,直到條件不知足為止;或重復(fù)履行某程序段的指定次數(shù),這就是程序的循環(huán)構(gòu)造。C語(yǔ)言供給了以下三種基本的循環(huán)語(yǔ)句:while語(yǔ)句、dowhile語(yǔ)句和for語(yǔ)句。關(guān)于C語(yǔ)言的三種循環(huán)語(yǔ)句有以下幾點(diǎn)需加以注意:while循環(huán)語(yǔ)句和for循環(huán)語(yǔ)句在初始時(shí),第一測(cè)試循環(huán)條件,假如知足則履行循環(huán)體,如不知足則退出循環(huán)語(yǔ)句

19、;dowhile循環(huán)語(yǔ)句則是先履行循環(huán)體,后測(cè)試循環(huán)條件,所以循環(huán)體不論如何都必定會(huì)被履行起碼一次。此三種循環(huán)語(yǔ)句都是依據(jù)循環(huán)條件來(lái)決定能否持續(xù)執(zhí)行,所以在循環(huán)體內(nèi)部或循環(huán)條件中一定存在改變循環(huán)條件的動(dòng)作,不然,可能會(huì)出現(xiàn)死循環(huán)等異樣狀況;C語(yǔ)言的for語(yǔ)句其實(shí)不同于一般的狹義計(jì)數(shù)循環(huán)語(yǔ)句,其循環(huán)條件包含的內(nèi)容能夠不是單調(diào)的計(jì)數(shù),而能夠有其余的形式和動(dòng)作,如getch()一類的取值動(dòng)作。-while循環(huán)語(yǔ)句格式:while(條件表達(dá)式)循環(huán)體其流程控制如圖2.8所示。循環(huán)履行的步驟以下:(1)計(jì)算條件表達(dá)式的值;(2)當(dāng)值為真(非0)時(shí),履行循環(huán)體,而后轉(zhuǎn)到(2),值為假(0)時(shí)退出循環(huán)。假(

20、0)條件表達(dá)式真(非0)循環(huán)體圖2.8流程圖例2.8從鍵盤(pán)輸入若干個(gè)數(shù)乞降,當(dāng)和大于200時(shí)停止執(zhí)行。剖析:此程序的流程以下圖,循環(huán)的條件為sum=200,循環(huán)塊中的語(yǔ)句有:scanf(“%d”,&x);sum+=sum;-假(0)sum=200真(非0)讀入xsum+=x;整個(gè)程序的代碼為:#includevoidmain()intx,sum=0;while(sum=200)scanf(“%d”,&x);sum+=x;printf(“sum=%dn”,sum);思慮:在main函數(shù)中輸入一個(gè)大于0的自然數(shù)n,調(diào)用函數(shù)add,計(jì)算1+2+3+n,在main函數(shù)中輸出結(jié)果,請(qǐng)達(dá)成填空。#incl

21、udeintadd(intn)/*求1+2+3+n和*/-voidmain()intx,sum;scanf(“%d”,&x);sum=add(x);printf(“sum=%dn”,sum);例2.9有20個(gè)同學(xué)次序編號(hào)為019,同時(shí)把他們的英語(yǔ)成績(jī)寄存在數(shù)組A中,編寫(xiě)一個(gè)查分的函數(shù)。算法設(shè)計(jì):1)輸入學(xué)生號(hào);2)判斷學(xué)生號(hào)能否在0和19之間,若是,持續(xù)下一步,不是則查問(wèn)結(jié)束;3)顯示該學(xué)生成績(jī);4)輸入學(xué)生號(hào),轉(zhuǎn)第(2)步持續(xù)履行。輸入學(xué)生號(hào)num假(0)num=0且num20真(非0)顯示該學(xué)生成績(jī)輸入學(xué)生號(hào)num-程序的流程圖如圖2.9所示。圖2.9程序的流程圖#includevoidq

22、uery(inta,intn)/*數(shù)組名a作為形參,數(shù)組a代表數(shù)組st*/intnum;printf(PleaseinputstudentNO.:);scanf(%d,&num);while(num=0&numn)printf(ttheenglishscoreis%d:n,anum);printf(PleaseinputstudentNO.:);scanf(%d,&num);printf(thequeryover!n);voidmain()intst20=78,92,56,82,74,76,51,73,62,88,54,69,77,64,79,78,65,74,71,83;query(st,2

23、0);/*數(shù)組名st作為實(shí)參,傳達(dá)給數(shù)組a*/程序運(yùn)轉(zhuǎn)狀況:PleaseinputstudentNO.:5-theenglishscoreis76:PleaseinputstudentNO.:0theenglishscoreis78:PleaseinputstudentNO.:19theenglishscoreis83:PleaseinputstudentNO.:25thequeryover!while循環(huán)語(yǔ)句先鑒別循環(huán)條件,只有條件知足才履行循環(huán)體,即存在循環(huán)體一次也不履行的可能。如在上例運(yùn)轉(zhuǎn)時(shí),第一次輸入20,則循環(huán)體一次都不履行。PleaseinputstudentNO.:20thequ

24、eryover!例2.10從鍵盤(pán)輸入10個(gè)數(shù),正數(shù)賦給數(shù)組b,負(fù)數(shù)顯示在屏幕上,最后再輸出數(shù)組b的元素值。#includevoidmain()intx,k,b10,i=0,j=0;while(i0)bj+=x;elseprintf(%dn,x);i+;k=0;while(kj)-printf(b%d=%dn,k,bk+);例2.11編一程序使某數(shù)相反次序輸出。如輸入3456,輸出6543。程序剖析:某數(shù)對(duì)10取余數(shù),先輸出最低位,而后使這個(gè)整數(shù)除10,再取余數(shù)輸出,再除10,直到這個(gè)數(shù)為0。#includevoidmain()intnum;intdigit;printf(inputanumbe

25、rb);scanf(%d,&num);while(num!=0)digit=num%10;printf(%d,digit);num=num/10;printf(n);思慮:有一個(gè)數(shù)組a,擁有以下規(guī)律:a0=1;a1=2;a2=a0+a1;ai=ai-2+ai-1;求a50。提示:考慮程序段:a0=1;a1=2;i=2;-while(i=50)ai=ai-2+ai-1;i+;dowhile循環(huán)語(yǔ)句格式:do循環(huán)體while(表達(dá)式);語(yǔ)句的功能:先履行循環(huán)體一次,再鑒別表達(dá)式的值,若為真(非0)則持續(xù)循環(huán),不然停止循環(huán)。此中語(yǔ)句是循環(huán)體,表達(dá)式是循環(huán)條件。語(yǔ)句履行流程圖如圖2.11所示。循環(huán)體假

26、(0)表達(dá)式真(非0)圖2.10語(yǔ)句履行流程圖dowhile語(yǔ)句是先履行后判斷,所以它起碼要履行一次循環(huán)體。不同于while語(yǔ)句先判斷后履行,假如條件不知足,循環(huán)體能夠一次都不履行。例2.12使得從終端輸入的正數(shù)次序顛倒。#include-voidmain()intnum,digit;printf(Enteranumber;n);scanf(%d,&num);dodigit=num%10;printf(%d,digit);num=num/10;while(num!=0);printf(n);例2.13閱讀以下程序,寫(xiě)出程序的履行結(jié)果。#includevoidmain()charc;intv0=

27、0,v1=0,v2=0;doswitch(c=getchar()casea:caseA:v0+=1;casee:caseE:casei:caseI:caseo:caseO:caseu:caseU:v1+=1;default:v2+=1;while(c!=n);printf(nv0=%d,v1=%d,v2=%dn,v0,v1,v2);-如輸入:ADescriptor答:v0=1,v1=4,v2=12剖析:因?yàn)闆](méi)有break語(yǔ)句,default語(yǔ)句中都加一次,最后default語(yǔ)句中也增添1次,共達(dá)12次。例2.14數(shù)組a中寄存學(xué)生成績(jī),數(shù)組的下標(biāo)表示學(xué)生序號(hào),鍵盤(pán)輸入分?jǐn)?shù),要查找指定成績(jī)的學(xué)生序

28、號(hào),用dowhile語(yǔ)句編程,我們按程序流程圖2.11所示,來(lái)改正函數(shù)。voidquery(inta,intn)intscore,i=0;printf(Pleaseinputscore:);scanf(%d,&score);doif(ai=score)printf(studentNO.:%dn,i);i+;while(in);printf(thequeryover!n);輸入成績(jī)scorei=0真(非0)ai=score輸出學(xué)生號(hào)i假(0)i+in真(非0)假(0)-圖2.11程序流程圖把這個(gè)函數(shù)替代例2.6程序中的query函數(shù),再運(yùn)轉(zhuǎn)程序,運(yùn)轉(zhuǎn)狀況為:Pleaseinputscore:78

29、studentNO.:0studentNO.:5studentNO.:15thequeryover!for循環(huán)for循環(huán)語(yǔ)句的功能更強(qiáng),使用更寬泛。語(yǔ)句格式:for(初始化表達(dá)式;條件表達(dá)式;增量表達(dá)式)循環(huán)體此中:初始化表達(dá)式:往常用來(lái)給循環(huán)變量賦初值,一般是賦值表達(dá)式,用來(lái)給循環(huán)控制變量賦初值。也同意在for語(yǔ)句外給循環(huán)變量賦初值,此時(shí)能夠省略該表達(dá)式。條件表達(dá)式:往常是循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式。增量表達(dá)式:往??捎脕?lái)改正循環(huán)變量的值,一般是賦值語(yǔ)句??刂谱兞棵垦h(huán)一次后按什么方式變化。for語(yǔ)句的履行過(guò)程是:1)計(jì)算初始化表達(dá)式的值。2)計(jì)算條件表達(dá)式的值,若值為真(非0)

30、則履行循-環(huán)體中的語(yǔ)句,轉(zhuǎn)第(3)步;若值為假(0)則轉(zhuǎn)第(4)步。(3)計(jì)算增量表達(dá)式的值,轉(zhuǎn)第(2)步重復(fù)履行。(4)結(jié)束循環(huán)。初始化表達(dá)式假(0)條件表達(dá)式真(非0)循環(huán)體增量表達(dá)式程序流程圖如圖2.12所示。圖2.12程序流程圖例2.15求123+100的和,用for語(yǔ)句實(shí)現(xiàn)。定義i,sum賦初值假(0)i=100真(非0)sum+=i;i+-圖2.13程序流程圖剖析:此問(wèn)題的流程圖以下:程序代碼寫(xiě)為:#includevoidmain()inti,sum=0;for(i=1;i=100;i+)sum+=0;printf(“sum=%dn”,sum);思慮:求2+4+6+200的和提示:

31、把增量表達(dá)式改為:i+=2例2.16輸入一個(gè)110間的自然數(shù),用for語(yǔ)句求這個(gè)數(shù)的階乘。剖析:程序的流程圖以下:inti=1,n,s=1;scanf(“%d”,&n);假(0)i=n真(非0)s*=i;i+;圖2.14程序流程圖-完好的程序代碼為:#includevoidmain()inti,n,s=1;scanf(“%d”,&n);for(i=1;i=n;i+)s*=i;printf(“%d!=%dn”,n,s);思慮:在main函數(shù)中輸入一個(gè)大于110的自然數(shù)n,調(diào)用函數(shù)fun,計(jì)算:1+2+3+n,在main函數(shù)中輸出結(jié)果,請(qǐng)達(dá)成填空。#includedoublefun(intn)/*

32、乞降*/voidmain()intx;doubles;-scanf(“%d”,&x);s=fun(x);printf(“s=%lfn”,s);例2.17改正例2.14的查分程序,用for語(yǔ)句實(shí)現(xiàn)成績(jī)的輸入。#includevoidquery(inta,intn)intscore,i;printf(Pleaseinputscore:);scanf(%d,&score);for(i=0;in;i+)if(ai=score)printf(studentNO.:%dn,i);printf(thequeryover!n);voidmain()inti,a20,;for(i=0;i20;i+)printf

33、(nstudent%i,score:,i);scanf(%d,&ai);query(a,20);-主函數(shù)的程序流程圖如圖2.15所示,查分函數(shù)的程序流程圖如圖2.16所示。輸入成績(jī)scorei=0i=0假(0)假(0)i20i20真(非0)真(非0)不相等輸入成績(jī)ai比較ai、score查成績(jī)相等i+輸出學(xué)號(hào)i+圖2.15主函數(shù)的程序流程圖圖2.16查分函數(shù)的程序流程圖在使用for語(yǔ)句中要注意以下幾點(diǎn):1)for語(yǔ)句中的各表達(dá)式都能夠是逗號(hào)表達(dá)式,也可都省略,但分號(hào)作為間隔符不可以少。比如:求整型數(shù)組a的元素和,設(shè)數(shù)組大小10,能夠用以下幾種方式表述:for(初始化表達(dá)式;條件表達(dá)式;增量表達(dá)

34、式)inti,s=0;for(i=0;i10;i+)-s+=ai;for(;條件表達(dá)式;增量表達(dá)式)在循環(huán)變量已賦初值時(shí),可省去初始化表達(dá)式。inti=0,s=0;for(;i=10)break;for(初始化表達(dá)式;條件表達(dá)式;)如省去增量表達(dá)式,則不對(duì)循環(huán)控制變量進(jìn)行操作,有可能造成死循環(huán),這時(shí)應(yīng)在循環(huán)體內(nèi)想法實(shí)現(xiàn)循環(huán)變量的改變,即語(yǔ)句體中加入改正循環(huán)控制變量的語(yǔ)句。inti,s=0;for(i=0;i=10)break;循環(huán)體能夠是空語(yǔ)句for(初始化表達(dá)式;條件表達(dá)式;增量表達(dá)式);for(i=0,s=0;i10;s+=ai,i+);例2.18輸入一行字符并計(jì)算出字符個(gè)數(shù)。#inclu

35、devoidmain()intn=0;printf(Pleaseinputastring:n);for(;getchar()!=n;n+);printf(%d,n);程序中的循環(huán)條件為getchar()!=n,判斷從鍵盤(pán)輸入的字符能否是回車。增量表達(dá)式用于字符計(jì)數(shù),而不是用來(lái)改正循環(huán)變量,全部的工作都在表達(dá)式中已達(dá)成,循環(huán)體是空語(yǔ)句了,注意此時(shí)空語(yǔ)句的分號(hào)不行少。思慮:求1+2+3+4+99+100的和,用以上的6種形式來(lái)達(dá)成。for語(yǔ)句一般用于擁有明確循環(huán)次數(shù)的狀況。假如預(yù)先不知道正確的循環(huán)次數(shù),只知道循環(huán)控制條件,循環(huán)次數(shù)及控制條件要在循環(huán)過(guò)程中才能確立的狀況,一般用while或dowhi

36、le語(yǔ)句來(lái)描繪。循環(huán)嵌套循環(huán)能夠嵌套,且三種循環(huán)語(yǔ)句能夠互相嵌套。如for-語(yǔ)句可與while、dowhile語(yǔ)句互相嵌套,構(gòu)成多重循環(huán)。循環(huán)和循環(huán)一般是并列或嵌套的,絕不可以交錯(cuò)。在循環(huán)中可用轉(zhuǎn)移語(yǔ)句把流程轉(zhuǎn)到循環(huán)體外,但絕不可以從外面轉(zhuǎn)入循環(huán)體內(nèi)。在循環(huán)程序中應(yīng)防止出現(xiàn)死循環(huán),即應(yīng)保證循環(huán)變量的值在運(yùn)轉(zhuǎn)過(guò)程中能夠獲得改正,最后使循環(huán)條件變成假,進(jìn)而結(jié)束循環(huán)。比如從鍵盤(pán)讀入數(shù)組a45值的程序段可寫(xiě)為:inta45,j,k;for(j=0;j4;j+)/*循環(huán)嵌套*/for(k=0;k5;k+)scanf(“%d”,&ajk);或?qū)憺椋篿nta45,j,k;for(j=0;j4;j+)for(

37、k=0;k5;k+)scanf(“%d”,aj+k);相同道理,把數(shù)組中的值輸出到顯示器上的程序段可寫(xiě)為:for(j=0;j4;j+)for(k=0;k5;k+)printf(“%4d”,ajk);printf(“n”);在以上的程序段中,先履行外循環(huán)j=0,而后進(jìn)入內(nèi)循環(huán),當(dāng)內(nèi)循環(huán)履行次退后出內(nèi)循環(huán),進(jìn)行第二次j=2外循環(huán),因此內(nèi)、外循環(huán)變量的變化狀況以下表所示。外循環(huán)內(nèi)循環(huán)變量變量-j=0k=0、1、2、3、4j=1k=0、1、2、3、4j=2k=0、1、2、3、4j=3k=0、1、2、3、4例2.19從鍵盤(pán)讀入一個(gè)4行5列的數(shù)組,輸出數(shù)組中的最大值。#includevoidmain()i

38、nta45,j,k,max;for(j=0;j4;j+)for(k=0;k5;k+)scanf(“%d”,&ajk);for(j=0;j4;j+)for(k=0;k5;k+)printf(“%4d”,ajk);printf(“n”);max=a00;for(j=0;j4;j+)for(k=0;kmax)max=ajk;printf(“max=%dn”,max);-例2.20輸出一張乘法九九表。算法設(shè)計(jì):用兩個(gè)嵌套for循環(huán),外for循環(huán)履行9次,每一次包含一個(gè)內(nèi)for循環(huán)用來(lái)打印1行。這樣兩個(gè)for循環(huán)打印9行。#includevoidmain()inti,j;for(i=1;i10;i+)p

39、rintf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j=i;j+)printf(%2d*%d=%-3d,i,j,i*j);printf(n);例2.21編一程序,打印圖示的輸出。*剖析:外循環(huán)5次,循環(huán)語(yǔ)句為for(i=0;i5;i+);而后循環(huán)空格,循環(huán)語(yǔ)句為for(j=0;ji;j+);內(nèi)層循環(huán)5次,循環(huán)語(yǔ)-句為for(k=0;k5-i;k+),因此程序代碼為:#includevoidmain()inti,j,k;for(i=0;i5;i+)for(j=0;ji;j+)printf(“);for(k=0;k5-i;k+)printf(“*“);p

40、rintf(“n”);例2.22在屏幕上顯示如圖2.17所示的圖形。一行為*,一行為+,每一行的字符數(shù)逐減。*+*+*+*+*圖2.17+屏幕顯示圖形#includevoidmain()introw=10,column;while(row0)column=0;while(columnrow)-printf(%c,row%2?+:*);+column;-row;printf(n);例2.23把數(shù)組中的重復(fù)數(shù)據(jù)去掉。算法設(shè)計(jì):對(duì)數(shù)組中的每一元素與后來(lái)面的元素比較,把后來(lái)的相i=0in真(非0)假(0)j=i+1k=jai=ajak=ak+1j+k+真(非0)假(0)jnkn假(0)i+真(非0)同

41、元素刪除。程序流程圖如圖2.18所示。圖2.18程序流程圖#include#defineMAXSIZE10voidmain()inti=0,j,k,n=MAXSIZE,aMAXSIZE=43,56,78,33,56,78,66,-33,74,78;while(in)for(j=i+1;jn;j+)if(ai=aj)for(k=j;kn;k+)ak=ak+1;n-;i+;for(i=0;in;i+)printf(%6d,ai);break語(yǔ)句與continue語(yǔ)句在前面的switch語(yǔ)句中,已經(jīng)用到了break語(yǔ)句,用來(lái)跳出switch語(yǔ)句,轉(zhuǎn)去履行switch此后的程序。相同,在用for、wh

42、ile、do-while語(yǔ)句構(gòu)成的循環(huán)中,也可用break語(yǔ)句跳出所在層的循環(huán),停止該層循環(huán)而履行該循環(huán)后邊的語(yǔ)句。一般break語(yǔ)句老是與if語(yǔ)句聯(lián)系在一同,即知足條件時(shí)便跳出循環(huán)。使用break語(yǔ)句能夠使循環(huán)語(yǔ)句有多個(gè)出口,使編程更為靈巧、方便。此外,continue語(yǔ)句用來(lái)結(jié)束本次循環(huán),即不再履行循環(huán)體中continue語(yǔ)句以后的語(yǔ)句,轉(zhuǎn)入下一次循環(huán)條件的判斷與履行。其作用是:跳過(guò)循環(huán)體中節(jié)余的語(yǔ)句,而強(qiáng)行-履行下一次循環(huán)。break語(yǔ)句break為中斷語(yǔ)句,程序無(wú)條件地從while,dowhile,for,switch中跳出。格式:while(表達(dá)式)語(yǔ)句塊1;if(條件)break;

43、語(yǔ)句塊2;其流程控制圖為:0表達(dá)式1語(yǔ)句塊11條件break0語(yǔ)句塊2圖2.19程序流程圖例2.24break舉例#includevoidmain()staticinta45=1,2,3,4,0,-2,2,0,3,0,3,0,5,6,7,5,0,0,0,0;intj,k;for(j=0;j4;j+)for(k=0;k5;k+)if(ajk=0)break;printf(%d,ajk);printf(n);剖析:當(dāng)只需判斷到aik=0為真時(shí),就中斷內(nèi)層循環(huán),因此即便某行的元素為3,0,5,6,7判斷到0后就中斷內(nèi)層循環(huán),所以5,6,7也不輸出。程序履行結(jié)果:12342continue語(yǔ)句cont

44、inue的功能是從循環(huán)的途中返回到循環(huán)開(kāi)頭處的控制構(gòu)造。格式:while(表達(dá)式)/*(for或do)*/語(yǔ)句塊1if(若為某一條件的話)continue;-語(yǔ)句塊2;0表達(dá)式1語(yǔ)句塊11continue條件0語(yǔ)句塊2圖2.20程序流程圖例225從鍵盤(pán)上輸入不多于10個(gè)實(shí)數(shù),求這些數(shù)的總和及此中正數(shù)的總和。若不足10個(gè)數(shù),則以0作為結(jié)束標(biāo)志。#include#includevoidmain()floatsum,psum,x;inti;for(sum=psum=0.0,i=0;i10;i+)scanf(%f,&x);if(fabs(x)1e-4)break;sum+=x;if(x0)continue;psum+=x;-printf(sum=%fn,sum);printf(psum=%fn,psum);自然除了break、continue語(yǔ)句,還有無(wú)條件轉(zhuǎn)移語(yǔ)句goto語(yǔ)句、返回主調(diào)函數(shù)的return語(yǔ)句和exit(

溫馨提示

  • 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)論