第3章選擇結(jié)構(gòu)的程序設(shè)計_第1頁
第3章選擇結(jié)構(gòu)的程序設(shè)計_第2頁
第3章選擇結(jié)構(gòu)的程序設(shè)計_第3頁
第3章選擇結(jié)構(gòu)的程序設(shè)計_第4頁
第3章選擇結(jié)構(gòu)的程序設(shè)計_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第三章第三章 選擇結(jié)構(gòu)選擇結(jié)構(gòu) w第一節(jié)第一節(jié) IF語句語句w第二節(jié)第二節(jié) IF語句的嵌套語句的嵌套w第三節(jié)第三節(jié) 情況語句(情況語句(CASE語句)語句)第一節(jié)第一節(jié) IF語句語句 PASCAL中的布爾(邏輯)類型中的布爾(邏輯)類型 在前面,我們學(xué)習(xí)了整型(integer)與實型(real)。其中integer型數(shù)據(jù)取值范圍為 -32768到32767之間所有整數(shù)。而real型數(shù)據(jù)取值范圍為其絕對值在10-38到1038之間的所有實數(shù)。它們都是數(shù)值型的(即值都為數(shù))。布爾型(Boolean)是一種數(shù)據(jù)的類型,這種類型只有兩種值,即“真”與“假”。 布爾常量布爾常量 在Pascal語言中“真

2、”用true表示,“假”用False表示。所以布爾類型只有TRUE與FALSE兩個常量。 布爾變量(布爾變量(BOOLEAN) 如果我們將某些變量說明成布爾型,那么這些變量就是布爾變量,它們只能用于存放布爾值(true或false)。 例如:VAR A,B:BOOLEAN; 布爾類型是順序類型布爾類型是順序類型 由于這種類型只有兩個常量,Pascal語言中規(guī)定true的序號為1,false的序號為0。若某種類型的常量是有限的,那么這種類型的常量通常都有一個序號,我們稱這種類型為順序類型。如前面我們學(xué)過的整型(integer),以及后面要學(xué)到的字符型(char)都是順序類型。 布爾類型的輸入與輸

3、出布爾類型的輸入與輸出 var a,b : boolean;begin a := true; b := false; writeln(a, ,b);end. a)輸出運行結(jié)果:TRUE FALSE b) 輸出 布爾類型變量不能直接用讀語句輸入!布爾類型變量不能直接用讀語句輸入! 布爾類型變量不能通過讀語句給它們提供值。事實上,我們可以通過間接方式對布爾變量進行值的輸入。例如,以下程序是錯誤的: var a,b: boolean;beginreadln(a,b); writeln(a,b);end./ 錯誤語句,布爾型變量不能讀入錯誤語句,布爾型變量不能讀入 關(guān)系表達式與布爾表達式關(guān)系表達式與布

4、爾表達式 什么是關(guān)系表達式?什么是關(guān)系表達式? 表3-1關(guān)系運算符大于大于等于小于小于等于等于不等于= 用小括號、=、=、=、將兩個算術(shù)表達式連接起來的式子就稱為關(guān)系表達式(比較式)。 如:3+78,x+y10,2*78,x+y10,2*76是錯的,故它的值為FALSE。45=32是對的,故該表達式的值為true。 關(guān)系表達式用于表示一個命題。如:“為偶數(shù)”可表示為: mod 2=0?!盀檎龜?shù)”可表示為:n0。布爾運算及布爾表達式布爾運算及布爾表達式 為了表示更復(fù)雜的命題,Pascal還引入三種邏輯運算符:not、and、or。它們分別相當(dāng)于數(shù)學(xué)上的“非”、“且”和“或”的意義。 這三個運算符

5、的運算對象為布爾量,其中not為單目運算,只有一個運算對象,and與or為雙目運算,有兩個運算對象。它們的運算真值表如下: abNot aa and ba or ba xor bfalsefalsetruefalsefalsefalsefalsetruetruefalsetruetruetruefalsefalsefalsetruetruetruetruefalsetruetruefalse 多個關(guān)系表達式用布爾運算符連接起來的式子就稱為布爾表達式,布爾表達式的值也為布爾值。在一個表達式里出現(xiàn)兩個或兩個以上的運算符, 則必須規(guī)定它們的運算次序。pascal規(guī)定: 表達式中相同優(yōu)先級的運算符,按

6、從左到右順序計算; 表達式中不同優(yōu)先級的運算符,按從高到低順序計算; 括號優(yōu)先級最高,從內(nèi)到外逐層降低; 對于一個復(fù)雜的表達式可能同時包含算術(shù)運算、關(guān)系運算和邏輯運算以及函數(shù)運算。運算的優(yōu)先順序為:括號函數(shù)not*、/、div、mod、and+、or、xor關(guān)系運算。例例3.1 若a=true,b=false,x=7,y=12,m=3,n=35,求下列布爾表達式的值。 a and not (mn) and (x10 then Price:=Price*0.75; /若超過10,則價格打7.5折 Total:=Num*Price; Writeln(Total=,Total:0:2); /保留二位

7、小數(shù) Readln; End.y=例例3.4 函數(shù)y如下0(x0)2x(0=x10)2x + 1(10=x50)x/2 + 50 (50=x)編寫程序,當(dāng)輸入x后輸出y的值。【分析】【分析】 根據(jù)變量的取值范圍,各有不同的計算公式,這就是一個分段函數(shù)。這里編程的關(guān)鍵就是判斷用戶所輸入的值在什么范圍內(nèi),從而采用什么公式,下面程序用了四個并列的if語句。 程序如下:程序如下: Program ex3_4;Var x,y : real;begin readln(x); if x=0) and (x=10) and (x=50 then y : =x/2+50; writeln(y : 0 : 4);

8、 /保留4位小數(shù)end.運行結(jié)果:輸入:-3 輸出:y=0.0000輸入:5 輸出:y=10.0000輸入:121 輸出:y=110.5000例例3.5輸入一個年號,判斷它是否是閏年。 判斷閏年的算法是:如果此年號能被400整除, 或者它能被4整除而不能被100整除,則它是閏年輸出“yes”。否則,它是平年,輸出“no”。程序如下:【分析】【分析】Program ex3_5;Var year : integer;begin readln(year); if (year mod 400=0 ) or (year mod 4=0)and(year mod 1000) then writeln(ye

9、s) else writeln(no);end.例例3.6 從鍵盤上讀入三個數(shù),按由大到小的順序把它們打印出來。 這里我們用逐步細化的方法來解此題。先畫出“頂層設(shè)計”,這個問題分成三個步驟。s1:將a和b比較,將較小的放在b中,較大的放在a中。s2:將a和c比較,將較小的放在c中,較大的放在a中(此時a為最大值)。s3:將b和c比較,將較小的放在c中,較大的放在b中(此時b為次大的數(shù),c為最小數(shù))?!痉治觥俊痉治觥砍绦蛉缦拢撼绦蛉缦拢篜rogram ex3_6;Var a,b,c,t : integer;begin readln(a,b,c); if ab then /把較大數(shù)給a begin

10、 t : =a; a : =b; b : =t; /借助第三個變量,交換二個數(shù) end; if ac then /把較大數(shù)給a begin t : =a; a : =c; c : =t; end; if b ,b, ,c); /三個if語句后,a,b,c已從大到小有序end.運行結(jié)果:輸入:3 8 2 輸出:8 3 2【上機練習(xí)【上機練習(xí)3.1】w1、假設(shè)郵局規(guī)定寄郵件時若每件重量在1公斤以內(nèi)(含1公斤),按1.5元計算郵費,如果超過1公斤時,其超出部分每公斤加收0.8元。請編程序計算郵件收費。w2、輸入三個正整數(shù),若能用這三個數(shù)作為邊長組成三角形,就計算并輸出該三角形的面積,否則輸出Cant

11、。(組成三角形的條件為:任意兩邊之和大于第三邊)w3、輸入一個三位數(shù)的整數(shù),將數(shù)字位置重新排列,組成一個盡可大的三位數(shù)。例如:輸入213,重新排列可得到盡可能大的三位數(shù)是321。w4、輸入一個整數(shù),打印出它是奇數(shù)還是偶數(shù)。w5、某服裝公司為了推銷產(chǎn)品,采取這樣的批發(fā)銷售方案:凡訂購超過100 套的,每套定價為50元,否則每套價格為80元。編程由鍵盤輸入訂購套數(shù),輸出應(yīng)付款的金額數(shù)。w6、從鍵盤讀入一個數(shù),判斷它的正負。是正數(shù),則輸出“+”,是負數(shù),則輸出“-”。w7、判斷兩個數(shù)a,b,輸出較大數(shù)的平方值。w8、某市的士費起步價8元,可以行使3公里。3公里以后,按每公里1.6元計算,輸入的士的公

12、里數(shù),請你計算顧客需付費多少元?第二節(jié)第二節(jié) IF語句的嵌套語句的嵌套 前面我們學(xué)習(xí)了IF語句有兩種格式,在格式中,條件語句中的語句1或語句2原則上說可以是任何語句,當(dāng)然也可以是條件語句。當(dāng)語句1或語句2仍是條件語句時,稱為條件語句嵌套。形成嵌套的重要目的是為解決較為復(fù)雜的、多種條件出現(xiàn)的問題。 嵌套情況可以分為兩種:一是語句1中包含If語句,二是語句2中包含If語句。下面分別來討論這兩種情況下怎么使用條件語句。If語句的嵌套在語句的嵌套在then子句中子句中它的一般形式: If布爾表達式1then If布爾表達式2then 語句21 else 語句22 else 語句12 這是嵌套一個條件語

13、句的情況,其實每條語句還可以再嵌套條件語句,以此類推,形成多層嵌套。由于else后的子句是可省的,而在嵌套時else是與它最近的那個尚未與其他else配對的If . then相匹配。所以內(nèi)層的else子句不能省,否則將造成邏輯錯誤,解決的辦法就是寫一個空語句或者采用復(fù)合語句,即放入begin、end中,這樣if與else間的配對就很明確了。另外,請同學(xué)們在書寫程序時,采用縮進式,以增強程序的可讀性,要慢慢養(yǎng)成這種風(fēng)格。 例例3.7 計算下列函數(shù) 【分析】【分析】根據(jù)輸入的x值,先分成x0與x0兩種情況,然后對于情況x0,再區(qū)分x是小于0,還是等于0。程序如下:program ex3_7;var

14、 x:real; y:integer; begin wrtie(Input x:); readln(x); If x0then y:=1 /x0時,y的值為1 else if x=0then y:=0 /x=0時,y的值為0 else y:=-1; /x=0與x=0,再區(qū)分x是大于0,還是等于0,這種結(jié)構(gòu)是在then子句中嵌套if語句。當(dāng)然程序也可以寫成如下形式:program ex;Var x:real; y:integer;begin wrtie(Input x:);readln(x); if x=0then if x0then y:=1 else y:=0 else y=-1; writ

15、eln(x=,x:6:2,y=,y);end.例例3.8輸入三角形的三邊,判斷它是否直角三角形,若是則輸出“yes”,否則輸出“no”,若根本形成不了三解形則輸出“not a triangle”?!痉治觥俊痉治觥?首先判斷用戶輸入的數(shù)據(jù)是否能夠構(gòu)成三角形,然后再判斷它是不是直角三角形。 Program ex3_8;Var a,b,c : integer;begin readln(a,b,c); if (a+bc) and (b+ca) and (c+ab) then if (a*a+b*b=c*c) or (b*b*+c*c=a*a) or (c*c+a*a=b*b) then writeln

16、(yes) else writeln(no) else writeln(not a triangle.)end.【上機練習(xí)【上機練習(xí)3.2】w1輸入某學(xué)生成績,根據(jù)成績的好壞輸出相應(yīng)評語。如果成績在90分以上,輸出評語:優(yōu)秀(outstanding)。如果成績在60分到90分之間,輸出評語:良好(satisfactory)。如果成績不足60分,輸出評語:不及格(unsatisfactory)。w2輸入三角形的三邊,判斷它是否是直角三角形。 w3給一個不多于三位的正整數(shù),求出它是幾位數(shù),并分別打印出各位上的數(shù)字。w4對一批貨物征收稅金。價格在1萬元以上的貨物征稅5%,在5000元以上,1萬元以下

17、的貨物征稅3%,在1000元以上,5000元以下的貨物征稅2%,1000元以下的貨物免稅。編寫一程序,讀入貨物價格,計算并輸出稅金。w5輸入三角形的三個邊,判斷它是何類型的三角形(等邊DB?等腰DY?一般YB?)。w6輸入三個數(shù),按由大到小順序打印出來。w7將字母A、B、C 、D或a、b、c、d對應(yīng)輸出1、2、3、4,其余的字符輸出5。w8輸入三個數(shù)a,b,c,打印出最大者第三節(jié)第三節(jié) 情況語句(情況語句(CASE語句)語句) 上面我們知道可以用嵌套的if語句實現(xiàn)多分支的選擇結(jié)構(gòu)。但是如果分支越來越多時,用嵌套的if語句實現(xiàn)多分支就顯得繁雜。當(dāng)多分支選擇的各個條件由同一個表達式的不同結(jié)果值決定

18、時,可以用case語句實現(xiàn)。它的選擇過程,很象一個多路開關(guān),即由case語句的選擇表達式的值,決定切換至哪一語句去工作。因此在分支結(jié)構(gòu)程序設(shè)計中,它是一種強有力的手段。在實現(xiàn)多路徑分支控制時,用case對某些問題的處理和設(shè)計,比用if語句寫程序具有更簡潔、清晰之感。 情況語句的一般形式:情況語句的一般形式: case of:語句1;:語句2;::語句n; else 語句n+1;end; 其中case、of、end是Pascal的保留字, 表達式的值必須是順序類型,它可以是整型、布爾型及以后學(xué)習(xí)的字符型、枚舉型和子界型。情況標(biāo)號表是一串用逗號隔開的與表達式類型一致的常量序列。語句可以是任何語句,

19、包括復(fù)合語句和空語句。case語句的執(zhí)行過程語句的執(zhí)行過程 先計算表達式(稱為情況表達式)的值,如果它的值等于某一個常量(稱為情況常量,也稱情況標(biāo)號),則執(zhí)行該情況常量后面的語句,在執(zhí)行完語句后,跳到case語句的末尾end處。說明說明 情況表達式必須是順序類型的;情況常量是情況表達式可能具有的值,因而應(yīng)與情況表達式具有相同的類型;情況常量出現(xiàn)的次序可以是任意的;同一情況常量不能在同一個case語句中出現(xiàn)兩次或兩次以上;每個分語句前可以有一個或若干個用逗號隔開的情況常量;如果情況表達式的值不落在情況常量的范圍內(nèi),則認為本case語句無效,執(zhí)行case語句的下一個語句。Free pascal中增

20、加了一個“否則”的情況,即增加一個else子句,但也是可省的。每個常量后面只能是一個語句或一個復(fù)合語句,以分號結(jié)束。例例3.9根據(jù)x的值,求函數(shù)Y的值:【分析】【分析】利用case語句進行程序設(shè)計, 關(guān)鍵在于巧妙地構(gòu)造情況表達式。本例中三種情況可用一個表達式區(qū)分出來:Trunc(x/100)。因為x在(0,100)之間時表達式值為0;x在100,200)時表達式值為1 ;其余部分可用else子句表示。源程序如下:program ex3_9;var x,y:real;begin write(Input x:);readln(x); case trunc(x/100) of 0:y:=x+1; 1

21、:y:=x-1; else y:=-1; end; /end of case,每個case對應(yīng)一個end writeln(x=,x:8:2,y=,y:8:2);end.例例3.10 判斷2006年,每個月份的天數(shù)?!痉治觥俊痉治觥?程序分為:輸入月份,計算該月的天 數(shù),輸出天數(shù)。程序如下:Program ex3_10;Var month,days : integer;begin readln(month); case month of1,3,5,7,8,10,12 : days : =31;4,6,9,11 : days : =30;2 : days : =28;else days : =0;

22、 end; if days0 then writeln(days);end.運行結(jié)果:輸入:10輸出:31例例3.11 期未來臨了,班長小Q決定將剩余班費X元錢,用于購買若干支鋼筆獎勵給一些學(xué)習(xí)好、表現(xiàn)好的同學(xué)。已知商店里有三種鋼筆,它們的單價為6元、5元和4元。小Q想買盡量多的筆(鼓勵盡量多的同學(xué)),同時他又不想有剩余錢。請您編一程序,幫小Q制訂出一種買筆的方案?!痉治觥俊痉治觥?對于以上的實際問題,要買盡量多的筆,易知都買4元的筆肯定可以買最多支筆。因此最多可買的筆為x div 4支。由于小q要把錢用完,故我們可以按以下方法將錢用完: 若買完x div 4支4元錢的筆,還剩1元,則4元錢的筆少買1支,換成一支5元筆即可;若買完x div 4支4元錢的筆,還剩2元,則4元錢的筆少買1支,換成一支6元筆即可;若買完x div 4支4元錢的筆,還剩3元,則4元錢的筆少買2支,換成一支5元筆和一支6元筆即可。 從以上對買筆方案的調(diào)整,可以看出筆的數(shù)目都是x div 4,因此該方案的確為最優(yōu)方案。程序如下:程序如下:Program ex3_11;Var a,b,c : integer; /a,b,c分別表示在買筆方案中 ,6元、5元和4元錢筆的數(shù)目x,y : intege

溫馨提示

  • 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

提交評論