C語(yǔ)言程序設(shè)計(jì)課件-第4章_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件-第4章_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件-第4章_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件-第4章_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件-第4章_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì)TheCProgrammingLanguage華中科技大學(xué)計(jì)算機(jī)學(xué)院

曹計(jì)昌8/7/20231華中科技大學(xué)計(jì)算機(jī)學(xué)院C語(yǔ)言程序設(shè)計(jì)TheCProgrammingLanguC語(yǔ)言程序設(shè)計(jì)第4章流程控制8/7/20232華中科技大學(xué)計(jì)算機(jī)學(xué)院C語(yǔ)言程序設(shè)計(jì)第4章流程控制7/31/20232華中科技大主要內(nèi)容4.1C語(yǔ)句分類(lèi) 4.2表達(dá)式語(yǔ)句4.3復(fù)合語(yǔ)句

4.4if語(yǔ)句4.5switch語(yǔ)句

4.6while語(yǔ)句4.7for語(yǔ)句 4.8do-while語(yǔ)句4.9goto語(yǔ)句和標(biāo)號(hào)語(yǔ)句4.10break語(yǔ)句、continue語(yǔ)句和return語(yǔ)句4.11嵌套循環(huán)程序設(shè)計(jì)**4.12推理機(jī)程序設(shè)計(jì)8/7/20233華中科技大學(xué)計(jì)算機(jī)學(xué)院主要內(nèi)容4.1C語(yǔ)句分類(lèi) 4.2表達(dá)式語(yǔ)句7/31/2C語(yǔ)句4.1C語(yǔ)句分類(lèi)

說(shuō)明語(yǔ)句可執(zhí)行語(yǔ)句變量說(shuō)明、函數(shù)說(shuō)明、常量定義、類(lèi)型定義、……表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句、選擇語(yǔ)句(if和switch)、循環(huán)語(yǔ)句(while,do-while和for)、轉(zhuǎn)移語(yǔ)句(break,continue,goto和return)、標(biāo)號(hào)語(yǔ)句8/7/20234華中科技大學(xué)計(jì)算機(jī)學(xué)院C語(yǔ)句4.1C語(yǔ)句分類(lèi)說(shuō)明語(yǔ)句可執(zhí)行語(yǔ)句變量說(shuō)明、函數(shù) 在任何C表達(dá)式的末尾加一個(gè)分號(hào)都可以構(gòu)成一個(gè)語(yǔ)句,即表達(dá)式語(yǔ)句。表達(dá)式語(yǔ)句的一般形式: 表達(dá)式; 其中,“;”是C語(yǔ)句不可缺少的組成部分,它表示一個(gè)語(yǔ)句的結(jié)束。在C語(yǔ)言中,賦值、輸入和輸出都由表達(dá)式語(yǔ)句實(shí)現(xiàn)。例:x=y+1 x=y+1; x+=y x+=y; i=j=k i=j=k;

printf(”hello”) printf(”hello”); scanf(”%d”,&x) scanf(”%d”,&x);

4.2表達(dá)式語(yǔ)句

8/7/20235華中科技大學(xué)計(jì)算機(jī)學(xué)院 在任何C表達(dá)式的末尾加一個(gè)分號(hào)都可以構(gòu)成一個(gè) 再如: a–b; 也是一個(gè)表達(dá)式語(yǔ)句,但是由于在表達(dá)式求值的過(guò)程中并沒(méi)有改變?nèi)魏巫兞康闹?,這樣的表達(dá)式語(yǔ)句并沒(méi)有實(shí)際意義。 僅由一個(gè)分號(hào)構(gòu)成的語(yǔ)句稱(chēng)為空語(yǔ)句,即: ; 它不執(zhí)行任何操作。在程序設(shè)計(jì)中,如果某處在語(yǔ)法上需要一條語(yǔ)句,而在實(shí)際功能上不需要執(zhí)行任何操作時(shí),可以使用空語(yǔ)句。4.2表達(dá)式語(yǔ)句(續(xù))

8/7/20236華中科技大學(xué)計(jì)算機(jī)學(xué)院 再如:4.2表達(dá)式語(yǔ)句(續(xù))7/31/20236華中1.復(fù)合語(yǔ)句的一般形式 用花括號(hào)“{}”括起來(lái)的一組語(yǔ)句,語(yǔ)法上等價(jià)于單個(gè)語(yǔ)句,語(yǔ)法格式為: { 說(shuō)明部分 語(yǔ)句部分 } 說(shuō)明部分可包含0至多個(gè)說(shuō)明語(yǔ)句;語(yǔ)句部分可包含0至多個(gè)執(zhí)行語(yǔ)句。 復(fù)合語(yǔ)句又稱(chēng)塊。函數(shù)體是一個(gè)塊。4.3復(fù)合語(yǔ)句8/7/20237華中科技大學(xué)計(jì)算機(jī)學(xué)院1.復(fù)合語(yǔ)句的一般形式4.3復(fù)合語(yǔ)句7/31/20237例4.3:不含說(shuō)明語(yǔ)句的復(fù)合語(yǔ)句{ t=a;a=b;b=t;}例4.4:包含說(shuō)明了語(yǔ)句的復(fù)合語(yǔ)句。{ intt; t=a;a=b;b=t;}復(fù)合語(yǔ)句舉例8/7/20238華中科技大學(xué)計(jì)算機(jī)學(xué)院例4.3:不含說(shuō)明語(yǔ)句的復(fù)合語(yǔ)句復(fù)合語(yǔ)句舉例7/31/2022.嵌套的復(fù)合語(yǔ)句 復(fù)合語(yǔ)句中包含復(fù)合語(yǔ)句,從而形成嵌套的復(fù)合語(yǔ)句。例如:{ inta=0,b=1; { inta=1; printf(”a=%d\n”,a); printf(”b=%d\n”,b+=1); } printf(“a=%d\n”,a); printf(“b=%d\n”,b);}4.3復(fù)合語(yǔ)句(續(xù))8/7/20239華中科技大學(xué)計(jì)算機(jī)學(xué)院2.嵌套的復(fù)合語(yǔ)句4.3復(fù)合語(yǔ)句(續(xù))7/31/20233.復(fù)合語(yǔ)句的用途 復(fù)合語(yǔ)句在程序設(shè)計(jì)中主要有以下兩種用途: (1)用于語(yǔ)法上只允許出現(xiàn)單個(gè)語(yǔ)句而處理上需要執(zhí)行多個(gè)語(yǔ)句的地方,例如作為if語(yǔ)句的子句及循環(huán)語(yǔ)句的循環(huán)體。 (2)用于改變嵌套if-else語(yǔ)句的配對(duì)規(guī)則。 此外,當(dāng)需要說(shuō)明臨時(shí)使用的局部變量時(shí),也可使用復(fù)合語(yǔ)句。4.3復(fù)合語(yǔ)句(續(xù))8/7/202310華中科技大學(xué)計(jì)算機(jī)學(xué)院3.復(fù)合語(yǔ)句的用途4.3復(fù)合語(yǔ)句(續(xù))7/31/20231.if語(yǔ)句的一般形式 if語(yǔ)句有兩種形式: (1)if格式:if(表達(dá)式)語(yǔ)句1; (2)if-else格式:if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;4.4if語(yǔ)句8/7/202311華中科技大學(xué)計(jì)算機(jī)學(xué)院1.if語(yǔ)句的一般形式4.4if語(yǔ)句7/31/20232.嵌套的if語(yǔ)句 1)嵌套if語(yǔ)句的形式 當(dāng)if子句或else子句中又包含if語(yǔ)句時(shí),則形成嵌套的if語(yǔ)句。例如,可以用下面的一個(gè)嵌套的if語(yǔ)句求a,b,c三個(gè)數(shù)中最大值: if(a>b) if(a>c)max=a; elsemax=c; else if(b>c)max=b; elsemax=c;4.4if語(yǔ)句(續(xù))8/7/202312華中科技大學(xué)計(jì)算機(jī)學(xué)院2.嵌套的if語(yǔ)句4.4if語(yǔ)句(續(xù))7/31/202 2)嵌套if語(yǔ)句中else的配對(duì)規(guī)則 對(duì)嵌套if語(yǔ)句中else與if的配對(duì)必須制定一個(gè)規(guī)則,否則會(huì)造成理解上的二義性。例如: if(n>0) if(a>b)z=a; elsez=b;

編譯程序約定:else與其前面最靠近的還未配對(duì)的if配對(duì),即內(nèi)層優(yōu)先配對(duì)原則。

4.4if語(yǔ)句(續(xù))8/7/202313華中科技大學(xué)計(jì)算機(jī)學(xué)院 2)嵌套if語(yǔ)句中else的配對(duì)規(guī)則4.4if語(yǔ)句(例4.6:解方程ax+b=0,a和b從終端輸入。#include<stdio.h>voidmain(void){ floata,b,x; printf(”inputa,b:\n”); scanf(”%f%f”,&a,&b); if(!a)printf(”errorininputdata\n”); else{ x=-b/a; printf(”x=%.4f\n”,x);}}3.程序設(shè)計(jì)舉例8/7/202314華中科技大學(xué)計(jì)算機(jī)學(xué)院例4.6:解方程ax+b=0,a和b從終端輸入。3.1.switch語(yǔ)句的形式 switch語(yǔ)句的一般形式為: switch(表達(dá)式){ case常量表達(dá)式1:語(yǔ)句序列1; case常量表達(dá)式2:語(yǔ)句序列2; … case常量表達(dá)式n:語(yǔ)句序列n; default: 語(yǔ)句序列n+1; }4.5switch語(yǔ)句8/7/202315華中科技大學(xué)計(jì)算機(jī)學(xué)院1.switch語(yǔ)句的形式4.5switch語(yǔ)句7/32.switch語(yǔ)句的使用要點(diǎn) 使用switch語(yǔ)句時(shí),第一要注意列出的case應(yīng)能包括選擇表達(dá)式所有的取值情況,如果不能全部包括,則應(yīng)使用default子句處理余下的情況。

第二應(yīng)特別注意break在switch中的作用,如果希望執(zhí)行完某一case下的語(yǔ)句之后便跳出switch語(yǔ)句,則必須使用break或return轉(zhuǎn)移語(yǔ)句。break跳出switch語(yǔ)句之后繼續(xù)執(zhí)行switch語(yǔ)句后面的一個(gè)語(yǔ)句(如果有),return語(yǔ)句則立即結(jié)束函數(shù)并返回到調(diào)用處(如果是主函數(shù),則結(jié)束程序)。4.5switch語(yǔ)句(續(xù))8/7/202316華中科技大學(xué)計(jì)算機(jī)學(xué)院2.switch語(yǔ)句的使用要點(diǎn)4.5switch語(yǔ)句( 例如:下面是一個(gè)不含轉(zhuǎn)移語(yǔ)句的switch語(yǔ)句,注意觀察該語(yǔ)句執(zhí)行時(shí)的輸出。 i=1; switch(i){ case0:printf("%d\t",i); case1:printf("%d\t",i++); case2:printf("%d\t",i++); case3:printf("%d",i++); default:printf("\n"); } printf("%d\n",i);

4.5switch語(yǔ)句(續(xù))輸出:1234 8/7/202317華中科技大學(xué)計(jì)算機(jī)學(xué)院 例如:下面是一個(gè)不含轉(zhuǎn)移語(yǔ)句的switch語(yǔ)句,注意觀察該例4.8:學(xué)生考試成績(jī)按以下標(biāo)準(zhǔn)分等(x為學(xué)生考試分?jǐn)?shù)): 分?jǐn)?shù)范圍 等級(jí)英文名 90≤x≤100 excellent(優(yōu)) 80≤x<90 good(良) 60≤x<80 middle(中) x<60 bad(差) 輸入某學(xué)生的考試分?jǐn)?shù),輸出該學(xué)生的考試成績(jī)的英文等級(jí)。要求用switch語(yǔ)句來(lái)實(shí)現(xiàn)。3.程序設(shè)計(jì)舉例8/7/202318華中科技大學(xué)計(jì)算機(jī)學(xué)院例4.8:學(xué)生考試成績(jī)按以下標(biāo)準(zhǔn)分等(x為學(xué)生考試分?jǐn)?shù)):3 分析:switch語(yǔ)句可用來(lái)解決多分支問(wèn)題,但每個(gè)case后面的常量都是一個(gè)離散的值,不能表示一個(gè)數(shù)值范圍。為此,將分?jǐn)?shù)范圍[0,100]每10分劃為一段,則可劃分為[0,10),[10,20),[20,30),[30,40),[40,50),[50,60),[60,70),[70,80),[80,90),[90,100)十個(gè)分?jǐn)?shù)段。進(jìn)一步對(duì)分?jǐn)?shù)值進(jìn)行除以10然后取整的處理,可以發(fā)現(xiàn)上面同一分?jǐn)?shù)段內(nèi)的分?jǐn)?shù)經(jīng)處理后得到相同的一個(gè)整數(shù)。比如,[0,10)范圍內(nèi)的數(shù)除以10然后取整,結(jié)果都是0;[10,20)范圍內(nèi)的數(shù)除以10然后取整,結(jié)果都是1;……這樣一來(lái),就可以用一個(gè)離散值代表一個(gè)分?jǐn)?shù)段內(nèi)的所有分?jǐn)?shù)值。p98

例4.8源程序代碼ex4.8.c。3.程序設(shè)計(jì)舉例(續(xù))8/7/202319華中科技大學(xué)計(jì)算機(jī)學(xué)院 分析:switch語(yǔ)句可用來(lái)解決多分支問(wèn)題,但每個(gè)casep99例4.9:輸入某年某月,輸出該月的天數(shù)。 注意:switch語(yǔ)句允許多種情況執(zhí)行相同的語(yǔ)句,執(zhí)行相同語(yǔ)句的case可以寫(xiě)成一行,其間可以用空格或制表符分隔,但不能用逗號(hào)分隔。例如: case4:case6:case9:case11:days=30; 正確 case4,case6,case9,case11:days=30; 錯(cuò)誤 case4,6,9,11:days=30; 錯(cuò)誤4.5switch語(yǔ)句(續(xù))8/7/202320華中科技大學(xué)計(jì)算機(jī)學(xué)院p99例4.9:輸入某年某月,輸出該月的天數(shù)。4.5s1.while語(yǔ)句的形式 while語(yǔ)句的一般形式為: while(表達(dá)式)語(yǔ)句 while語(yǔ)句流程圖:4.6while語(yǔ)句8/7/202321華中科技大學(xué)計(jì)算機(jī)學(xué)院1.while語(yǔ)句的形式4.6while語(yǔ)句7/31/ i=0; while(i<5){ printf(”i=%d\t”,i); i++; } printf(”i=%d\n”,i);

注意:如果循環(huán)體中沒(méi)有改變循環(huán)變量的值,或循環(huán)變量值的變化不能使循環(huán)控制表達(dá)式的結(jié)果為0,則循環(huán)將永不終止(通常稱(chēng)之為“死循環(huán)”)。如果循環(huán)控制表達(dá)式的值一開(kāi)始就為0(條件為假),則循環(huán)體一次都不執(zhí)行。解釋:p101-p102例4.11,例4.12,例4.13

例4.10while循環(huán)語(yǔ)句示例8/7/202322華中科技大學(xué)計(jì)算機(jī)學(xué)院 i=0;例4.10while循環(huán)語(yǔ)句示例7/31/2 例4.14:將來(lái)自標(biāo)準(zhǔn)輸入文件的正文復(fù)制到標(biāo)準(zhǔn)輸出文件,每次輸入和復(fù)制一個(gè)字符。

分析:以EOF(系統(tǒng)常量,值為-1)為結(jié)束標(biāo)志的字符流稱(chēng)為一個(gè)正文,可以包含空白字符,例如空格符、制表符和換行符。根據(jù)題目要求,輸入函數(shù)應(yīng)使用getchar(每次輸入一個(gè)字符),輸出函數(shù)應(yīng)使用putchar(每次輸出一個(gè)字符);復(fù)制過(guò)程是一個(gè)重復(fù)地調(diào)用getchar讀和調(diào)用putchar寫(xiě)的過(guò)程,因此程序的流程結(jié)構(gòu)是一個(gè)循環(huán)語(yǔ)句;讀入的字符是否為EOF則是循環(huán)控制條件。2.程序設(shè)計(jì)舉例8/7/202323華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.14:將來(lái)自標(biāo)準(zhǔn)輸入文件的正文復(fù)制到標(biāo)準(zhǔn)輸出文件,每 例4.14:算法步驟: (1)調(diào)用getchar讀入一個(gè)字符并賦給字符變量c。 (2)如果c不是EOF,則執(zhí)行(3);否則結(jié)束執(zhí)行。 (3)輸出c; (4)讀下一字符并賦給字符變量c; (5)轉(zhuǎn)步驟(2)。

p102

例4.14源程序代碼ex4.14.c2.程序設(shè)計(jì)舉例(續(xù))8/7/202324華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.14:算法步驟:2.程序設(shè)計(jì)舉例(續(xù))7/31/20例4.15輸入一個(gè)C程序(一段正文),按原來(lái)格式復(fù)制輸出,復(fù)制過(guò)程中刪去輸入程序中所有的注釋。 分析:為了刪去C程序中所有的注釋?zhuān)P(guān)鍵在于如何區(qū)分注釋部分和需要復(fù)制的部分。為此,可將復(fù)制過(guò)程劃分為4種狀態(tài):復(fù)制狀態(tài)(COPY)、開(kāi)始注釋狀態(tài)(START)、注釋狀態(tài)(COMMENT)和結(jié)束復(fù)制狀態(tài)(END),初始狀態(tài)為COPY。每種狀態(tài)下的處理方法如下: (1)在COPY狀態(tài)下,若讀入字符為’/’(可能為注釋開(kāi)始符號(hào)),則將狀態(tài)改為START;否則將讀入的字符復(fù)制到輸出。 2.程序設(shè)計(jì)舉例(續(xù))8/7/202325華中科技大學(xué)計(jì)算機(jī)學(xué)院例4.15輸入一個(gè)C程序(一段正文),按原來(lái) (2)在START狀態(tài)下,若讀入字符為’*’(確定注釋開(kāi)始),則將狀態(tài)改為COMMENT;否則(不是注釋),將上一次讀入的字符’/’復(fù)制到輸出;然后檢查本次讀入的字符是否為’/’,若是,則狀態(tài)保持START不變,否則將本次讀入的字符復(fù)制到輸出并將狀態(tài)改為COPY。 (3)在COMMENT狀態(tài)下,若讀入字符為’*’(可能為注釋結(jié)束符號(hào)),則將狀態(tài)改為END。 (4)在END狀態(tài)下,若讀入字符為’/’(確定注釋結(jié)束),則將狀態(tài)恢復(fù)成COPY;否則(不是注釋結(jié)束),如果讀入字符是’*’,則狀態(tài)保持END不變,否則將狀態(tài)改為COMMENT。(p104源程序4.15)2.程序設(shè)計(jì)舉例(續(xù))8/7/202326華中科技大學(xué)計(jì)算機(jī)學(xué)院 (2)在START狀態(tài)下,若讀入字符為’*’(確定注釋開(kāi)1.for語(yǔ)句的形式 for語(yǔ)句的一般語(yǔ)法形式表示為: for(e1;e2;e3)s for語(yǔ)句流程圖:等價(jià)于: e1; while(e2){ s; e3; }4.7for語(yǔ)句8/7/202327華中科技大學(xué)計(jì)算機(jī)學(xué)院1.for語(yǔ)句的形式4.7for語(yǔ)句7/31/2023 使用for語(yǔ)句時(shí)須注意表達(dá)式e1,e2,e3的用法: (1)三個(gè)表達(dá)式可以全部或部分缺省,但無(wú)論缺省e1,e2或e3,它們之間的分號(hào)不能省。 (2)缺省e1和e3時(shí)的for語(yǔ)句形如for(;e2;)s,等價(jià)于一個(gè)形如while(e2)s的while語(yǔ)句。 (3)缺省e2時(shí)的for語(yǔ)句for(e1;;e3)s和三個(gè)表達(dá)式都缺省的for語(yǔ)句for(;;)s都是無(wú)限循環(huán)語(yǔ)句。被省略的e2缺省值恒為非0(e1和e3沒(méi)有缺省值)。4.7for語(yǔ)句(續(xù))8/7/202328華中科技大學(xué)計(jì)算機(jī)學(xué)院 使用for語(yǔ)句時(shí)須注意表達(dá)式e1,e2,e3的用法:4.7例4.16:for循環(huán)語(yǔ)句示例。 inti; for(i=1;i<4;i++) printf(”i=%ds=%d\n”,i,2*i);幾種等價(jià)的形式: i=1; for(;i<4;i++) printf(”i=%ds=%d\n”,i,2*i);或 for(i=1;i<4;){ printf(”i=%ds=%d\n”,i,2*i); i++; }4.7for語(yǔ)句(續(xù))8/7/202329華中科技大學(xué)計(jì)算機(jī)學(xué)院例4.16:for循環(huán)語(yǔ)句示例。4.7for語(yǔ)句(續(xù))7或 i=1; for(;i<4;){ printf(”i=%ds=%d\n”,i,2*i); i++; }或 i=1; for(;;){ printf(”i=%ds=%d\n”,i,2*i); i++; if(!(i<4))break; }4.7for語(yǔ)句(續(xù))8/7/202330華中科技大學(xué)計(jì)算機(jī)學(xué)院或4.7for語(yǔ)句(續(xù))7/31/202330華中科技大 例4.19:輸入一批整數(shù),以0為結(jié)束。輸出其中最大的一個(gè)值。

分析:從若干個(gè)數(shù)中找出最大的一個(gè)數(shù)可用"打擂臺(tái)"的方法,即兩兩相比,大者留下;當(dāng)所有的數(shù)比完時(shí)留下的那個(gè)數(shù)為最大。比較過(guò)程采用每次輸入一個(gè)數(shù)立即與上一次留下的那個(gè)較大的數(shù)比較的方法,因此程序中只需用兩個(gè)變量:一個(gè)變量x用于保存每次輸入的一個(gè)數(shù)據(jù),另一個(gè)變量max用于保存每?jī)蓚€(gè)數(shù)相比中較大的一個(gè)數(shù)。這種方法可以用于從任意多個(gè)輸入數(shù)據(jù)中找出其中的最大值。2.程序設(shè)計(jì)舉例8/7/202331華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.19:輸入一批整數(shù),以0為結(jié)束。輸出其中最大的一個(gè)值 例4.19:算法步驟: (1)輸入第一個(gè)數(shù)(x)。 (2)置最大數(shù)max初值為x。 (3)如果x不等于0,則執(zhí)行(4);否則,執(zhí)行(7)。 (4)輸入下一個(gè)數(shù)(x)。 (5)如果max<x,則將max修改為x(賦值)。 (6)轉(zhuǎn)步驟(3)。 (7)輸出max,結(jié)束。

p107

例4.19源程序代碼ex4.19.c。2.程序設(shè)計(jì)舉例(續(xù))8/7/202332華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.19:算法步驟:2.程序設(shè)計(jì)舉例(續(xù))7/31/20 例4.20:求n!,n從終端輸入。 分析:根據(jù)階乘的定義,n為≥0的整數(shù),n的階乘等于1至n連乘,即n!=1*2*3*...*n。這種反復(fù)進(jìn)行的相同或類(lèi)似的操作可以通過(guò)循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)。循環(huán)體實(shí)現(xiàn)的操作是,每循環(huán)一次時(shí)將第i項(xiàng)(i分別為1,2,3,…,n)與前面各項(xiàng)相乘的結(jié)果(即i-1的階乘)相乘(稱(chēng)為累乘);循環(huán)結(jié)束條件為i等于n。i起著雙重作用,既是階乘因子又是循環(huán)變量。 考慮到n較大時(shí)n!是一個(gè)相當(dāng)大的數(shù),為避免溢出,應(yīng)將結(jié)果變量說(shuō)明為long,unsignedlong,或double。此外,累乘過(guò)程開(kāi)始之前一定要將存放累乘積的變量置初值1,而不能置為0。2.程序設(shè)計(jì)舉例(續(xù))8/7/202333華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.20:求n!,n從終端輸入。2.程序設(shè)計(jì)舉例(續(xù))7 例4.20:算法步驟: (1)輸入n。 (2)將累乘積變量fac及循環(huán)變量i置初值1。 (3)如果i≤n,則執(zhí)行累乘(fac=fac*i);否則(i>n),轉(zhuǎn)步驟(5)。 (4)將i值增加1,轉(zhuǎn)步驟(3)。 (5)輸出累乘結(jié)果fac,結(jié)束。

p108

例4.20源程序代碼ex4.20.c。2.程序設(shè)計(jì)舉例(續(xù))8/7/202334華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.20:算法步驟:2.程序設(shè)計(jì)舉例(續(xù))7/31/201.do-while語(yǔ)句的形式 do-while語(yǔ)句的一般形式為: do語(yǔ)句while(表達(dá)式); do-while語(yǔ)句流程圖:4.8do-while語(yǔ)句8/7/202335華中科技大學(xué)計(jì)算機(jī)學(xué)院1.do-while語(yǔ)句的形式4.8do-while語(yǔ) do-while語(yǔ)句: do語(yǔ)句while(表達(dá)式);可以用以下等價(jià)的while循環(huán)語(yǔ)句來(lái)代替。 語(yǔ)句 while(表達(dá)式) { 語(yǔ)句 }4.8do-while語(yǔ)句(續(xù))8/7/202336華中科技大學(xué)計(jì)算機(jī)學(xué)院 do-while語(yǔ)句:4.8do-while語(yǔ)句(續(xù)) 例4.21:把輸入的整數(shù)按反方向輸出。例如,輸入的數(shù)是12345,要求輸出結(jié)果是54321。 分析:在輸入一個(gè)整數(shù)時(shí),是從高位到低位(或者說(shuō)從左到右)依次輸入各位上的數(shù)字。要按反方向輸出,就是從低位到高位(或者說(shuō)從右到左)連續(xù)地輸出該數(shù)的各位數(shù)字。具體來(lái)說(shuō),就是先輸出個(gè)位數(shù)字,再輸出十位數(shù)字,直到最高位數(shù)字。獲取一個(gè)整數(shù)的個(gè)位數(shù)字的算法是將該整數(shù)除以10取余(模10)。去掉一個(gè)整數(shù)的個(gè)位數(shù)字(使十位數(shù)字變個(gè)位數(shù)字,百位數(shù)字變十位數(shù)字,直到最高位數(shù)字變次高位數(shù)字)的算法是將該整數(shù)除以10(整數(shù)除)。這樣,可以用循環(huán)語(yǔ)句從低位到高位依次輸出原整數(shù)的數(shù)字。(源程序代碼ex4.21.c)

2.程序設(shè)計(jì)舉例8/7/202337華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.21:把輸入的整數(shù)按反方向輸出。例如,輸入的數(shù)是122.程序設(shè)計(jì)舉例(續(xù)) 例4.24:輸入任意一個(gè)大于或等于2的整數(shù)n,判斷該數(shù)是否為素?cái)?shù)并輸出相應(yīng)結(jié)果。 分析:根據(jù)數(shù)學(xué)定義,一個(gè)大于2的整數(shù)n,如果除1和n外不能被任何數(shù)整除(即n不含1和n以外的任何因子),則n是素?cái)?shù);此外,整數(shù)2不符合上述定義,但規(guī)定2是最小素?cái)?shù)。為了確定n是否含有1和n以外的因子,只需用2至(也可以用2至n-1或2至n/2)作除數(shù)除n。如果均不能整除n,則n是素?cái)?shù),否則(即只要發(fā)現(xiàn)一個(gè)因子)n不是素?cái)?shù)。顯然,用2至作除數(shù)時(shí)所做的除法次數(shù)比用2至n-1或2至n/2作除數(shù)時(shí)少得多。8/7/202338華中科技大學(xué)計(jì)算機(jī)學(xué)院2.程序設(shè)計(jì)舉例(續(xù)) 例4.24:輸入任意一個(gè)大于或等于22.程序設(shè)計(jì)舉例(續(xù)) 例4.24:算法步驟: (1)輸入n,直到n符合要求為止(循環(huán)語(yǔ)句); (2)確定除數(shù)i的初值(i=2)及終值j(j=sqrt(n)); (3)檢查2~sqrt(n)的每一個(gè)數(shù)是否都不是n的因子(循環(huán)語(yǔ)句),方法是,i從2開(kāi)始,用i除n,若余數(shù)非0且i<=j,則使i值增加1再重復(fù)該過(guò)程;若余數(shù)為0(找到一個(gè)因子)或i<=j不成立,則結(jié)束循環(huán)。 (4)如果循環(huán)結(jié)束后余數(shù)為非0,則說(shuō)明2~sqrt(n)范圍內(nèi)的整數(shù)都不是n的因子,因此可以判定n是素?cái)?shù);否則(發(fā)現(xiàn)一個(gè)因子),n不是素?cái)?shù)。

例4.24源程序代碼ex4.24.c。8/7/202339華中科技大學(xué)計(jì)算機(jī)學(xué)院2.程序設(shè)計(jì)舉例(續(xù)) 例4.24:算法步驟:7/31/203.循環(huán)語(yǔ)句小結(jié)(略) 三種循環(huán)語(yǔ)句的區(qū)別及使用要點(diǎn)歸納如下(s是循環(huán)體;e,e1,e2,e3是表達(dá)式): (1)while(e)s和for(e1;e2;e3)s先測(cè)試e或e2,后執(zhí)行s,若第一次測(cè)試時(shí)e或e2結(jié)果為0,則s一次也不執(zhí)行;doswhile(e);先執(zhí)行s,后測(cè)試e,所以s總是至少被執(zhí)行一次。使用時(shí)應(yīng)根據(jù)具體情況選用,一般說(shuō)來(lái),必定要執(zhí)行的循環(huán)可以用三種循環(huán)語(yǔ)句中任何一種;可能不被執(zhí)行的循環(huán)則不能用do-while。 (2)第一次測(cè)試循環(huán)條件(e或e2)之前,循環(huán)變量必須賦初值,初值只賦一次;在循環(huán)體(s)或e3(對(duì)于for語(yǔ)句)中必須有能夠改變循環(huán)變量值的語(yǔ)句或表達(dá)式。寫(xiě)循環(huán)條件時(shí),應(yīng)注意避免無(wú)限循環(huán)、永不執(zhí)行的循環(huán)或執(zhí)行次數(shù)不正確的循環(huán)等情況。8/7/202340華中科技大學(xué)計(jì)算機(jī)學(xué)院3.循環(huán)語(yǔ)句小結(jié)(略) 三種循環(huán)語(yǔ)句的區(qū)別及使用要點(diǎn)歸納如下3.循環(huán)語(yǔ)句小結(jié)(續(xù))(略) (3)for語(yǔ)句控制部分的e1可以包含給循環(huán)變量賦初值以及其他與循環(huán)有關(guān)的運(yùn)算,即在循環(huán)開(kāi)始之前僅執(zhí)行一次的運(yùn)算;e2不要求一定是關(guān)系表達(dá)式或邏輯表達(dá)式,只要能正確控制循環(huán)體的執(zhí)行(非0值執(zhí)行循環(huán)體,0值結(jié)束循環(huán)),任何表達(dá)式都可以;e3是每次執(zhí)行循環(huán)體后緊接著要執(zhí)行的表達(dá)式,通常用于改變循環(huán)變量的值,如i++之類(lèi),e3也可以包括某些屬于循環(huán)體部分的內(nèi)容,也可將e3放到循環(huán)體最后??梢?jiàn),for語(yǔ)句使用非常靈活,其控制部分的三個(gè)表達(dá)式可以容納除循環(huán)變量賦初值、測(cè)試循環(huán)條件和修改循環(huán)變量值的運(yùn)算以外的其他與循環(huán)有關(guān)的運(yùn)算。 (4)任何循環(huán)語(yǔ)句當(dāng)循環(huán)體含有一個(gè)以上語(yǔ)句時(shí),必須寫(xiě)成復(fù)合語(yǔ)句(用{}括起來(lái));當(dāng)循環(huán)體為空語(yǔ)句時(shí)不要掉了分號(hào)(;)。8/7/202341華中科技大學(xué)計(jì)算機(jī)學(xué)院3.循環(huán)語(yǔ)句小結(jié)(續(xù))(略) (3)for語(yǔ)句控制部分的egoto語(yǔ)句又稱(chēng)為無(wú)條件轉(zhuǎn)移語(yǔ)句,它的一般形式為: goto標(biāo)號(hào); 任何可執(zhí)行C語(yǔ)句都可以加標(biāo)號(hào)前綴成為標(biāo)號(hào)語(yǔ)句。標(biāo)號(hào)語(yǔ)句的形式為: 標(biāo)號(hào):語(yǔ)句goto語(yǔ)句中的標(biāo)號(hào)是對(duì)標(biāo)號(hào)的引用,標(biāo)號(hào)語(yǔ)句中的標(biāo)號(hào)是對(duì)標(biāo)號(hào)的定義。被goto語(yǔ)句引用的標(biāo)號(hào)必須有且僅有一個(gè)對(duì)應(yīng)的標(biāo)號(hào)語(yǔ)句,對(duì)應(yīng)的標(biāo)號(hào)語(yǔ)句稱(chēng)為稱(chēng)為該goto語(yǔ)句的目標(biāo)語(yǔ)句;而允許標(biāo)號(hào)語(yǔ)句沒(méi)有對(duì)應(yīng)的goto語(yǔ)句。概而言之,有標(biāo)號(hào)的引用必須有惟一的標(biāo)號(hào)定義,而有標(biāo)號(hào)的定義不必有標(biāo)號(hào)的引用。4.9goto語(yǔ)句和標(biāo)號(hào)語(yǔ)句8/7/202342華中科技大學(xué)計(jì)算機(jī)學(xué)院goto語(yǔ)句又稱(chēng)為無(wú)條件轉(zhuǎn)移語(yǔ)句,它的一般形式為:4.94.9goto語(yǔ)句和標(biāo)號(hào)語(yǔ)句(續(xù))goto語(yǔ)句的目標(biāo)語(yǔ)句允許出現(xiàn)的范圍稱(chēng)為標(biāo)號(hào)的作用域。C語(yǔ)言中標(biāo)號(hào)的作用域是goto語(yǔ)句所在的函數(shù),即goto語(yǔ)句不能從一個(gè)函數(shù)轉(zhuǎn)移到另一個(gè)函數(shù)中,但可以在一個(gè)函數(shù)內(nèi)從嵌套結(jié)構(gòu)的內(nèi)層直接轉(zhuǎn)到最外層。使用標(biāo)號(hào)語(yǔ)句時(shí),要注意同一函數(shù)內(nèi)的標(biāo)號(hào)不能同名。goto語(yǔ)句和標(biāo)號(hào)語(yǔ)句在函數(shù)中出現(xiàn)的先后位置沒(méi)有約束,即對(duì)標(biāo)號(hào)的定義和對(duì)標(biāo)號(hào)的引用沒(méi)有先后次序的規(guī)定。8/7/202343華中科技大學(xué)計(jì)算機(jī)學(xué)院4.9goto語(yǔ)句和標(biāo)號(hào)語(yǔ)句(續(xù))goto語(yǔ)句的目標(biāo)語(yǔ)句goto語(yǔ)句和標(biāo)號(hào)語(yǔ)句的用法 例4.25:輸入一個(gè)算式,模擬袖珍計(jì)算器的加、減、乘、除四則運(yùn)算。假定計(jì)算時(shí)不考慮運(yùn)算符的優(yōu)先級(jí),也不允許輸入圓括號(hào)(),而是按照運(yùn)算符出現(xiàn)的先后順序執(zhí)行運(yùn)算。例如, 輸入10.8+0.13*100 計(jì)算結(jié)果為1093.000000

例4.25源程序代碼ex4.25.c。8/7/202344華中科技大學(xué)計(jì)算機(jī)學(xué)院goto語(yǔ)句和標(biāo)號(hào)語(yǔ)句的用法 例4.25:輸入一個(gè)算式,模注意:

goto語(yǔ)句不是必需的語(yǔ)言成分。因?yàn)橛胓oto語(yǔ)句實(shí)現(xiàn)的任何控制轉(zhuǎn)移,都可以通過(guò)循環(huán)語(yǔ)句、if語(yǔ)句和其他轉(zhuǎn)移語(yǔ)句的適當(dāng)配合以及用整型變量標(biāo)記狀態(tài)的方法實(shí)現(xiàn)。goto語(yǔ)句的惟一好處是可以從嵌套結(jié)構(gòu)的最內(nèi)層(switch語(yǔ)句或循環(huán)語(yǔ)句)直接轉(zhuǎn)到最外層(隔層轉(zhuǎn)移),用起來(lái)較方便.但如果隨意地使用goto語(yǔ)句則會(huì)破壞程序的結(jié)構(gòu)化特性,使程序的邏輯結(jié)構(gòu)不清,因此應(yīng)盡量少用或不用goto語(yǔ)句。8/7/202345華中科技大學(xué)計(jì)算機(jī)學(xué)院注意: 7/31/202345華中科技大學(xué)計(jì)算機(jī)學(xué)院1.break語(yǔ)句 break語(yǔ)句的形式為: break; break是關(guān)鍵字。break語(yǔ)句有以下兩種用途: (1)用于switch語(yǔ)句中,從中途退出switch語(yǔ)句; (2)用于循環(huán)語(yǔ)句中,從循環(huán)體內(nèi)直接退出當(dāng)前循環(huán)。 注意:對(duì)于嵌套的循環(huán)語(yǔ)句和switch語(yǔ)句,break語(yǔ)句的執(zhí)行只能退出直接包含break的那一層結(jié)構(gòu)。4.10break語(yǔ)句、continue語(yǔ)句和return語(yǔ)句8/7/202346華中科技大學(xué)計(jì)算機(jī)學(xué)院1.break語(yǔ)句4.10break語(yǔ)句、contin4.10break語(yǔ)句(續(xù)) 例4.27:打印ASCII字符集中字符碼為32~126的字符及其字符碼的對(duì)照表,每行打印8對(duì)對(duì)應(yīng)值。

例4.27源程序代碼ex4.27.c。 例4.28:打印2~100之間的所有素?cái)?shù),每行輸出10個(gè)數(shù)。 分析:如4.8節(jié)例4.24的程序所示,判斷一個(gè)數(shù)是否為素?cái)?shù)(找因子)要用循環(huán)語(yǔ)句實(shí)現(xiàn),因此判斷2~100之間的每一個(gè)數(shù)是否為素?cái)?shù)要用二重循環(huán)。

例4.28源程序代碼ex4.28.c。8/7/202347華中科技大學(xué)計(jì)算機(jī)學(xué)院4.10break語(yǔ)句(續(xù)) 例4.27:打印ASCI2.continue語(yǔ)句continue語(yǔ)句的形式為: continue;(continue是關(guān)鍵字)

continue語(yǔ)句只能出現(xiàn)在循環(huán)語(yǔ)句中,用于終止循環(huán)體的本次執(zhí)行(并非退出循環(huán)語(yǔ)句);即在循環(huán)體的本次執(zhí)行中,跳過(guò)從continue語(yǔ)句之后直到循環(huán)體結(jié)束的所有語(yǔ)句,控制轉(zhuǎn)移到循環(huán)體的末尾。對(duì)于while(e)s;和doswhile(e);,在執(zhí)行continue語(yǔ)句之后馬上執(zhí)行對(duì)循環(huán)控制表達(dá)式(e)的計(jì)算和測(cè)試;對(duì)于for(e1;e2;e3)s則馬上執(zhí)行表達(dá)式e3,然后執(zhí)行對(duì)表達(dá)式e2的計(jì)算和測(cè)試。8/7/202348華中科技大學(xué)計(jì)算機(jī)學(xué)院2.continue語(yǔ)句continue語(yǔ)句的形式為:7/2.continue語(yǔ)句(續(xù)) 例4.29:輸入10個(gè)整數(shù),輸出其中正數(shù)的個(gè)數(shù)及平均值。

例4.29源程序代碼ex4.29.c。 本例不用continue語(yǔ)句也能實(shí)現(xiàn)同樣的功能,改寫(xiě)工作作為練習(xí)請(qǐng)讀者自己完成。8/7/202349華中科技大學(xué)計(jì)算機(jī)學(xué)院2.continue語(yǔ)句(續(xù)) 例4.29:輸入10個(gè)整數(shù)3.return語(yǔ)句return語(yǔ)句有下面兩種形式: (1)不帶表達(dá)式的return語(yǔ)句: return; (2)帶表達(dá)式的return語(yǔ)句: return表達(dá)式; return語(yǔ)句的功能是從被調(diào)用函數(shù)返回到調(diào)用函數(shù)。 不帶表達(dá)式的return語(yǔ)句只能返回控制、不能返回值,因此只能用于從無(wú)返回值的函數(shù)中返回。帶表達(dá)式的return語(yǔ)句(表達(dá)式可以用()括起來(lái))在返回控制的同時(shí),將表達(dá)式的值返回到調(diào)用處,函數(shù)調(diào)用表達(dá)式的值就是這個(gè)返回值。8/7/202350華中科技大學(xué)計(jì)算機(jī)學(xué)院3.return語(yǔ)句return語(yǔ)句有下面兩種形式:7/33.return語(yǔ)句(續(xù)) 例4.30:寫(xiě)一個(gè)函數(shù)sign,返回浮點(diǎn)數(shù)x的符號(hào)。如果x小于0,則返回-1;如果x等于0,則返回0;如果x大于0,則返回1。

例4.30源程序代碼ex4.30.c。8/7/202351華中科技大學(xué)計(jì)算機(jī)學(xué)院3.return語(yǔ)句(續(xù)) 例4.30:寫(xiě)一個(gè)函數(shù)sign 嵌套循環(huán)指循環(huán)體是一個(gè)循環(huán)語(yǔ)句,或循環(huán)體包含循環(huán)語(yǔ)句。 嵌套循環(huán)又稱(chēng)為多重循環(huán),三種循環(huán)語(yǔ)句可以相互任意嵌套。具有兩層嵌套的循環(huán)稱(chēng)為二重循環(huán),具有n重嵌套的循環(huán)稱(chēng)為n重循環(huán);二重以上的循環(huán)統(tǒng)稱(chēng)為多重循環(huán)。 C語(yǔ)言對(duì)循環(huán)的嵌套層數(shù)沒(méi)有限制,其中二重循環(huán)應(yīng)用最為普遍,其次是三重循環(huán)。4.11嵌套循環(huán)程序設(shè)計(jì)8/7/202352華中科技大學(xué)計(jì)算機(jī)學(xué)院 嵌套循環(huán)指循環(huán)體是一個(gè)循環(huán)語(yǔ)句,或循環(huán)體包含循環(huán)語(yǔ)句。4. 例4.31:計(jì)算s=11+22+33+...+nn,n由終端輸入。 分析:設(shè)每一項(xiàng)的底用整型變量i表示,i從1開(kāi)始每次增1直至n??紤]到溢出,ii及各項(xiàng)之和分別用長(zhǎng)整型變量term和s表示。計(jì)算term是用循環(huán)對(duì)同一個(gè)i累乘i次;計(jì)算s也是用循環(huán)對(duì)每個(gè)term累加n次,而且計(jì)算term的循環(huán)是嵌套在計(jì)算s的循環(huán)體內(nèi)的,所以計(jì)算s的算法是一個(gè)二重循環(huán)語(yǔ)句。外層循環(huán)(簡(jiǎn)稱(chēng)外循環(huán))控制項(xiàng)數(shù),內(nèi)層循環(huán)(簡(jiǎn)稱(chēng)內(nèi)循環(huán))控制每項(xiàng)i的累乘次數(shù)。4.11嵌套循環(huán)程序設(shè)計(jì)(續(xù))8/7/202353華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.31:計(jì)算s=11+22+33+...+nn,n由終 例4.31:程序4.31的流程圖。

例4.31源程序代碼ex4.31.c。4.11嵌套循環(huán)程序設(shè)計(jì)(續(xù))8/7/202354華中科技大學(xué)計(jì)算機(jī)學(xué)院 例4.31:程序4.31的流程圖。4.11

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論