信息學(xué)競賽輔導(dǎo)_Pascal基礎(chǔ)教程_第1頁
信息學(xué)競賽輔導(dǎo)_Pascal基礎(chǔ)教程_第2頁
信息學(xué)競賽輔導(dǎo)_Pascal基礎(chǔ)教程_第3頁
信息學(xué)競賽輔導(dǎo)_Pascal基礎(chǔ)教程_第4頁
信息學(xué)競賽輔導(dǎo)_Pascal基礎(chǔ)教程_第5頁
已閱讀5頁,還剩84頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第一章 Pascal語言概述與基本知識1 關(guān)于Pascal語語言 Pascal是一種計(jì)算機(jī)通用的高級程序設(shè)計(jì)語言。它由瑞士Niklaus Wirth教授于六十年代末設(shè)計(jì)并創(chuàng)立。以法國數(shù)學(xué)家命名的Pascal語言現(xiàn)已成為使用最廣泛的基于DOS的語言之一,其主要特點(diǎn)有:嚴(yán)格的結(jié)構(gòu)化形式;豐富完備的數(shù)據(jù)類型;運(yùn)行效率高;查錯能力強(qiáng)。正因?yàn)樯鲜鎏攸c(diǎn),Pascal語言可以被方便地用于描述各種算法與數(shù)據(jù)結(jié)構(gòu)。尤其是對于程序設(shè)計(jì)的初學(xué)者,Pascal語言有益于培養(yǎng)良好的程序設(shè)計(jì)風(fēng)格和習(xí)慣。IOI(國際奧林匹克信息學(xué)競賽把Pascal語言作為三種程序設(shè)計(jì)語言之一, NOI(全國奧林匹克信息學(xué)競賽把Pasca

2、l語言定為唯一提倡的程序設(shè)計(jì)語言,在大學(xué)中Pascal語言也常常被用作學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的教學(xué)語言。在Pascal問世以來的三十余年間,先后產(chǎn)生了適合于不同機(jī)型的各種各樣版本。其中影響最大的莫過于Turbo Pascal系列軟件。它是由美國Borland公司設(shè)計(jì)、研制的一種適用于微機(jī)的Pascal編譯系統(tǒng)。該編譯系統(tǒng)由1983年推出1.0版本發(fā)展到1992年推出的7.0版本,其版本不斷更新,而功能更趨完善。下面列出Turbo Pascal編年史1983 Turbo Pascal 1.0 Turbo Pascal 2.0 Turbo-87 Pascal 提高實(shí)數(shù)運(yùn)算速度并擴(kuò)大值域 1985 Tu

3、rbo Pascal 3.0 增加圖形功能 Turbo BCD Pascal 特別適合應(yīng)用于商業(yè) 1987 Turbo Pascal 4.0 提供集成開發(fā)環(huán)境(IDE,引入單元概念 1988 Turbo Pascal 5.0 增加調(diào)試功能 1989 Turbo Pascal 5.5 支持面向?qū)ο蟮某绦蛟O(shè)計(jì)(OPP 1990 Turbo Pascal 6.0 提供面向?qū)ο蟮膽?yīng)用框架和庫(Turbo Vision 1992 Turbo Pascal 7.0 面向?qū)ο蟮膽?yīng)用系統(tǒng)、更完善的IDE Turbo Vision 2.0 1993 Borland Pascal 7.0 開發(fā) Object Wi

4、ndows庫、 (For Windows 提供對OLE多媒體應(yīng)用開發(fā)的支持 1995 Delphi Visual Pascal Turbo Pascal語言是編譯型程序語言,它提供了一個(gè)集成環(huán)境的工作系統(tǒng),集編輯、編譯、運(yùn)行、調(diào)試等多功能于一體。1.2 Turbo Pascal 或 Borland Pascal 的啟動(1 Turbo Pascal的啟動a.DOS下的啟動(適用于MS-DOS6.22之前的版本或Win 9X & Win2000 的Command ModeDOS下,在裝有Turbo Pascal的文件目錄下,鍵入turbo即可進(jìn)入Turbo Pascal集成環(huán)境。b.Wi

5、n9X或Win2000模式下的啟動(適用于Turbo Pascal 3.0以后的版本如果在Win9X或Win2000的“資源管理器”裝有Turbo Pascal的目錄中,雙擊turbo.exe或在“開始-程序”菜單中通過MS-DOS方式來運(yùn)行turbo.exe,它會提示你“該程序設(shè)置為MS-DOS方式下運(yùn)行,并且其它程序運(yùn)行時(shí),無法運(yùn)行它。如果選擇繼續(xù)所有其它程序?qū)㈥P(guān)閉”,所以在Win9X或Win2000下無法直接運(yùn)行它,這時(shí)你可以在你希望的地方(比如說桌面上單擊鼠標(biāo)右鍵“新建-快捷方式”,單擊“瀏覽”,找到turbo.exed選中,然后單擊“打開”,再單擊“下一步”,再單擊完成;這還沒完,選

6、中前面新建的快捷方式(應(yīng)該叫Turbo Pascal吧,單擊右鍵,單擊“屬性”,選擇“程序”,然后再單擊“高級”,把“MS-DOS方式”前面的那個(gè)勾去掉,也就是不要選“MS-DOS方式”,然后單擊“確定”,在單擊“確定”就大功告成了,以后你運(yùn)行Turbo Pascal的時(shí)候,只要雙擊那個(gè)你建立起的快捷方式就可以直接在Win9X或Win2000下運(yùn)行Turbo Pascal。(2Borland Pascal的啟動Borland Pascal的啟動沒有像Turbo Pascal那樣復(fù)雜,一般來說在任何情況下雙擊bp.exe或是在MS-DOS下運(yùn)行都不會出現(xiàn)什么問題。 第二章 Pascal語言基礎(chǔ)知

7、識2.1 Pascal程序基本組成例1.1計(jì)算半徑為R的圓面積Sprogram Area; 程序首部已知半徑求圓的面積const pi=3.14159; 說明部分?jǐn)?shù)據(jù)描述var s,r:real;begin執(zhí)行部分readln(r;s:=pi*sqr(r;writeln('s=',s;end.上述程序第一行稱為程序首部。其中用花括號(注釋可以用 或(* *)來表示)括起來的內(nèi)容是注釋,程序第二行就是一個(gè)注釋,注釋除了給人看,增加程序的可讀性外,對程序編譯和運(yùn)行不起作用。一個(gè)程序可以包含多個(gè)出現(xiàn)在不同處注釋,亦可無注釋。程序第三行是常量說明,程序第四行是變量說明。程序從begin

8、到end都是執(zhí)行(語句)部分(1程序首部例1.1的第一行稱為程序首部。program是保留字,接著是程序名(由你依據(jù)“標(biāo)示符”規(guī)則自行定義),最后以分號表示程序首部結(jié)束,下面是程序主體的開始。程序首部在一個(gè)Turbo Pascal(僅在Turbo Pascal中有效)程序中并非必須出現(xiàn),它是可選的。寫上它僅起了文檔作用。因此,在時(shí)間有限的情況下,如果用Turbo Pascal編程完全可以省略程序首部。(2程序體a.說明部分說明部分用于定義和說明程序中用到的數(shù)據(jù),由單元說明、標(biāo)號說明、常量說明、類型說明、變量說明、函數(shù)或過程說明組成,并且這些數(shù)據(jù)的說明次序必須按照以上次序。但是一個(gè)簡單的Turb

9、o Pascal程序也可以不包含說明部分,也就是說說明部分是可選的。b.執(zhí)行部分執(zhí)行部分描述了程序要執(zhí)行的操作。它必須以一個(gè)Turbo Pascal保留字begin開始,以保留字end后跟句點(diǎn)結(jié)束,其間是一些執(zhí)行具體操作的語句,并且以分號作為語句之間的分隔符。begin 和end必須成對出現(xiàn),這是一個(gè)Turbo Pascal程序所必須有的。緊跟end之后的句號表示執(zhí)行部分的結(jié)束,也表示整個(gè)程序的結(jié)束。此后的任何語句都無效。Turbo Pascal規(guī)定緊隨end之前出現(xiàn)的分號允許省略。(3一個(gè)完全的Pascal程序結(jié)構(gòu)program 程序名;uses已知單元說明;label標(biāo)號說明;const常

10、量說明;type類型說明;var變量說明;function函數(shù)說明;procedure過程說明;begin語句;語句;語句end. 2.2 Pascal字符與符號 1.保留字(關(guān)鍵字所謂保留字是指在Pascal語言中具有特定的含義,你必須了解它的含義,以便于正確的使用,否則會造成錯誤。標(biāo)準(zhǔn)Pascal語言中的保留字一共有35個(gè),Turbo Pascal語言一共有51個(gè)。下面是Pascal語言的保留字(斜體是Turbo Pascal特有的保留字:AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE,END,F(xiàn)ILE,F(xiàn)OR,F(xiàn)UNTION,GOTO,IF,I

11、N,LABEL,MOD,NIL,NOT,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH,EXPORTS,SHR,STRING,ASM,OBJECT,UNIT,CONSTRUCTOR,IMPLEMENTATION,DESTRUCTOR,USES,INHERITED,INLINE,INTERFACE,LIBRARY,XOR,SHL.標(biāo)識符(1表識符的定義:標(biāo)識符就是以字母開頭的字母數(shù)字序列,有效長度為63個(gè)字符,并且大小寫等效??梢杂脕順?biāo)示常量、變量、程序、函數(shù)等。例如例1.1中的

12、Area(程序名,pi(符號常量,s、r(變量名都是標(biāo)識符。(2表識符的分類:a.標(biāo)準(zhǔn)標(biāo)識符:指Pascal語言預(yù)先定義的表識符,具有特殊含義。以下列舉了Turbo Pascal語言部分常用的標(biāo)準(zhǔn)表識符:標(biāo)準(zhǔn)常量 False Maxint True 標(biāo)準(zhǔn)類型 Boolean Char Real Integer 標(biāo)準(zhǔn)函數(shù) Abs Arctan Chr Cos Eof Eoln Exp Ln Odd Ord Pred Round Sin Sqr Sqrt Succ Trunc 標(biāo)準(zhǔn)過程 Dispose Get New Pack Page Put Read Readln Reset Rewrite

13、Unpack Write Writeln 標(biāo)準(zhǔn)文件 Input Output b.用戶字定義表識符:由你來根據(jù)需要定義。(1)選用的表識符不能和保留字相同。(2)語法上允許預(yù)定義的標(biāo)準(zhǔn)標(biāo)識符作為你定義的的表識符使用,但最好還是不要用。以下列舉了你在定義表識符時(shí)可以用的字符: AZ;az;09;+,-,*,/,=,<>,<=,>=,<,>,(,:=,;,.,:,.,',2.3Pascal數(shù)據(jù)類型 數(shù)據(jù)是程序設(shè)計(jì)的一個(gè)重要內(nèi)容,其重要特征-數(shù)據(jù)類型,確定了該數(shù)據(jù)的形、取值范圍以及所能參與的運(yùn)算。Turbo Pascal 提供了豐富的數(shù)據(jù)類型,這些數(shù)據(jù)類型

14、可以分為三大類:簡單類型、構(gòu)造類型和指針類型,其中簡單類型可以分為標(biāo)準(zhǔn)類型(整型、實(shí)型、字符型和布爾型)和自定義類型(枚舉型和子界型),構(gòu)造類型可以分為數(shù)組類型、集合類型、記錄類型和文件類型。這些數(shù)據(jù)類型中除了指針類型是動態(tài)數(shù)據(jù)類型外,其他的都是靜態(tài)數(shù)據(jù)類型。在這些數(shù)據(jù)類型中簡單類型都是有序類型,除了實(shí)型以外的簡單類型都是順序類型,所謂順序類型就是他們的值不僅是有序的而且是有順序號。在這里主要介紹整型、實(shí)型、字符型和布爾型四種常用的數(shù)據(jù)類型。1.整型一個(gè)整型數(shù)據(jù)用來存放整數(shù)。Turbo Pascal支持五種預(yù)定義整型,它們是shortint(短整型)、 integer(整型)、 longint

15、(長整型)、 byte(字節(jié)型)和 word(字類型),Turbo Pascal分別用相同的名字作為他們的表識符。每一種類型規(guī)定了相應(yīng)的整數(shù)取值范圍以及所占用的內(nèi)存字節(jié)數(shù)。類型 數(shù)值范圍 占字節(jié)數(shù) 格式 shortint -128.128 1 帶符號8位 inteter -32768.32767 2 帶符號16位 longint -2147483648.2147483647 4 帶符號32位 byte 0.255 1 帶符號8位 word 0.65535 2 帶符號16位 Turbo Pascal規(guī)定了兩個(gè)預(yù)定義整型常量表識符maxint和maxlonint,他們各表示確定的常數(shù)值,maxin

16、t為32767, longint為2147483647,他們的類型分別是integer 和longint。2.實(shí)型一個(gè)實(shí)型數(shù)據(jù)用類存放實(shí)數(shù)。Turbo Pascal支持五種預(yù)定義實(shí)型,它們是real(基本實(shí)型)、 single(但精度實(shí)型)、double(雙精度實(shí)型)、extended(擴(kuò)展實(shí)型)、comp(裝配實(shí)型),Turbo Pascal分別用相同的名字作為他們的表識符。每一種類型規(guī)定了相應(yīng)的實(shí)數(shù)取值范圍、所占用的內(nèi)存字節(jié)數(shù)以及它們所能達(dá)到的精度。類型 數(shù)值范圍 占字節(jié)數(shù) 有效位數(shù) real 2.9e-39.1.7e38 6 11.12 single 1.5e-45.3.4e38 4 7

17、.8 double 5.0e-324.1.7e308 8 15.16 extended 3.4e-4932.1.1e4932 10 19.20 comp -2*63+1.2*63-1 8 19.20 Turbo Pascal支持兩種用于執(zhí)行實(shí)型運(yùn)算的代碼生成模式:軟件仿真模式和80x87浮點(diǎn)模式。除了real可以在軟件仿真模式下直接運(yùn)行以外,其他類型必須在80x87浮點(diǎn)模式下運(yùn)行。3.布爾型一個(gè)布爾型數(shù)據(jù)用來存放邏輯值(布爾值)。布爾型的值只有兩個(gè):false和true,并且false的序號是0,true的序號是1。false 和true都是預(yù)定義常數(shù)表識符,分別表示邏輯假和邏輯真。并且tru

18、e 。 boolean 是布爾型的表識符。 4.字符型字符型用char作為表識符。字符型必須用單引號括起來,字母作為字符型時(shí),大小寫是不等價(jià)的,并且字符型只允許單引號中有一個(gè)字符,否則就是字符串。2.4 常量與變量1.常量(1常量:在某個(gè)程序的整個(gè)過程中其值不變的量。(2常量定義:常量定義出現(xiàn)在說明部分。它的語法格式是:const<常量標(biāo)識符>=<常量>.<常量標(biāo)識符>=<常量>常量表識符的類型由定義它的常量的類型決定。例如:const a=12 隱含說明a是整型;const r=3.21 隱含說明r是實(shí)型.(3常量定義部分必須以保留字const

19、開頭,可以包含一個(gè)或幾個(gè)常量定義,而且每個(gè)常量均以分號結(jié)束。(4Turbo Pascal類型常量類型常量,又稱變量常數(shù),它是Turbo Pascal的一個(gè)擴(kuò)充特性。類型常量的定義與標(biāo)準(zhǔn)Pascal規(guī)定的常數(shù)定義和變量說明有所區(qū)別。類型常量定義的語法格式:const<簡單類型常量標(biāo)識符>:簡單類型=常數(shù);例如:constcounter:integer=0;flag:boolean=true;index:0.100=0;2.變量(1變量:在某個(gè)程序中的運(yùn)行過程中其值可以發(fā)生改變的量(2變量說明:變臉說明出現(xiàn)在說明部分。它的語法格式是:var<變量標(biāo)識符列表>:<類型&

20、gt;.<變量標(biāo)識符列表>:<類型>其中,保留字var表示開始一個(gè)變量說明部分。變量標(biāo)識符列表是一個(gè)用逗號隔開的標(biāo)識符序列,冒號后面的類型是類型標(biāo)識符。每個(gè)變量說明均以分號結(jié)束。例如:vara,b,c:integer;m,n:real;2.5標(biāo)準(zhǔn)函數(shù) 1.算術(shù)函數(shù)abs 絕對值 exp 指數(shù) frac 小數(shù)部分 int 整數(shù)部分 ln 自然對數(shù) pi 圓周率sqr 平方 sqrt 平方根 abs(-4=4 abs(-7.49=7.49 frac(-3.71=-0.71 int(-3.71=-3.0 sqr(4=16 sqrt(4=2 2.標(biāo)量函數(shù)函數(shù)標(biāo)識符 自變量類型

21、意義 結(jié)果類型 odd 判斷奇數(shù) pred 求前趨 succ 求后繼 例:odd(1000=false odd(3=true pred(2000=1999 succ(2000=2001 pred('x'='w' succ('x'='y' 3.轉(zhuǎn)換函數(shù)chr 自量對應(yīng)的字符 ord自量對應(yīng)的序號 longintround 四舍五入 trunc 截?cái)嗳≌?longint 4.雜類函數(shù)random 無自變量 0,1之間的隨機(jī)實(shí)數(shù) real random word 0,自變量之間的隨機(jī)整數(shù) wird randomize 無自變量 用一隨機(jī)

22、值初始化內(nèi)部隨機(jī)數(shù)產(chǎn)生器 longint upcase 字符型 使小寫英文字母變?yōu)榇髮?字符型 2.6運(yùn)算符和表達(dá)式1.運(yùn)算符和優(yōu)先級(1運(yùn)算符a.算術(shù)運(yùn)算符 運(yùn)算符 運(yùn)算 運(yùn)算對象 結(jié)果類型 + 只要有一個(gè)運(yùn)算對象是實(shí)型,結(jié)果就是實(shí)型,如果全部的運(yùn)算對象都是整型并且運(yùn)算不是除法,則結(jié)果為整型,若運(yùn)算是除法,則結(jié)果是實(shí)型 -減 *乘 / 除 div 整除 mod取余 b.邏輯運(yùn)算符not 邏輯非 and 邏輯與or 邏輯或 xor邏輯異或 c.關(guān)系運(yùn)算符= 等于 <>不等于 < 小于 > 大于 <=小于等于 >= 大于等于 (2優(yōu)先級not 1(高):*,/

23、,div,mod,and 2 :xor,+,-,or 3 :in,=,<>,>=,<=,<> 4(低) 2.表達(dá)式(1算術(shù)表達(dá)式:算術(shù)表達(dá)式是由算術(shù)運(yùn)算符連接常量、變量、函數(shù)的式子。算術(shù)表達(dá)式中各個(gè)運(yùn)算符的次序?yàn)椋?( ->函數(shù)->*,/,div,mod->+,1(2布爾表達(dá)式:Turbo Pascal提供給布爾表達(dá)式以下基本操作:邏輯運(yùn)算和關(guān)系運(yùn)算。 第三章 順序結(jié)構(gòu)程序設(shè)計(jì) 3.1賦值語句 賦值語句是最簡單的語句,其一般形式為:<變量>:=<表達(dá)式>賦值語句的作用是計(jì)算表達(dá)式的值,并賦給變量。對于任何一個(gè)變量必須

24、首先賦值,然后才能引用,否則,未賦初值的變量將以一個(gè)隨機(jī)值參與運(yùn)算。另外,賦值號兩邊的類型必須相同,但表達(dá)式值為整數(shù)時(shí),它可自動化為實(shí)型后賦給該實(shí)型變量,即符合賦值相容。例:關(guān)于賦值的例子program example;var a,b:integer;begina:=3;b:=2;writeln(a;writeln(b;a:=a+b;writeln(a;writeln(b;b:=a-b;writeln(a;writeln(b;a:=a-b;writeln(a;writeln(b;readlnend.3.2輸入語句通過計(jì)算機(jī)的外設(shè)把數(shù)據(jù)送到計(jì)算機(jī)內(nèi)存的過程稱為輸入。Pascal語言的輸入語句有如

25、下兩種形式:read(<變量名表>;readln(<變量名表>;<輸入項(xiàng)表>是一個(gè)或幾個(gè)由逗號隔開的變量標(biāo)識符,他們必須在程序說明部分預(yù)先說明,他們可以是整型、實(shí)型或字符型,布爾型不可以直接讀入。例如a,b,c為整型變量,read(a,b,c之后鍵盤輸入:20 30 40 ( 表示回車結(jié)果:a=20,b=30,c=40readln語句和read語句不同之處在于輸入數(shù)據(jù)到各變量之后,readln自動換行,從下一行開始再輸入數(shù)據(jù)。一個(gè)read語句執(zhí)行完后,數(shù)據(jù)行中多余的未讀數(shù)據(jù)可以被下一個(gè)輸入語句讀入;而一個(gè)readln于執(zhí)行完后,數(shù)據(jù)行中多余未讀數(shù)據(jù)就沒有用了

26、。readln語句中可以不包含變量名表。即有以下等價(jià)情況:readln(a,b;readln等價(jià)于readln(a,b輸入語句輸入的數(shù)據(jù)類型必須和變量一一對應(yīng)。如果輸入的是一串整數(shù)或?qū)崝?shù),數(shù)據(jù)間用空格或回車分隔;若輸入的是一串字符,則不用分隔。 例:輸入語句示例program shuru;varx:real;c:char;beginwrite('please input the number: ($XXX.XX'readln(c,x;writeln('The price is ',c,xend. 3.3輸出語句輸出是將內(nèi)存中的數(shù)據(jù)送到外設(shè)的過程。Turbo Pa

27、scal的輸出語句有兩種形式:write(<輸出項(xiàng)表>writeln(<輸出項(xiàng)表>其中<輸出項(xiàng)表>是一串用逗號分隔的常量、變量、函數(shù)名、表達(dá)式或字符串。如果是變量、函數(shù)名、表達(dá)式,則將其計(jì)算結(jié)果輸出;如果是常量或字符串,則直接輸出其值。writeln和writeln的區(qū)別在于:write語句是輸出項(xiàng)輸出后,不換行,光標(biāo)停留在最后一項(xiàng)后,writeln語句按項(xiàng)輸出后,自動換行,光標(biāo)則停留在下一行的開始位置。writeln語句允許不含有輸出項(xiàng),即僅writeln;表示換行。Turbo Pascal語言把輸出項(xiàng)的數(shù)據(jù)顯示占用的寬度稱為域?qū)?,你可以根?jù)輸出格式的要求

28、在輸出語句中自動定義每個(gè)輸出項(xiàng)的寬度。定義寬度時(shí)分為單域?qū)捄碗p域?qū)挕#?)單域?qū)捿敵龈袷剑簑riteln(I:n在n個(gè)字符寬的輸出域上按右對齊方式輸出I的值,若n大于I的實(shí)際位數(shù),則在I值前面補(bǔ)(n-I的實(shí)際位數(shù))個(gè)空格。若I的實(shí)際位數(shù)大于n,則自動突破限制。n必須是整數(shù)。(2)雙域?qū)捿敵龈袷剑簑riteln(a:m:n雙域?qū)捴饕糜趯?shí)型數(shù)據(jù)的輸出。n的用法同上。在n個(gè)字符寬的輸出域上按右隊(duì)齊方式用小數(shù)點(diǎn)形式輸出a的數(shù)值,m是小數(shù)點(diǎn)后的位數(shù)。原來的數(shù)據(jù)按該該格式指定的小數(shù)位數(shù)四舍五入。若m=0 ,則不輸出小數(shù)部分和小數(shù)點(diǎn),原數(shù)據(jù)四舍五入取整。n,m必須是整數(shù)。 例:輸出語句的例子program

29、 shuchu;consts='pascal'vari:integer;r:real;c:char;b:boolean;begini:=12345;r:=123.45c:='a'b:=true;writeln('i='writeln(i:6;writeln('r=',r,r:6:1;writeln('c=',c,c:10;writeln('b=',b,b:10end. 3.4復(fù)合語句復(fù)合語句是由若干語句組成的序列,語句之間用分號“;”隔開,并且以begin和end括起來,作為一條語句。復(fù)合語句的一般

30、形式:begin語句1;語句2;語句n;end 例:變量值的交換program jiaohuan;vara,b,t:integer;begin a:=10;b:=20;begint:=a;a:=b;b:=t;end;writeln('a=',a,'b=',bend. 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì) 一、if語句IF語句是由一個(gè)布爾表達(dá)式和兩個(gè)供選擇的操作序列組成。運(yùn)行時(shí)根據(jù)布爾表達(dá)式求值結(jié)果,選取其中之一的操作序列執(zhí)行。有兩種形式的IF語句:if<布爾表達(dá)式>then <語句>;if<布爾表達(dá)式>then <語句1>el

31、se <語句2>;當(dāng)布爾表達(dá)式的值為真,則執(zhí)行then后面的語句,值為假時(shí)有兩種情況:要么什么也不做,要么執(zhí)行else后面的語句。注意else前面沒有分號,因?yàn)榉痔柺莾蓚€(gè)語句之間的分隔符,而else并非語句。如果在該處添了分號,則在編譯的時(shí)候就會認(rèn)為if 語句到此結(jié)束,而把else當(dāng)作另一句的開頭,輸出出錯信息。例:求y=f(x,當(dāng)x>0時(shí),y=1,當(dāng)x=0時(shí),y=0,當(dāng)x<0時(shí),y=-1program lianxi;var x,y:real;beginif x>0 then y:=1;if x=0 then y:=0;if x<0 then y:=-1;w

32、riteln('y=',y;end.在Turbo Pascal語言if語句中被構(gòu)造的語句只能是一條語句,當(dāng)條件選擇某個(gè)分支的計(jì)算要用多個(gè)語句描述時(shí),就必須把該分支用begin和 end括來,寫成復(fù)合語句。在用if語句連續(xù)嵌套時(shí),如果你插入適量的復(fù)合語句,有利于程序的閱讀和理解。例:當(dāng)x>0時(shí)候,計(jì)算x*x,并且輸出x和x*x,program lianxie3;var x,x1:real;beginreadln('x=',x;if x>= then beginx1:=x*x;writeln('x*x=',x1;writeln('

33、x=',x;end;end.當(dāng)if 語句嵌套時(shí),Turbo Pascal約定else總是和最近的一個(gè)if配對。 二、case語句case語句是由一個(gè)表達(dá)式和眾多可選擇的操作序列組成。運(yùn)行時(shí),根據(jù)表達(dá)式的求值結(jié)果,在眾多的分支中選取一個(gè)分支執(zhí)行。其形式為:case表達(dá)式of常量1:語句1;常量2:語句2;常量n:語句n;else語句 n+1 可選項(xiàng) end;表達(dá)式只能是順序類型(除了實(shí)型以外的簡單類型),其值必須是唯一確定并且和表達(dá)式類型相同。case語句執(zhí)行和表達(dá)式值相匹配的case常數(shù)所指向的那條語句,如果沒有相匹配的值,則執(zhí)行else部分(如果有的話)或者什么也不做。在else前面

34、的語句末尾有分號,這是和if語句不同的。例:根據(jù)學(xué)生的成績給予相應(yīng)的等低,對應(yīng)關(guān)系如下:以下program chengji;var s:real;ch:char;beginwrite('input the score: 'readln(s;if(s>=0and(s<=100thencase s div 10 of10,9:ch:='B'8:ch:='B'7,6:='C'else ch:='D'end;writeln(s,'-',ch;end. 第五章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 5.1while語

35、句while語句用于“當(dāng)滿足某一條件時(shí)進(jìn)行循環(huán)”的情況。while語句的語法格式:while 布爾表達(dá)式do語句;循環(huán)結(jié)束條件在進(jìn)入循環(huán)體之前測試,若最初的測試值為false,則根本不進(jìn)入循環(huán)體,也就是說while循環(huán)是是屬于當(dāng)型循環(huán)。為了能使while重復(fù)能終止,循環(huán)體中一定要有影響布爾表達(dá)式的操作,否則該循就是一個(gè)死循環(huán)。例:計(jì)算從到某個(gè)數(shù)之間所有奇數(shù)的和。program jishu;var odds,limit,sum:integer;beginreadln(limit;sum:=0;odds:=1;while odds<=limit dobeginsum:=sum+odds;od

36、ds:=odds+2end;writeln(sum:1end. 5.2repeat語句repeat 語句用于“重復(fù)執(zhí)行循環(huán)體,一直到指定的條件為真時(shí)為止”。語法格式為:repeat語句1; 語句n;until布爾表達(dá)式;repeat重復(fù)基本上有和while重復(fù)一樣的描述循環(huán)計(jì)算的能力,但有一些不同:在repeat語句的結(jié)構(gòu)中,布爾表達(dá)式求值在計(jì)算操作之后,而while語句中,布爾表達(dá)式求值在計(jì)算操作之前,也就是說repeat至少執(zhí)行一次循環(huán)體。while語句的成分語句只能是一個(gè)語句。因此,當(dāng)重復(fù)動作包含多個(gè)語句時(shí),要用begin和end ,使它變成一個(gè)復(fù)合語句。而repeat語句的保留字rep

37、eat和until已經(jīng)起語句括號作用,可以包含多個(gè)語句而無須begin和end。repeat語句中,當(dāng)布爾表達(dá)式為true時(shí)結(jié)束循環(huán),而while語句中,是當(dāng)表達(dá)式為false時(shí)才結(jié)束循環(huán)。當(dāng)描述由計(jì)算操作后的情況確定重復(fù)是否繼續(xù)進(jìn)行的計(jì)算時(shí),通常用repeat語句描述。5.3for 語句for 語句用來描述已知重復(fù)次數(shù)的循環(huán)結(jié)構(gòu)。for 語句有兩種形式:(1 for 控制變量:初值to終值do語句;(2 for 控制變量:初值downto終值do語句;第一種形式的for 語句是遞增循環(huán)。首先將初值賦給控制變量,接著判斷控制變量的值是否小于或等于終值,若是,則執(zhí)行循環(huán)體,在執(zhí)行了循環(huán)體之后,自

38、動將控制變量的值該為它的后繼值,并重新判斷是否小于或等于終值。當(dāng)控制變量的值大于終值時(shí),退出for循環(huán),執(zhí)行for語句之后的語句。第一種形式的for 語句是遞減循環(huán)。首先將初值賦給控制變量,接著判斷控制變量的值是否大于或等于終值,若是,則執(zhí)行循環(huán)體,在執(zhí)行了循環(huán)體之后,自動將控制變量的值該為它的前趨值,并重新判斷是否大于或等于終值。當(dāng)控制變量的值小于終值時(shí),退出for循環(huán),執(zhí)行for語句之后的語句。for 語句中的初值、終值、控制變量的數(shù)據(jù)都必須是順序類型。當(dāng)初值和終值確定后,重復(fù)的次數(shù)就確定不變了,并且控制變量在重復(fù)語句內(nèi)不能施加任何賦值操作。 例:計(jì)算1+2+3+99+100program

39、 jia;var n,sum:integer;beginsum:=0;for i:=1 to 100 dosum:=sum+i;writeln(sum;end. 5.4goto語句goto語句是一種無條件轉(zhuǎn)向語句,它可以控制直接從程序的一條語句轉(zhuǎn)向另一條語句。goto語句的語法形式為:goto標(biāo)號;其中標(biāo)號必須是不超過位整數(shù)的正整數(shù)或標(biāo)識符組成,但標(biāo)號必須在說明語句中先予以說明。goto語句會使程序出現(xiàn)一種稱為“亂面條”的結(jié)構(gòu),因此你最好還是不要去用。第六章 遞歸算法將復(fù)雜的處理歸納為較簡單的處理,直到 最簡單的處理。基礎(chǔ)為歸納,即通過觀察,得到3個(gè)內(nèi)容:1、 遞歸的形式;2、 最基本式是否有

40、解決的方案;3、 遞歸終止的條件 1、 某人寫了n封信和n個(gè)信封,如果所有的信都裝錯了信封。求所有的信都裝錯信封共有多少種不同情況。 歸納法例子 1.有n個(gè)硬幣(n為偶數(shù))正面朝上排成一排,每次將n-1個(gè)硬幣翻成朝上為止。編程讓計(jì)算機(jī)把翻硬幣的最簡過程及翻幣次數(shù)打印出來(用*代表正面,用0代表反面)?;拘问剑篋1=0;d2=1遞歸式:dn= (n-1*( dn-1 + dn-2program lettter;var n:integer;function d(n:integer:longint;begincase n of1:d:=0;2:d:=1;else d:=(n-1*(d(n-1+d(

41、n-2;end;end;beginrepeatwrite('n='readln(n;if n<=0 then writeln('Once more!'until n>0;writeln('d=',d(n;readln;end.2、 有一對雌雄兔子,假定兩個(gè)月便可以繁殖雌雄各一對兔子。問n各月后共有多少對兔子?遞歸的三要素:遞歸的形式:Tn= Tn-1+ Tn-2基本:T1=1,T2=1結(jié)束條件:n個(gè)月program rabbit;var n:integer;function fa(n:integer:integer;beginif n

42、<3 then fa:=1else fa:=fa(n-1+fa(n-2;end;beginwrite('n='readln(n;writeln('The number of the rabbits:',fa(n;end. 3 梯有N階,上樓可以一步上一價(jià),也可以一次上二階。編一個(gè)程序,計(jì)算共有多少種不同的走法。遞歸的形式:sn=sn-1+sn-2基本式子:s1=1;s2=2program upstairs;var n:integer;function s(n:integer:longint;beginif (n=1or(n=2 then s:=nelse

43、s:=s(n-1+s(n-2;end;beginrepeatwrite('N='readln(n;until n>0;writeln('s=',s(n;readln;end.4 、設(shè)有2n個(gè)運(yùn)動員要進(jìn)行網(wǎng)球比賽?,F(xiàn)要設(shè)計(jì)一個(gè)滿足以下要求的比賽日程表:(1)、每個(gè)選手必須與其他n-1個(gè)選手各賽一次; (2)、每個(gè)選手每天只能參賽一次; (3)、循環(huán)賽在n-1天內(nèi)結(jié)束。program match;const k=3;n=8;vars:array1.n,1.n of integer;i,j,p:integer;ju:boolean;procedure copy1

44、(be,en:integer;jug:boolean;q:integer;var m,t,ban:integer;beginif jug thenbeginif be=1 thenbegin if sen,en=0 thenbegin copy1(be,en div 2,true,q div 2;copy1(en div 2+1,en,false,q div 2;end;for m:=1 to en dofor t:=1 to en dosm+q,t+q:=sm,tendelse begin if sbe+q-1,q=0 thenbegin copy1(be,be+(q div 2-1,tru

45、e,q div 2;copy1(be+(q div 2,en,false,q div 2end;for m:=be to en dofor t:=1 to q dosm+q,t+q:=sm,tendendelse beginif sbe,q=0 thenbegin copy1(be,be+(q div 2-1,true,q div 2;copy1(be+(q div 2,en,false,q div 2end;for m:=be to en dofor t:=1 to q dosm-q,t+q:=sm,tendend;beginp:=8;for i:=1 to n dofor j:=1 to

46、n dosi,j:=0;for i:=1 to n dobeginsi,1:=i;if odd(i then si+1,2:=si,1else si-1,2:=si,1;end;copy1(1,n div 2,true,p div 2;copy1(n div 2+1,n,false,p div 2;for i:=1 to n dobeginfor j:=1 to n dowrite(si,j,' 'writeln;end;end.思考題 1、 數(shù)學(xué)寶塔,從最頂上走到最底層,每次只能走到下一層的左邊或右邊的數(shù)字,求出使所走到的所有數(shù)字之和為60的途徑。74669363712532

47、85947 326418563397684152573578422、 漢諾塔問題: 設(shè)有三個(gè)塔座,依次命名為x,y,z。有z個(gè)直徑不同的圓盤,由小到大依次編號為1、2、,n。開始時(shí),它們?nèi)堪催f減的次序插在塔座上?,F(xiàn)要求按下列規(guī)則把n個(gè)圓盤按次序插放在z塔座上。 (1)、每次只能移動一個(gè)圓盤; (2)、圓盤可以從任一個(gè)塔座上移到另一個(gè)塔座上; (3)、任何時(shí)刻都不能把一個(gè)較大的圓盤壓在較小的圓盤上。 第七章 回溯算法搜索:全面訪問所有可能的情況,分為兩種:不考慮給定問題的特有性質(zhì),按事先頂好的順序,依次運(yùn)用規(guī)則,即盲目搜索的方法;另一種則考慮問題給定的特有性質(zhì),選用合適的規(guī)則,提高搜索的效率,

48、即啟發(fā)式的搜索?;厮菁词禽^簡單、較常用的搜索策略。基本思路:若已有滿足約束條件的部分解,不妨設(shè)為(x1,x2,x3,xi),I 則添加 x(i+1 屬于 s(i+2 ,檢查 (x1,x2, ,xi,x(i+1 是否滿足條件,滿足了就繼續(xù)添加 x(i+2 、 s(i+2 ,若所有的 x(i+1 屬于 s(i+1 都不能得到部分解,就去掉 xi ,回溯到 (xi,x2, x(i-1 ,添加那些未考察過的 x1 屬于 s1 ,看其是否滿足約束條件,為此反復(fù)進(jìn)行,直至得到解或證明無解。 例1 八皇后問題。program eightqueens;varx:array1.8 of integer;a,b,c:array-7.16 of boolean;i:integer;procedure print;var k:integer;beginfor k:=1 to 8 do write(xk:4;writeln;end;procedure try(i:integer;var j:integer;beginfor j:=1 to 8 doif aj and bi+j and ci-jthen beginxi:=j;aj:=false

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論