版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、注:本教程授課時(shí)間為十八課時(shí),學(xué)生上機(jī)練習(xí)時(shí)間為十八課間,共計(jì)三十六課時(shí)??赏瑫r(shí)對(duì)六十名學(xué)生授課。第一章簡單程序2第一節(jié) Pascal 程序結(jié)構(gòu)和基本語句2第二節(jié) 順序結(jié)構(gòu)程序與基本數(shù)據(jù)類型6第二章分支程序10第一節(jié) 條件語句與復(fù)合語句10第二節(jié) 情況語句與算術(shù)標(biāo)準(zhǔn)函數(shù)12第三章循環(huán)程序16第一節(jié)for 循環(huán)16第二節(jié)repeat 循環(huán)22第三節(jié)While 循環(huán)27第四章函數(shù)與過程32第一節(jié)函數(shù)32第二節(jié)自定義過程35第五章Pascal的自定義數(shù)據(jù)類型40第一節(jié)數(shù)組與子界類型40第二節(jié)二維數(shù)組與枚舉類型48第三節(jié)集合類型56第四節(jié)記錄類型和文件類型60第五節(jié) 指針類型與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)67第六章
2、程序設(shè)計(jì)與基本算法73第一節(jié)遞推與遞歸算法73第二節(jié)回溯算法80第一章簡單程序無論做任何事情,都要有一定的方式方法與處理步驟。計(jì)算機(jī)程序設(shè)計(jì)比日常生活中的事務(wù)處理更具有嚴(yán)謹(jǐn)性、規(guī)范性、可行性。為了使計(jì)算機(jī)有效地解決某些問題,須將處理步驟編排好,用計(jì)算機(jī)語言組成“序列”,讓計(jì)算機(jī)自動(dòng)識(shí)別并執(zhí)行這個(gè)用計(jì)算機(jī)語言組成的“序列”,完成預(yù)定的任務(wù)。將處理問題的步驟編排好,用計(jì)算機(jī)語言組成序列,也就是常說的編寫程序。在Pascal語言中,執(zhí)行每條語句都是由計(jì)算機(jī)完成相應(yīng)的操作。編寫Pascal程序,是利用Pascal語句的功能來實(shí)現(xiàn)和達(dá)到預(yù)定的處理要求?!扒Ю镏?,始于足下”,我們從簡單程序?qū)W起,逐步了解
3、和掌握怎樣編寫程序。第一節(jié) Pascal 程序結(jié)構(gòu)和基本語句在未系統(tǒng)學(xué)習(xí)Pascal語言之前,暫且繞過那些繁瑣的語法規(guī)則細(xì)節(jié),通過下面的簡單例題,可以速成掌握Pascal程序的基本組成和基本語句的用法,讓初學(xué)者直接模仿學(xué)習(xí)編簡單程序。例1.1編程在屏幕上顯示“Hello World!”。 Pascal程序:Program ex11;Begin Writeln(Hello World!); ReadLn;End.這個(gè)簡單樣例程序,希望大家的程序設(shè)計(jì)學(xué)習(xí)能有一個(gè)良好的開端。程序中的Writeln是一個(gè)輸出語句,它能命令計(jì)算機(jī)在屏幕上輸出相應(yīng)的內(nèi)容,而緊跟Writeln語句后是一對(duì)圓括號(hào),其中用單引
4、號(hào)引起的部分將被原原本本地顯示出來。例1.2已知一輛自行車的售價(jià)是300元,請(qǐng)編程計(jì)算a輛自行車的總價(jià)是多少?解:若總售價(jià)用m來表示,則這個(gè)問題可分為以下幾步處理:從鍵盤輸入自行車的數(shù)目a;用公式 m=300*a 計(jì)算總售價(jià);輸出計(jì)算結(jié)果。Pascal程序: Program Ex12; 程序首部 Var a,m: integer;說明部分 Begin語句部分 Write(a=); ReadLn(a);輸入自行車數(shù)目 M := 300*a;計(jì)算總售價(jià) Writeln(M=,m);輸出總售價(jià) ReadLn;等待輸入回車鍵 End.此題程序結(jié)構(gòu)完整,從中可看出一個(gè)Pascal 程序由三部分組成:(1
5、)程序首部由保留字Program開頭,后面跟一個(gè)程序名(如:Exl1);其格式為: Program 程序名;程序名由用戶自己取,它的第一個(gè)字符必須是英文字母,其后的字符只能是字母或數(shù)字和下劃線組成,程序名中不能出現(xiàn)運(yùn)算符、標(biāo)點(diǎn)符和空格。(2)說明部分程序中所用的常量、變量,或類型、及過程與自定義函數(shù),需在使用之前預(yù)先說明,定義數(shù)據(jù)的屬性(類型)。例1.2 程序中 Var S,R,C: Real; 是變量說明,此處說明S,R,C三個(gè)變量均為實(shí)數(shù)類型變量。只有被說明為某一類型的變量,在程序中才能將與該變量同類型的數(shù)值賦給該變量。變量說明的格式為: Var 變量表:類型;(3)語句部分指由保留字 B
6、egin (開始)至 End. (結(jié)尾)之間的語句系列,是解決問題的具體處理步驟,也是程序的執(zhí)行部分。Pascal程序不管是哪部分,每句末尾都必須有分號(hào)(;),但允許最接近 End 的那個(gè)語句末尾的分號(hào)省略;程序結(jié)束的End末尾必須有圓點(diǎn)(. ),是整個(gè)程序的結(jié)束標(biāo)志。程序中花括號(hào)“ ”之間的部分為注釋部分。Pascal程序結(jié)構(gòu)可歸納用如下的示意圖來表示: Program 程序名; 程序首部 標(biāo)號(hào)說明; (Label) 常量說明; (Const) 說明部分 類型說明; (Type) 變量說明; (Var) 過程或函數(shù)說明; Begin 程序體 (主程序) 語句系列; 語句部分 End. 圖1.
7、1 Pascal程序的結(jié)構(gòu)把處理問題的步驟編成能從上到下順序執(zhí)行的程序,是簡單程序的基本特征。再來分析下面兩道例題的Pascal程序結(jié)構(gòu)和繼續(xù)學(xué)習(xí)基本語句。例1.3編程計(jì)算半徑為R的圓的面積和周長。解:這是一個(gè)簡單問題,按數(shù)學(xué)方法可分以下幾步進(jìn)行處理: 從鍵盤輸入半徑的值R; 要求告訴圓的半徑R 用公式 S=R2 計(jì)算圓面積; 用公式 C=2R 計(jì)算圓周長; 輸出計(jì)算結(jié)果。Pascal程序: Program Ex13;程序首部 Var R,S,C: Real; 說明部分 Begin 語句部分 Write ('R=?'); Readln(R); 輸入半徑 S:=Pi*R*R; 圓
8、面積公式S=R2 C:=2*Pi*R; 圓周長公式C=2R Writeln('S=',S); 輸出結(jié)果 Writeln('C=',C); Readln 等待輸入回車鍵 End.程序中Pi是Pascal提供的標(biāo)準(zhǔn)函數(shù),它返回圓周率的近似值:3.1415926。(:=)是賦值符號(hào),賦值語句的格式為: 變量:=表達(dá)式;賦值語句的作用是將:=右邊表達(dá)式的值記錄到左邊的變量中。Writeln是輸出語句,輸出語句有三種格式: Write (輸出項(xiàng)1,輸出項(xiàng)2) ; 執(zhí)行輸出后光標(biāo)不換行 Writeln (輸出項(xiàng)1,輸出項(xiàng)2) ; 執(zhí)行輸出后光標(biāo)換到下一行 Writeln 僅
9、輸出空白且光標(biāo)換到下一行Writeln語句后面的圓括號(hào)以內(nèi)部分均為輸出項(xiàng),可以是多項(xiàng),各項(xiàng)間用逗號(hào)分隔; 對(duì)單引號(hào)里的內(nèi)容按照引號(hào)內(nèi)的原樣(字符)輸出顯示。如果輸出項(xiàng)是表達(dá)式,則只輸出表達(dá)式的值,而不是表達(dá)式本身。例1.4 輸出兩個(gè)自然數(shù)相除的商和余數(shù)。解:設(shè)被除數(shù)、除數(shù)、商和余數(shù),分別為A,B,C,D,均為變量,且都是整數(shù)類型。題中未給出具體的自然數(shù)A、B,可采用鍵盤輸入方式。 給出提示,從鍵盤輸入a, b; 顯示兩數(shù)相除的數(shù)學(xué)形式; 求出a除以b的商c; 求出a除以b的余數(shù)d; 緊接等式后面輸出顯示商和余數(shù)。Pascal程序: Program Ex14; Var a,b,c,d : int
10、eger; Begin Write('INPUT A,B:'); 給出提示信息 Readln(a,b); 輸入a,b Writeln; 輸出一空行 Write(a,'/',b,'='); 輸出等式之后不換行 c:=a div b; 整除運(yùn)算,取商的整數(shù)部分 d:=a mod b; 相除求余運(yùn)算,取商的余數(shù)部分 Writeln(C,'',d); 輸出后自動(dòng)換行 Readln 等待輸入回車鍵 End.執(zhí)行本程序中第一個(gè)Write語句,輸出其引號(hào)以內(nèi)的一串提示信息,是給緊接著的輸入語句提供明確的提示(要求),有“一目了然,人機(jī)對(duì)話”之效
11、果。Readln是一個(gè)特殊的輸入語句,要求輸入一個(gè)回車(換行)才能往下執(zhí)行。 Readln是輸入語句,它的一般格式為: Read (變量1,變量2); Readln (變量1,變量2); Readln前兩種格式均要從鍵盤給變量輸入數(shù)據(jù),輸入時(shí),所鍵入的數(shù)據(jù)之間以空格為分隔,以回車為輸入結(jié)束。若多輸入了數(shù)據(jù)(即數(shù)據(jù)個(gè)數(shù)超過變量個(gè)數(shù)),Read語句讀完數(shù)據(jù)之后,能讓后續(xù)的讀語句接著讀取多下來的數(shù)據(jù);而Readln 語句對(duì)本行多輸入的數(shù)據(jù)不能讓后續(xù)語句接著讀取多下來的數(shù)據(jù)。為了防止多輸入的數(shù)據(jù)影響下一個(gè)輸入語句讀取數(shù)據(jù),建議盡量使用Readln語句輸入數(shù)據(jù)。第三種格式不需輸入數(shù)據(jù),只需按入一個(gè)回車鍵
12、。例1.5自然數(shù)的立方可以表示為兩個(gè)整數(shù)的平方之差,比如43=10262,請(qǐng)輸出自然數(shù)1996的這種表示形式。(這里的43用自乘三次的形式4*4*4表示;102也用自乘二次的形式10*10表示)解:此題沒有現(xiàn)成的計(jì)算公式能直接利用,但可以自行推出處理方法或構(gòu)建適當(dāng)?shù)倪\(yùn)算公式,按著構(gòu)想的處理方案編排出各步驟。設(shè)這個(gè)自然數(shù)為N,兩個(gè)平方數(shù)分別為X,Y, 將問題表示為求 N3=X2Y2 先找出X的值,仔細(xì)觀察題中的示例,用數(shù)學(xué)方法歸納可得出X=N*(N+1)/2;(構(gòu)成本題可用的計(jì)算公式) 再仔細(xì)觀察,發(fā)現(xiàn)Y值比X小一個(gè)N值,即 Y=XN; 輸出等式 N3=X2Y2 或N*N*N=X*XY*YPas
13、cal程序: Program Ex15; Const N=1996; 常量說明 Var X,Y: Longint; 變量說明,此題計(jì)算中的數(shù)值較大,用長整型 Begin X:=N*(N+1) div 2; div 是整除運(yùn)算 Y:=X-N; Writeln(N,'*',N,'*', N,'=', X,'*', X,'',Y,'*',Y); 輸出結(jié)果 Readln End. 本程序中N是常量,X,Y是變量,為長整數(shù)類型(Longint); 程序中的div 是整除運(yùn)算,其結(jié)果只取商的整數(shù)部分; 例1.6
14、 求一元二次方程x2+3x+2=0的兩個(gè)實(shí)數(shù)根。解:方程的系數(shù)是常量,分別用a,b,c表示,可運(yùn)用數(shù)學(xué)上現(xiàn)成的求根公式求方程的根,采取如下方法: 先求出d=b2-4ac;(求根公式中需用開方運(yùn)算的那部分) 再用求根公式算出x1,x2的值。(x1,x2 = ? ) 輸出x1,x2. Pascal程序: program Ex16; Const a=1; 常量說明 b=3; c=2; a,b,c表示方程系數(shù) Var d : integer; d為整型變量 X1,X2: Real; X1,X2為實(shí)型變量 Begin d:=b*b-4*a*c; x1:=(-b+sqrt(d)/(2*a); 求方程的根
15、x2:=(-b-sqrt(d)/(2*a); Writeln('X1=',X1,'':6,'X2=',X2);輸出結(jié)果 Readln 等待輸入一個(gè)回車鍵 End. 本程序中的a,b,c均為常量;變量d是整數(shù)類型,而變量x1,x2則是實(shí)數(shù)類型,因?yàn)檫\(yùn)算式中的Sqrt(d)開平方運(yùn)算和(/)除法運(yùn)算使結(jié)果為實(shí)數(shù)。Sqrt( ) 是開平方函數(shù),是Pascal系統(tǒng)的一個(gè)標(biāo)準(zhǔn)函數(shù)。習(xí)題1.1 模仿例題編程1. 加法計(jì)算器:編程由鍵盤輸入兩個(gè)整數(shù)a和b,計(jì)算出它們的和并輸出到屏幕上。)2. 某梯形的上底、下底和高分別為8,12,9,求該梯形的面積。 ( 梯形
16、面積公式為 S= 3. 求右圖所示邊長為5.6 的正立方體表面積。4. 已知圖園柱體的高為12,底面園的半徑為7,求園柱體表面積。5. 計(jì)算某次考試語文、數(shù)學(xué)、英語和計(jì)算機(jī)等四科的總成績與平均成績。(請(qǐng)用輸入語句從鍵盤輸入各科成績分)第二節(jié) 順序結(jié)構(gòu)程序與基本數(shù)據(jù)類型前面的簡單程序已體現(xiàn)出處理問題步驟、思路的順序關(guān)系,這就是順序結(jié)構(gòu)程序。例1.7交換兩個(gè)變量的值:由鍵盤輸入兩個(gè)正整數(shù)A和B,編程交換這兩個(gè)變量的值。解:交換兩個(gè)變量的值,可以想象成交換兩盒錄音帶(稱為A和B)的內(nèi)容,可以按以下步驟處理:步驟:拿一盒空白錄音帶C為過渡,先將A翻錄至C;步驟:再將B翻錄至A;步驟:最后將C翻錄至B。
17、這樣操作,可達(dá)到題目要求。Pascal程序:Program Exam17;Var a,b,c: integer;Begin Write(A,B=); Readln(a,b); C:= A; 等價(jià)于步驟1 A := B;等價(jià)于步驟2 B := C;等價(jià)于步驟3 Writeln(A,B);End.例1.8 分錢游戲。甲、乙、丙三人共有24元錢,先由甲分錢給乙、丙兩人,所分給的數(shù)與各人已有數(shù)相同;接著由乙分給甲、丙,分法同前;再由丙分錢給甲、乙,分法亦同前。經(jīng)上述三次分錢之后,每個(gè)人的錢數(shù)恰好一樣多。 求原先各人的錢數(shù)分別是多少?解:設(shè)甲、乙、丙三人的錢數(shù)分別為A,B,C。用倒推(逆序)算法, 從最
18、后結(jié)果入手,按反相順序,分步驟推算出每次各人當(dāng)時(shí)的錢數(shù):(在每個(gè)步驟中,各人錢數(shù)分別存在A、B、C中) 步驟:A=8 B=8 C=8 這是最后結(jié)果的錢數(shù),三人都一樣多 步驟:A=A/2 (=4)B=B/2 (=4)C=A+B+C(=16) A,B未得到丙分給的錢時(shí),只有結(jié)果數(shù)的一半;C應(yīng)包含給A,B及本身數(shù)三者之和 步驟:A=A/2 (=2)C=C/2 (=8)B=A+B+C(=14) A,C未得到乙分給的錢時(shí),只有巳有數(shù)的一半;B應(yīng)包含給A,C及本身數(shù)三者之和 步驟:B=B/2 (=7)C=C/2 (=4)A=A+B+C(=13) C未得到甲分給的錢時(shí),只有巳有數(shù)的一半;A應(yīng)包含給B,C及本
19、身數(shù)三者之和 步驟: 輸出A(=13)B(=7)C(=4)此時(shí)的A,B,C 就是三人原先的錢數(shù) Pascal程序:Program Exam18;Var a,b,c: integer;Begin a:=8; b:=8; c:=8; 對(duì)應(yīng)于步驟a:=a div 2; b:=b div 2; c:=a+b+c; 對(duì)應(yīng)于步驟 a:=a div 2; c:=c div 2; b:=a+b+c; 對(duì)應(yīng)于步驟 b:=b div 2; c:=c div 2; a:=a+b+c; 對(duì)應(yīng)于步驟 Writeln('a=',a,' ': 4,'b=',b,' &
20、#39;: 4,'c=',c) ; 輸出 ReadlnEnd.細(xì)心觀察,會(huì)發(fā)現(xiàn)本程序語句的順序很關(guān)鍵。此例用反推順序(逆序),按步驟正確推算出各變量的值。當(dāng)然,有的問題可按正序步驟編程,這類程序都稱為順序程序。本程序Writeln語句的輸出項(xiàng)含有( ' ' : 4 ),這里的冒號(hào)用來指定該項(xiàng)顯示所占寬度,此處是輸出4個(gè)空格即(空格項(xiàng)占4格)。例1.9 有雞兔同籠,頭30,腳 90,究竟籠中的雞和兔各有多少只?解:設(shè)雞為J只,兔為T只,頭為H,腳為F,則:J+T=302*J+4*T=90 解此題暫不必采用數(shù)學(xué)上直接解方程的辦法,可采用“假設(shè)條件與邏輯推理”的辦法:
21、 假設(shè)籠中30 個(gè)頭全都是兔,那么都按每頭只腳計(jì)算,總腳數(shù)為(4*H),與實(shí)際腳數(shù) ( F )之差為(4*HF),如果這個(gè)差=0,則籠中全是兔(即雞為0只);如果這個(gè)差值 >0,說明多計(jì)算了腳數(shù),凡是雞都多給算了兩只腳,用它除以2就能得到雞的只數(shù),處理步驟為: J=(4*HF)/2 先用腳數(shù)差值除以2算出雞的只數(shù) T=HJ 再用總頭數(shù)減雞數(shù)算出免的只數(shù)按此方法,這兩步運(yùn)算必須注意先后順序才會(huì)符合運(yùn)算邏輯。Pascal程序:Program Exam16;Const H=30; 常量說明 F=90;Var J,T: byte; 為字節(jié)類型的整數(shù) Begin J:=(4*H-F) div 2;
22、 整除運(yùn)算 T:=H-J Writeln ('J=',J,' ': 6,'T= ',T ) ; ReadlnEnd.本程序中H,F(xiàn)為常量,變量J,T為byte類型,屬于整數(shù)類型。Pascal定義了五個(gè)標(biāo)準(zhǔn)整數(shù)類型,如下表所示:類型取值范圍占字節(jié)數(shù)格式Shortint(短整型)-128.1271帶符號(hào)8位Integer(整型)-32768.327672帶符號(hào)16位Longint(長整型)-2147483648.21474836474帶符號(hào)32位Byte(字節(jié)型)0.2551無符號(hào)8位Word (字型)0.655352無符號(hào)16位 在前面程序中常用的
23、數(shù)據(jù)類型除整數(shù)類型,還有實(shí)數(shù)類型。Pascal 還定義了五個(gè)標(biāo)準(zhǔn)實(shí)數(shù)類型,列表所示如下:類型取值范圍占字節(jié)數(shù)有效數(shù)字Real2.9×10-391.7×1038678位Single1.5×10-453.4×103841112位Double5.0×10-3241.7×1030881516位Extended1.9×10-49511.1×104932101920位Comp-263+1238-181920位在Turbo Pascal 中實(shí)數(shù)的表示用科學(xué)記數(shù)法,可認(rèn)為由三部分組成: # . # E +# 或 # . # E -
24、# #表示有效數(shù)字; E表示以10為底的冪; +#或-#是指數(shù)部分,+號(hào)可省略。例如: 1.7E+38 可寫成1.7E38 (等同于1. 7×1038 )。在實(shí)數(shù)類型定義下,即使是整數(shù),在程序執(zhí)行時(shí)系統(tǒng)也將自動(dòng)轉(zhuǎn)換成科學(xué)記數(shù)形式,試請(qǐng)運(yùn)行下面程序并注意觀察運(yùn)行結(jié)果:Program Exam17;Var x: real; x為實(shí)數(shù)類型 Begin X:=180; 把整數(shù)180賦給實(shí)數(shù)類型變量X Writeln ('x=',x) ; 輸出的x自動(dòng)表示成實(shí)數(shù)形式 ReadlnEnd.習(xí)題1. 21.已知ABC中的三邊長分別為25.76,74.03,59.31,求ABC的面積
25、。 ( 計(jì)算公式: S= 。 其中P = )2.某車棚存有自行車和三輪車共65輛,它們的輪子數(shù)合計(jì)為150個(gè)。求該棚內(nèi)存有的自行車和三輪車各是多少輛?3.甲、乙、丙三人分別有磁帶36,48,64盒。先由甲把自己的磁帶平均分為三份,分給乙、丙各一份,自己留下一份;接著是乙,最后是丙,都按甲的方法處理。編程輸出甲、乙、丙在上述過程中各人的磁帶數(shù)分別是多少? (輸出所有的中間結(jié)果)4.五位好朋友相聚。第一位朋友帶來了很多糖塊贈(zèng)送給各位朋友,使每人的糖塊在各自原有的基礎(chǔ)上翻了一倍;接著第二位好友也同樣向每人贈(zèng)送糖塊,他同樣使每人的糖塊在各人已有的數(shù)量上翻了一倍;第三、第四、第五位好友都照此辦理。經(jīng)過這
26、樣的贈(zèng)送之后,每人的糖塊恰好都為32塊。問各位好友原先的糖塊數(shù)分別是多少?第二章分支程序在程序設(shè)計(jì)中,許多問題是在一定條件下才選擇某種處理方式的,這就需要用條件判斷語句或情況選擇語句進(jìn)行處理。程序執(zhí)行中將出現(xiàn)選擇(分支),根據(jù)條件只選擇執(zhí)行部分語句,不一定都是按原順序從頭到尾地執(zhí)行所有語句,這樣的程序稱為分支程序。第一節(jié) 條件語句與復(fù)合語句例2.1 某服裝公司為了推銷產(chǎn)品,采取這樣的批發(fā)銷售方案:凡訂購超過100 套的,每套定價(jià)為50元,否則每套價(jià)格為80元。編程由鍵盤輸入訂購套數(shù),輸出應(yīng)付款的金額數(shù)。解:設(shè)X為訂購套數(shù),Y為付款金額,則: 輸入X; 判斷 X 值; 根據(jù)判斷結(jié)果選擇符合條件的
27、那種方法計(jì)算Y值; 輸出計(jì)算結(jié)果。Pascal程序:Program Exam21;Var x,y: integer;Begin Write('X=') ;Readln(x) ; 輸入X if x >100 then y:=50*X else y:80*X; 條件判斷與選擇 Writeln('y=',y) ; ReadlnEnd.程序中的 if 語句常稱為條件語句,它的一般格式為: (1) if 條件 then 語句; (2) if 條件 then 語句1 else 語句2;IF 語句的功能是按條件在兩種可能中選擇其中一種。習(xí)慣上把if 后面的表達(dá)式稱為條件
28、,then 后面的語句稱為真項(xiàng),else 后面的語句稱為假項(xiàng)。若條件成立(為真)就執(zhí)行真項(xiàng),然后執(zhí)行if語句的后繼語句;若條件不成立(為假)就跳過真項(xiàng)而執(zhí)行假項(xiàng),然后執(zhí)行后繼語句。而第一種格式只有真項(xiàng),沒有假項(xiàng),當(dāng)條件不成立(為假)就什么也不需做,直接往下去執(zhí)行后繼語句。例2.2 讀入三個(gè)不同的數(shù),編程按由小到大的順序排列打印出來。解:設(shè)讀入的三個(gè)數(shù)為a,b,c,為了把較小的數(shù)排在前面,可作如下處理: 如果ab就交換a、b的值,將較大的值換至后面; 如果ac就交換a、c的值,將較大的值換至后面; 如果bc就交換b、c的值,將較大的值換至后面; 輸出處理后的a,b,c。 Pascal程序: Pr
29、ogranm Exam22; Var a,b,c,t: Real; Begin Write('Input a, b,c='); Readln(a,b,c); if ab then begin 復(fù)合語句 t:=a; a:=b; b:=t 交換a,b end; if ac then begin 復(fù)合語句 t:=a; a:=c; c:=t 交換a,c end; if bc then begin 復(fù)合語句 t:=b; b:=c; c:=t 交換b,c end; Writeln('a,b,c:',a:6, b:6, c:6); Readln End.if 語句規(guī)定它的真項(xiàng)
30、或假項(xiàng)位置上只能是一個(gè)基本語句,如果需要寫一組語句,就應(yīng)當(dāng)使用復(fù)合語句。本程序中有三處用到復(fù)合語句。每個(gè)復(fù)合語句的范圍是從Begin開始到與它相對(duì)應(yīng)的End為止。復(fù)合語句的地位和一個(gè)基本語句相同;其一般格式為: Begin 語句系列 End;習(xí)題2. 11.假設(shè)郵局規(guī)定寄郵件時(shí)若每件重量在1公斤以內(nèi)(含1公斤),按每公斤1.5元計(jì)算郵費(fèi),如果超過1公斤時(shí),其超出部分每公斤加收0.8元。請(qǐng)編程序計(jì)算郵件收費(fèi)。2.輸入三個(gè)正整數(shù),若能用這三個(gè)數(shù)作為邊長組成三角形,就計(jì)算并輸出該三角形的面積,否則輸出Can't。(組成三角形的條件為:任意兩邊之和大于第三邊)3.輸入一個(gè)三位數(shù)的整數(shù),將數(shù)字位
31、置重新排列,組成一個(gè)盡可大的三位數(shù)。例如:輸入213,重新排列可得到盡可能大的三位數(shù)是321。第二節(jié) 情況語句與算術(shù)標(biāo)準(zhǔn)函數(shù)如果有多種(兩種或兩種以上)選擇,常用情況語句編程。將前面例2.1改成用如下方法來處理。根據(jù)題意,付款計(jì)算可分為兩種情況: Y=50*X (X100) Y=80*X (X=100)顯然,情況與的選擇取決于X值。假設(shè)用N表示“情況值”,暫且先讓N2;如果X100則N=1;(此題中N的值只是1或2,且取決于X值)Pascal 程序:Program Exam21_1;Var X,Y,N: integer;Begin Write('X=') ;readln(x)
32、; n:=2; 先讓n=2 if X100 then n:=1; 如果X100則 n=1 Case n of 關(guān)于情況處理 1: Y:=50*X; 2: Y:=80*X; end; Writeln('Y=',Y) ; ReadlnEnd.程序中的 Caseend 語句為情況語句,是多路分支控制,一般格式為: Case 表達(dá)式 of 情況常量表1: 語句1; 情況常量表2: 語句2; : : 情況常量表n: 語句n end;執(zhí)行情況語句時(shí),先計(jì)算Case后面表達(dá)式的值,然后根據(jù)該值在情況常量表中的“對(duì)應(yīng)安排”,選擇其對(duì)應(yīng)的語句執(zhí)行,執(zhí)行完所選擇語句后就結(jié)束Case語句;如果常量表
33、中沒有一個(gè)與表達(dá)式值對(duì)應(yīng)的語句,則什么也不做就結(jié)束本Case語句。Case 語句的另一種應(yīng)用格式為: Case 表達(dá)式 of 情況常量表1: 語句1; 情況常量表2: 語句2; : : 情況常量表n: 語句n; else 語句 n+1 end;這種格式的前面部分是相同的,所不同的是:如果常量表中沒有一個(gè)與表達(dá)式值對(duì)應(yīng)的語句,則執(zhí)行與else對(duì)應(yīng)的語句,然后結(jié)束Case語句。例2.2 對(duì)某產(chǎn)品征收稅金,在產(chǎn)值1萬元以上征收稅5%;在1萬元以下但在5000元以上的征收稅3%;在5000元以下但在1000元以上征收稅2%;1000元以下的免收稅。編程計(jì)算該產(chǎn)品的收稅金額。解:設(shè)x為產(chǎn)值,tax為稅金
34、,用P表示情況常量各值,以題意中每1000元為情況分界: P=0: tax=0 (x<1000 ) P=1,2,3,4: tax=x*0.02 (1000<=x<5000 ) P=5,6,7,8,9: tax=x*0.03 (5000<X<=10000 ) P=10: tax=x*0.05 (x> 10000 ) 這里的P是“情況”值,用產(chǎn)值x除以1000的整數(shù)值作為P,如果P>10也歸入P=10的情況。Pascal語言用P=trunc(x/1000)取整計(jì)算,Pascal程序:Program Exam22;Var x,p : integer; Tax
35、 : real;Begin Write('Number=') ; readln(x) ; P:=trunc(x/1000) ; if P9 then P:=10; Case P of 0: tax:=0; 1,2,3,4: tax:=x*0.2; 5,6,7,8,9: tax:=x*0.3; 10: tax:=x*0.5 end; Writeln('tt=',tt:5:2) ; ReadlnEnd.情況表達(dá)式的計(jì)算必須考慮到“全部”情況,不要有遺漏。如果情況常量表的“值”在某范圍內(nèi)是連續(xù)的,可將常量表寫成: n1. n2:語句;因此,上面程序中的情況常量表可以寫
36、成如下程序中表示形式:Program Exam22_1;Var x,p: integer; tax: real;Begin Write('Number=') ; readln(x) ; P:=trunc(x/1000) ; if P9 then P:=10; Case P of 0: tax:=0; 1.4: tax:=x*0.2; 從1至4作為同一情況處理 5.9: tax:=x*0.3; 從5至9作為同一情況處理 10: tax:=x*0.5 end; Writeln('tt=',tt:5:2) ; ReadlnEnd.程序中的trunc(x)為取整函數(shù),是
37、Pascal的算術(shù)標(biāo)準(zhǔn)函數(shù)之一。Pascal常用的算術(shù)標(biāo)準(zhǔn)函數(shù)有19個(gè): (1) abs(x) 求x的絕對(duì)值(|x|); (2) exp(x) 求ex的值; (e為無理數(shù)2.71828) (3) frac(x)求x的小數(shù)部分; (4) int(x) 求x的整數(shù)部分(不舍入,函數(shù)值為實(shí)型); (5) ln(x) 求以e為底的x的對(duì)數(shù)(log ex ); (6) odd(x) 判斷x的奇偶數(shù)(當(dāng)x為奇數(shù)時(shí)odd(x)值為true,否則為false); (7) ord(x) 求x的序號(hào),結(jié)果為整型(x為有序類型量); (8) pi 值(3.14932); (9) pred (x) 求x(有序類型)的
38、前趨值; (10) succ(x) 求x(有序類型)的后繼值; (11) random 隨機(jī)函數(shù),產(chǎn)生01的隨機(jī)值; (12) random(n)產(chǎn)生0n的隨機(jī)數(shù)(n為word類型,先執(zhí)行randomize, 才能得到隨機(jī)整數(shù)); (13) round(x) 求x的四舍五入整數(shù); (14) trunc(x) 求x的整數(shù)部分(截掉小數(shù)部分,結(jié)果為整型); (15) sqr(x) 求x的平方值(x2 ); (16) sqrt(x) 求x的開平方根值( );(17) sin(x) 求x的正弦函數(shù)(x為弧度);(18) cox(x) 求x的余弦函數(shù)(x為弧度);(19) arctan(x) 正切的反三
39、角函數(shù)(x為數(shù)值);習(xí)題2.21.運(yùn)輸公司計(jì)算運(yùn)費(fèi)時(shí),距離(S)越長,每公里運(yùn)費(fèi)越低,標(biāo)準(zhǔn)如下: 如果S250公里;運(yùn)費(fèi)為標(biāo)準(zhǔn)運(yùn)價(jià)的100% 如果250公里S500公里,運(yùn)費(fèi)為標(biāo)準(zhǔn)運(yùn)價(jià)的98%; 如果500公里S1000公里,運(yùn)費(fèi)為標(biāo)準(zhǔn)運(yùn)價(jià)的95%; 如果1000公里S2000公里,運(yùn)費(fèi)為標(biāo)準(zhǔn)運(yùn)價(jià)的92%; 如果2000公里S3000公里,運(yùn)費(fèi)為標(biāo)準(zhǔn)運(yùn)價(jià)的90%; 如果S3000公里,運(yùn)費(fèi)為標(biāo)準(zhǔn)運(yùn)價(jià)的85%;。請(qǐng)編計(jì)算運(yùn)費(fèi)的程序。2. 輸入考試成績,如果獲85分以上為 A等,獲60分84分為B等,60分以下為C等,編程輸出考試等級(jí)。3. 某車間按工人加工零件的數(shù)量發(fā)放獎(jiǎng)金,獎(jiǎng)金分為五個(gè)等級(jí):每
40、月加工零件數(shù)N < 100者獎(jiǎng)金為10元;100 < = N < 110者獎(jiǎng)金為30元;110 < = N <120 者獎(jiǎng)金為50元;120 < = N <130 者獎(jiǎng)金為70元;N > 130者為80元。請(qǐng)編程,由鍵盤輸入加工零件數(shù)量,顯示應(yīng)發(fā)獎(jiǎng)金數(shù)。第三章循環(huán)程序在編程中經(jīng)常遇到需要多次規(guī)律相同的重復(fù)處理,這就是循環(huán)問題。Turbo Pascal采用不同的循環(huán)方式來實(shí)現(xiàn),常用的環(huán)循有三種: for、repeat、while. 第一節(jié)for 循環(huán)for循環(huán)是一種自動(dòng)計(jì)數(shù)型循環(huán)。例3.1 試打印出120的自然數(shù)。解: 用a代表120各數(shù),同時(shí)也用
41、a兼作計(jì)數(shù),以控制循環(huán)次數(shù); 讓a從1開始; 輸出a; a自動(dòng)計(jì)數(shù)(加1),如果未超越所規(guī)定的循環(huán)范圍則重復(fù)步驟,否則結(jié)束循環(huán)。Pascal程序:Program Exam12;Var a: byte;Begin for a:=1 to 20 do Writeln (a); ReadlnEnd.程序中 for a:=1 to 20 do Writeln (a); 是for循環(huán)語句。for 循環(huán)語句有兩種格式:(1) for循環(huán)變量:=初值 To 終值 do 語句; (2) for循環(huán)變量:=初值downto 終值 do 語句;第(1)種格式的初值小于等于終值,循環(huán)變量值按自動(dòng)加1遞增變化;第(2
42、)種格式的初值大于或等于終值,循環(huán)變量值按自動(dòng)減1遞減變化。for 循環(huán)是 (以遞增1或以遞減1) 計(jì)數(shù)型循環(huán)。比如: 若將例3.1程序改為倒計(jì)數(shù)(遞減)循環(huán),則輸出201的自然數(shù)數(shù): Program Exam31;Var a: byte;Begin for a:=20 downto 1 doWriteln(a) ; ReadlnEnd.例3.2打印出30至60的偶數(shù)。解:方法一:設(shè)a表示30至60的所有的數(shù),可用for循環(huán)列出;用式子a mod 2=0篩選出其中的偶數(shù)并輸出。Pascal程序:Program ex32;Var a: integer;Begin For a := 30 to 6
43、0 doIf (a mod 2=0) then writeln(a); Readln;End.在這個(gè)程序中,for循環(huán)后的循環(huán)語句是一個(gè)條件分支語句。方法二:我們知道,在式子a=2*n中,若n取自然數(shù)1、2、3、,時(shí),則a依次得到偶數(shù)2、4、6、。因此要想得到30至60的偶數(shù),就可以讓上面式子中的n取15至30的自然數(shù)就可以了。所以本題還可以按以下步驟處理:設(shè)n表示15至30的所有自然數(shù),可用for循環(huán)列出;用式子a := 2*n求出其中的偶數(shù);將結(jié)果輸出至屏幕。Pascal程序:Program ex32;Begin For n := 15 to 30 do Begin a := 2*n; W
44、riteln(a);End; Readln;End.例3.3自然數(shù)求和:編一個(gè)程序,求從1至100的自然數(shù)的和。解: 令S0; 令a表示1至100的自然數(shù),用循環(huán)列出; 將這些自然數(shù)用公式S:=S+a 逐一累加到S中去; 循環(huán)結(jié)束后,S即為1至100的自然數(shù)的和,輸出即可。Pascal程序:Program ex33;var s,a : integer;Begin S := 0; For a := 1 to 100 do S := S+a; Writeln(S=,S); Readln;End.例3.4一個(gè)兩位數(shù)x,將它的個(gè)位數(shù)字與十位數(shù)字對(duì)調(diào)后得到一個(gè)新數(shù)y,此時(shí)y恰好比x大36,請(qǐng)編程求出所有
45、這樣的兩位數(shù)。解: 用for循環(huán)列舉出所有的兩位數(shù),x為循環(huán)變量; 用公式a:= x div 10分離出x的十位數(shù)字; 用公式b:= x mod 10分離出x的個(gè)位數(shù)字; 用公式y(tǒng):= b*10+a合成新數(shù)y; 用式子y-x=36篩選出符合條件的數(shù)x并輸出。Pascal程序:Program ex34;Begin For x := 10 to 99 do Begin a := x div 10; b := x mod 10; y := b*10+a; if y-x=36 then writeln(x);End;Readln;End.例3.5 把整數(shù)3025從中剪開分為30和25兩個(gè)數(shù),此時(shí)再將這
46、兩數(shù)之和平方,(30+25)2=3025計(jì)算結(jié)果又等于原數(shù)。求所有符合這樣條件的四位數(shù)。解:設(shè)符合條件的四位數(shù)為N,它應(yīng)當(dāng)是一個(gè)完全平方數(shù),用(a*a)表示。 為了確保N=(a*a)在四位數(shù)(10009999)范圍內(nèi),可確定a在3299循環(huán); 計(jì)算N=a*a;將四位數(shù)N拆分為兩個(gè)數(shù)n1和n2; 若滿足條件(n1+n2)*(n1+n2)N 就輸出 N 。Pascal程序:Program Exam35;Var N,a, x,n1,n2: Integer;Begin for a:=32 to 99 do begin N:=a*a; n1:= N div 100; 拆取四位數(shù)的前兩位數(shù) n2:= N-
47、n1*100; 拆取四位數(shù)的后兩位數(shù) X:=n1+n2; if x*x=N then writeln (N); end; ReadlnEnd.例3.6用“*”號(hào)打印出如下的長方形圖案。* * * *解: 上面給出的圖例共有4行,我們可以用一個(gè)循環(huán)控制行的變化; 在每行中又有9列,我們可以在前面控制行的循環(huán)中再套一個(gè)循環(huán)來控制列的變化。Pascal程序:Program ex36;Begin For a := 1 to 4 do外循環(huán)控制行的變化 Begin For b := 1 to 9 do內(nèi)循環(huán)控制列的變化 write(*); Writeln;輸出一行的“*”后換行End;Readln;End.程序中的循環(huán)對(duì)于a的每個(gè)值都包含著一個(gè)b=(19)次的內(nèi)循環(huán)。外循環(huán)for a 將內(nèi)循環(huán)for b 包含在里面,稱為for循環(huán)的嵌套。嵌套形式如: for a:=n1 to n2 do for b:=m1 to m2 do 循環(huán)體語句; 例3.7 打印出九九乘法表:解:設(shè)a為被乘數(shù),范圍為19;b為乘數(shù),范圍為1a;乘式為a*b=(a,b的乘積),則 a=1: b=1a 1*1=1 a=2: b=1a 2*1=2 2*2=4 a=3: b=1a 3*1=3 3*2=6 3*3=9 a=4: b=1a 4*1=4 4*2=8 4*3=13
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 長沙理工大學(xué)城南學(xué)院《民法(2)》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南經(jīng)貿(mào)外事職業(yè)學(xué)院《和聲學(xué)(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 信息技術(shù)標(biāo)準(zhǔn)化工作小組成立
- 谷雨節(jié)氣氣象解讀模板
- 三年級(jí)上冊(cè)數(shù)學(xué)應(yīng)用題100道(含答案)
- 保險(xiǎn)銷售培訓(xùn)課程模板
- 業(yè)務(wù)操作-房地產(chǎn)經(jīng)紀(jì)人《業(yè)務(wù)操作》真題匯編2
- 房地產(chǎn)交易制度政策-《房地產(chǎn)基本制度與政策》真題匯編2
- 領(lǐng)導(dǎo)辭職報(bào)告
- 2024-2025學(xué)年江蘇省連云港市高二上學(xué)期期末調(diào)研考試數(shù)學(xué)試卷(含答案)
- 外立面改造專項(xiàng)施工方案
- GB/T 4354-2008優(yōu)質(zhì)碳素鋼熱軋盤條
- GB 29518-2013柴油發(fā)動(dòng)機(jī)氮氧化物還原劑尿素水溶液(AUS 32)
- Skopos and Commission in Translational Action翻譯行為的目的與委托
- 《中國國家處方集》附錄
- 消防安全值班制度
- 智慧教育典型案例:依托智慧教學(xué) 優(yōu)化英語課堂
- 偉星管-云上裝飾
- 生活飲用水消毒劑和消毒設(shè)備衛(wèi)生安全評(píng)價(jià)規(guī)范(2019年版)
- 施工現(xiàn)場重大危險(xiǎn)源公示牌
- 養(yǎng)老院老年人誤食誤服防范措施及應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論