信息學競賽輔導_第1頁
信息學競賽輔導_第2頁
信息學競賽輔導_第3頁
信息學競賽輔導_第4頁
信息學競賽輔導_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 HYPERLINK /jsbase/pascal /jsbase/pascal第一章 Pascal 語言概述與基本知識1 關于 Pascal 語語言Pascal是一種計算機通用的高級程序設計語言。它由瑞士Niklaus Wirth教授于六十 年代末設計并創(chuàng)立。以法國數(shù)學家命名的Pascal語言現(xiàn)已成為使用最廣泛的基于DOS的語言之一,其主要 特點有:嚴格的結(jié)構化形式;豐富完備的數(shù)據(jù)類型;運行效率高;查錯能力強。正因為上述特點, Pascal 語言可以被方便地用于描述各種算法與數(shù)據(jù)結(jié)構。尤其是對 于程序設計的初學者,Pascal語言有益于培養(yǎng)良好的程序設計風格和習慣。101(國際奧林 匹克信息

2、學競賽)把Pascal語言作為三種程序設計語言之一,N0I(全國奧林匹克信息學競 賽)把Pascal語言定為唯一提倡的程序設計語言,在大學中Pascal語言也常常被用作學習 數(shù)據(jù)結(jié)構與算法的教學語言。在 Pascal 問世以來的三十余年間,先后產(chǎn)生了適合于不同機型的各種各樣版本。其中 影響最大的莫過于Turbo Pascal系列軟件。它是由美國Borland公司設計、研制的一種適 用于微機的Pascal編譯系統(tǒng)。該編譯系統(tǒng)由1983年推出1.0版本發(fā)展到1992年推出的7.0 版本,其版本不斷更新,而功能更趨完善。下面列出 Turbo Pascal 編年史1983Turbo Pascal 1.

3、0Turbo Pascal 2.0Turbo-87 Pascal提高實數(shù)運算速度并擴大值域1985Turbo Pascal 3.0增加圖形功能Turbo BCD Pascal特別適合應用于商業(yè)1987Turbo Pascal 4.0 提供集成開發(fā)環(huán)境(IDE),引入單元概念1988Turbo Pascal 5.0增加調(diào)試功能1989Turbo Pascal 5.5 支持面向?qū)ο蟮某绦蛟O計(OPP)1990Turbo Pascal 6.0提供面向?qū)ο蟮膽每蚣芎蛶?Turbo Vision)1992Turbo Pascal 7.0面向?qū)ο蟮膽孟到y(tǒng)、更完善的IDETurbo Vision 2.0

4、1993Borland Pascal 7.0 開發(fā) Object Windows 庫、(For Windows)提供對 OLE 多媒體應用開發(fā)的支持 1995DelphiVisual PascalTurbo Pascal 語言是編譯型程序語言,它提供了一個集成環(huán)境的工作系統(tǒng),集編輯、 編譯、運行、調(diào)試等多功能于一體。Turbo Pascal 或 Borland Pascal 的啟動Turbo Pascal 的啟動DOS下的啟動(適用于MS-D0S6.22之前的版本或Win 9X & Win2000的Command Mode)DOS下,在裝有Turbo Pascal的文件目錄下,鍵入turbo即

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

6、然后單擊“打開”,再單擊“下一步”,再單擊完成;這還沒完,選中前面新建的快捷方式 (應該叫Turbo Pascal吧),單擊右鍵,單擊“屬性”,選擇“程序”,然后再單擊“高級”, 把“MS-DOS方式”前面的那個勾去掉,也就是不要選“MS-DOS方式”,然后單擊“確定”, 在單擊“確定”就大功告成了,以后你運行Turbo Pascal的時候,只要雙擊那個你建立起 的快捷方式就可以直接在Win9X或Win2000下運行Turbo Pascal。Borland Pascal 的啟動Borland Pascal 的啟動沒有像 Turbo Pascal 那樣復雜,一般來說在任何情況下雙擊 bp.exe

7、 或是在 MS-DOS 下運行都不會出現(xiàn)什么問題。第二章 Pascal 語言基礎知識Pascal 程序基本組成例 1.1 計算半徑為 R 的圓面積 Sprogram Area; 程序首部已知半徑求圓的面積const pi=3.14159; 說明部分數(shù)據(jù)描述var s,r:real;begin執(zhí)行部分readln(r);s:=pi*sqr(r);writeln(s=,s);end.上述程序第一行稱為程序首部。其中用花括號(注釋可以用 或(* *)來表示)括起 來的內(nèi)容是注釋,程序第二行就是一個注釋,注釋除了給人看,增加程序的可讀性外,對程 序編譯和運行不起作用。一個程序可以包含多個出現(xiàn)在不同處注

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

9、、函數(shù)或過程說明組成,并且這些數(shù)據(jù)的說明次序必須按照以上次序。但是一個簡 單的Turbo Pascal程序也可以不包含說明部分,也就是說說明部分是可選的。b.執(zhí)行部分執(zhí)行部分描述了程序要執(zhí)行的操作。它必須以一個Turbo Pascal保留字begin開始,以保 留字end后跟句點結(jié)束,其間是一些執(zhí)行具體操作的語句,并且以分號作為語句之間的分隔 符。begin和end必須成對出現(xiàn),這是一個Turbo Pascal程序所必須有的。緊跟end之后 的句號表示執(zhí)行部分的結(jié)束,也表示整個程序的結(jié)束。此后的任何語句都無效oTurbo Pascal 規(guī)定緊隨end之前出現(xiàn)的分號允許省略。一個完全的 Pasc

10、al 程序結(jié)構program 程序名;uses已知單元說明;label標號說明;const常量說明;type類型說明;var變量說明;function函數(shù)說明;procedure過程說明;begin語句;語句;語句end.Pascal 字符與符號保留字(關鍵字)所謂保留字是指在Pascal語言中具有特定的含義,你必須了解它的含義,以便于正確 的使用,否則會造成錯誤。標準Pascal語言中的保留字一共有35個,Turbo Pascal語言 一共有51個。下面是Pascal語言的保留字(斜體是Turbo Pascal特有的保留字):AND, ARRAY, BEGIN, CASE, CONST, D

11、IV, DO, DOWNTO, ELSE, END, FILE, FOR, FUNTION, GOTO, IF, IN, 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, L

12、IBRARY, XOR, SHL2 標識符(1)表識符的定義:標識符就是以字母開頭的字母數(shù)字序列,有效長度為63個字符,并 且大小寫等效??梢杂脕順耸境A?、變量、程序、函數(shù)等。例如例1.1中的Area(程序名), pi(符號常量),s、r(變量名)都是標識符。(2) 表識符的分類:a. 標準標識符:指 Pascal 語言預先定義的表識符,具有特殊含義。以下列舉了 Turbo Pascal 語言部分常用的標準表識符:標準常量 False Maxint True標準類型 Boolean Char Real Integer標準函數(shù) Abs Arctan Chr Cos Eof Eoln ExpLn

13、Odd Ord Pred Round Sin SqrSqrt Succ Trunc標準過程 Dispose Get New Pack Page Put ReadReadln Reset Rewrite Unpack Write Writeln標準文件 Input Output b. 用戶字定義表識符:由你來根據(jù)需要定義。1)選用的表識符不能和保留字相同。2)語法上允許預定義的標準標識符作為你定義的的表識符使用,但最好還是不要用。以下列舉了你在定義表識符時可以用的字符:AZ;az;09;+,-,*,/,=,=,=,(,),,Pascal 數(shù)據(jù)類型數(shù)據(jù)是程序設計的一個重要內(nèi)容,其重要特征數(shù)據(jù)類型,

14、確定了該數(shù)據(jù)的形、取值范圍以及所能參與的運算。Turbo Pascal提供了豐富的數(shù)據(jù)類型,這些數(shù)據(jù)類型可以分為三大類:簡單類型、構 造類型和指針類型,其中簡單類型可以分為標準類型(整型、實型、字符型和布爾型)和自 定義類型(枚舉型和子界型),構造類型可以分為數(shù)組類型、集合類型、記錄類型和文件類 型。這些數(shù)據(jù)類型中除了指針類型是動態(tài)數(shù)據(jù)類型外,其他的都是靜態(tài)數(shù)據(jù)類型。在這些數(shù) 據(jù)類型中簡單類型都是有序類型,除了實型以外的簡單類型都是順序類型,所謂順序類型就 是他們的值不僅是有序的而且是有順序號。在這里主要介紹整型、實型、字符型和布爾型四種常用的數(shù)據(jù)類型。整型一個整型數(shù)據(jù)用來存放整數(shù)。Turbo

15、 Pascal支持五種預定義整型,它們是shortint (短 整型)、integer (整型)、longint (長整型)、byte (字節(jié)型)和word (字類型), Turbo Pascal 分別用相同的名字作為他們的表識符。每一種類型規(guī)定了相應的整數(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

16、位Turbo Pascal規(guī)定了兩個預定義整型常量表識符maxint和maxlonint,他們各表示確 定的常數(shù)值,maxint為32767, longint為2147483647,他們的類型分別是integer和 longint。實型一個實型數(shù)據(jù)用類存放實數(shù)。Turbo Pascal支持五種預定義實型,它們是real (基本 實型)、single (但精度實型)、double (雙精度實型)、ext ended (擴展實型)、comp (裝配實型), Turbo Pascal 分別用相同的名字作為他們的表識符。每一種類型規(guī)定了相 應的實數(shù)取值范圍、所占用的內(nèi)存字節(jié)數(shù)以及它們所能達到的精度。類

17、型 數(shù)值范圍 占字節(jié)數(shù) 有效位數(shù)real 2.9e-39.1.7e38 6 11.12single 1.5e-45.3.4e38 4 7.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.20Turbo Pascal支持兩種用于執(zhí)行實型運算的代碼生成模式:軟件仿真模式和80 x87浮 點模式。除了 real可以在軟件仿真模式下直接運行以外,其他類型必須在80 x87浮點模式 下運行。布爾型一個布爾型數(shù)據(jù)用來存放邏輯值(布爾值)。布爾型的值只有兩個:fal

18、se和true,并 且 false 的序號是 0, true 的序號是 1。 false 和 true 都是預定義常數(shù)表識符,分別表示 邏輯假和邏輯真。并且truefalse。boolean是布爾型的表識符。字符型字符型用char作為表識符。字符型必須用單引號括起來,字母作為字符型時,大小寫 是不等價的,并且字符型只允許單引號中有一個字符,否則就是字符串。常量與變量常量常量:在某個程序的整個過程中其值不變的量。常量定義:常量定義出現(xiàn)在說明部分。它的語法格式是:const常量標識符=常量;常量標識符=常量;常量表識符的類型由定義它的常量的類型決定。例如:const a=12隱含說明a是整型;co

19、nst r=3.21 隱含說明 r 是實型常量定義部分必須以保留字const開頭,可以包含一個或幾個常量定義,而且每個常量 均以分號結(jié)束。Turbo Pascal 類型常量類型常量,又稱變量常數(shù),它是Turbo Pascal的一個擴充特性。類型常量的定義與標準 Pascal 規(guī)定的常數(shù)定義和變量說明有所區(qū)別。類型常量定義的語法格式:const簡單類型常量標識符:簡單類型=常數(shù);例如:constcounter:integer=0;flag:boolean=true;index:0.100=0;變量變量:在某個程序中的運行過程中其值可以發(fā)生改變的量變量說明:變臉說明出現(xiàn)在說明部分。它的語法格式是:

20、 var變量標識符列表:類型;變量標識符列表:類型;其中,保留字 var 表示開始一個變量說明部分。變量標識符列表是一個用逗號隔開的標識符 序列,冒號后面的類型是類型標識符。每個變量說明均以分號結(jié)束。例如:varb,c:integer;m,n:real;標準函數(shù)算術函數(shù)abs 絕對值exp 指數(shù)frac 小數(shù)部分int 整數(shù)部分ln 自然對數(shù)pi 圓周率sqr 平方sqrt 平方根abs(-4)=4abs(-7.49)=7.49frac(-3.71)=-0.71int(-3.71)=-3.0sqr(4)=16sqrt(4)=2標量函數(shù)函數(shù)標識符自變量類型意義結(jié)果類型odd 判斷奇數(shù)pred 求

21、前趨succ 求后繼例: odd(1000)=false odd(3)=true pred(2000)=1999 succ(2000)=2001 pred(x)=w succ(x)=y轉(zhuǎn)換函數(shù)chr 自量對應的字符ord 自量對應的序號longintround 四舍五入trunc 截斷取整longint雜類函數(shù)random無自變量0,1)之間的隨機實數(shù)realrandomword0,自變量)之間的隨機整數(shù)wirdrandomize無自變量用一隨機值初始化內(nèi)部隨機數(shù)產(chǎn)生器longintupcase字符型使小寫英文字母變?yōu)榇髮懽址瓦\算符和表達式1.運算符和優(yōu)先級(1)運算符a.算術運算符運算符運

22、算運算對象結(jié)果類型+ 只要有一個運算對象是實型,結(jié)果就是實型,如果全部的運算對象都是整型并且運算 不是除法,則結(jié)果為整型,若運算是除法,則結(jié)果是實型-減*乘/除div 整除mod 取余邏輯運算符 not 邏輯非 and 邏輯與 or 邏輯或 xor 邏輯異或關系運算符 - 施丁= 等于不等于 大于= 大于等于(2)優(yōu)先級 not1(高):*,/,div,mod,and:xor,+,-,or:in,=,=,=,4(低)表達式算術表達式:算術表達式是由算術運算符連接常量、變量、函數(shù)的式子。算術表達式中 各個運算符的次序為: ( )-函數(shù)-*,/,div,mod-+,1布爾表達式:Turbo Pas

23、cal提供給布爾表達式以下基本操作:邏輯運算和關系運算。第三章 順序結(jié)構程序設計賦值語句 賦值語句是最簡單的語句,其一般形式為::=賦值語句的作用是計算表達式的值,并賦給變量。對于任何一個變量必須首先賦值,然后才 能引用,否則,未賦初值的變量將以一個隨機值參與運算。另外,賦值號兩邊的類型必須相 同,但表達式值為整數(shù)時,它可自動化為實型后賦給該實型變量,即符合賦值相容。 例:關于賦值的例子program example;var a,b:integer;begina:=3;b:=2;writeln(a);writeln(b);a:=a+b;writeln(a);writeln(b);b:=a-b;

24、writeln(a);writeln(b);a:=a-b;writeln(a);writeln(b);readlnend.輸入語句通過計算機的外設把數(shù)據(jù)送到計算機內(nèi)存的過程稱為輸入。Pascal語言的輸入語句有 如下兩種形式:read(變量名表); readln(變量名表);輸入項表是一個或幾個由逗號隔開的變量標識符,他們必須在程序說明部分預先說明,他 們可以是整型、實型或字符型,布爾型不可以直接讀入。例如a, b, c為整型變量,read(a,b,c)之后鍵盤輸入:20 30 40CR(CR表示回車)結(jié)果:a=20, b=30, c=40readln語句和read語句不同之處在于輸入數(shù)據(jù)到各

25、變量之后,readln自動換行,從下 一行開始再輸入數(shù)據(jù)。一個read語句執(zhí)行完后,數(shù)據(jù)行中多余的未讀數(shù)據(jù)可以被下一個輸 入語句讀入;而一個readln于執(zhí)行完后,數(shù)據(jù)行中多余未讀數(shù)據(jù)就沒有用了。readln語句 中可以不包含變量名表。即有以下等價情況: readln(a,b);readln 等價于 readln(a,b)輸入語句輸入的數(shù)據(jù)類型必須和變量一一對應。如果輸入的是一串整數(shù)或?qū)崝?shù),數(shù)據(jù)間 用空格或回車分隔;若輸入的是一串字符,則不用分隔。例:輸入語句示例program shuru;varx:real;c:char;begin write(please input the number

26、: ($XXX.XX); readln(c,x);writeln(The price is ,c,x)end.輸出語句輸出是將內(nèi)存中的數(shù)據(jù)送到外設的過程。Turbo Pascal的輸出語句有兩種形式: writ e(輸出項表) wri teln(輸出項表)其中輸出項表是一串用逗號分隔的常量、變量、函數(shù)名、表達式或字符串。如果是變 量、函數(shù)名、表達式,則將其計算結(jié)果輸出;如果是常量或字符串,則直接輸出其值。writeln和writeln的區(qū)別在于:write語句是輸出項輸出后,不換行,光標停留在最 后一項后,writeln語句按項輸出后,自動換行,光標則停留在下一行的開始位置。writeln語句

27、允許不含有輸出項,即僅writeln;表示換行。Turbo Pascal 語言把輸出項的數(shù)據(jù)顯示占用的寬度稱為域?qū)?,你可以根?jù)輸出格式的 要求在輸出語句中自動定義每個輸出項的寬度。定義寬度時分為單域?qū)捄碗p域?qū)?。?)單域?qū)捿敵龈袷剑簑riteln(I: n)在n個字符寬的輸出域上按右對齊方式輸出I的值,若n大于I的實際位數(shù),則在I 值前面補(n-I的實際位數(shù))個空格。若I的實際位數(shù)大于n,則自動突破限制。n必須是整 數(shù)。(2)雙域?qū)捿敵龈袷剑簑riteln(a: m: n)雙域?qū)捴饕糜趯嵭蛿?shù)據(jù)的輸出。n的用法同上。在n個字符寬的輸出域上按右隊齊方 式用小數(shù)點形式輸出a的數(shù)值,m是小數(shù)點后的位

28、數(shù)。原來的數(shù)據(jù)按該該格式指定的小數(shù)位 數(shù)四舍五入。若m=0,則不輸出小數(shù)部分和小數(shù)點,原數(shù)據(jù)四舍五入取整。n,m必須是整 數(shù)。例:輸出語句的例子program 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:10)end.復合語句復合語句是由若干語句組成的序列,語句之間用分號“;”隔開,并且以beg

29、in和end括起來,作為一條語句。復合語句的一般形式:begin語句 1;語句 2; 語句 n;end例:變量值的交換program jiaohuan;vara,b,t:integer;begina:=10;b:=20;begint:=a;a:=b;b:=t;end;writeln(a=,a,b=,b)end.第四章 選擇結(jié)構程序設計一、if語句IF語句是由一個布爾表達式和兩個供選擇的操作序列組成。運行時根據(jù)布爾表達式求 值結(jié)果,選取其中之一的操作序列執(zhí)行。有兩種形式的IF語句:if 布爾表達式 then 語句;if 布爾表達式 then 語句 1else 語句 2;當布爾表達式的值為真,則執(zhí)

30、行then后面的語句,值為假時有兩種情況:要么什么也 不做,要么執(zhí)行else后面的語句。注意else前面沒有分號,因為分號是兩個語句之間的分 隔符,而else并非語句。如果在該處添了分號,則在編譯的時候就會認為if語句到此結(jié) 束,而把else當作另一句的開頭,輸出出錯信息。例:求 y=f(x),當 x0 時,y=l,當 x=0 時,y=0,當 x0 時,y=-lprogram lianxi;var x,y:real;beginif x0 then y:=1;if x=0 then y:=0;if x0 then y:=-1;writeln(y=,y);end.在 Turbo Pascal 語言

31、 if 語句中被構造的語句只能是一條語句,當條件選擇某個分支的 計算要用多個語句描述時,就必須把該分支用begin和end括來,寫成復合語句。在用if 語句連續(xù)嵌套時,如果你插入適量的復合語句,有利于程序的閱讀和理解。例:當x0時候,計算x*x,并且輸出x和x*x,program lianxie3;var x,x1:real;beginreadln(x=,x);if x= thenbeginx1:=x*x;writeln(x*x=,x1); writeln(x=,x);end;end.當 if 語句嵌套時, Turbo Pascal 約定 else 總是和最近的一個 if 配對。二、case語

32、句case 語句是由一個表達式和眾多可選擇的操作序列組成。運行時,根據(jù)表達式的求值 結(jié)果,在眾多的分支中選取一個分支執(zhí)行。其形式為:case 表達式 of常量 1:語句 1;常量2:語句2; 常量n:語句n;else語句n+1 可選項 end;表達式只能是順序類型(除了實型以外的簡單類型),其值必須是唯一確定并且和表達 式類型相同。case語句執(zhí)行和表達式值相匹配的case常數(shù)所指向的那條語句,如果沒有相 匹配的值,則執(zhí)行 else 部分(如果有的話)或者什么也不做。在 else 前面的語句末尾有分 號,這是和if語句不同的。例:根據(jù)學生的成績給予相應的等低,對應關系如下: TOC o 1-5

33、 h z 9 0 100A8 0 89B6 0 79C6 0以下Dprogram chengji;var s:real;ch:char;beginwrite(input the score: );readln(s);if(s=0)and(s=100)thencase s div 10 of10,9:ch:=B;8:ch:=B;7,6:=C;else ch:=D;end;writeln(s,-,ch);end.第五章 循環(huán)結(jié)構程序設計while 語句while語句用于“當滿足某一條件時進行循環(huán)”的情況。while語句的語法格式:while 布爾表達式 do 語句;循環(huán)結(jié)束條件在進入循環(huán)體之前測試

34、,若最初的測試值為false,則根本不進入循環(huán)體, 也就是說while循環(huán)是是屬于當型循環(huán)。為了能使while重復能終止,循環(huán)體中一定要有影 響布爾表達式的操作,否則該循就是一個死循環(huán)。例:計算從0到某個數(shù)之間所有奇數(shù)的和。program jishu;var odds,limit,sum:integer;beginreadln(limit);sum:=0;odds:=1;while odds=limit dobeginsum:=sum+odds;odds:=odds+2end;writeln(sum:1)end.repeat 語句repeat 語句用于“重復執(zhí)行循環(huán)體,一直到指定的條件為真時為

35、止”。語法格式為: repeat語句 1;語句 n;until 布爾表達式;repeat重復基本上有和while重復一樣的描述循環(huán)計算的能力,但有一些不同:在 repeat語句的結(jié)構中,布爾表達式求值在計算操作之后,而while語句中,布爾表達式求 值在計算操作之前,也就是說repeat至少執(zhí)行一次循環(huán)體。while語句的成分語句只能是 一個語句。因此,當重復動作包含多個語句時,要用begin和end,使它變成一個復合語 句。而 repeat 語句的保留字 repeat 和 until 已經(jīng)起語句括號作用,可以包含多個語句而無 須begin和end。repeat語句中,當布爾表達式為true時

36、結(jié)束循環(huán),而while語句中,是 當表達式為 false 時才結(jié)束循環(huán)。當描述由計算操作后的情況確定重復是否繼續(xù)進行的計算 時,通常用 repeat 語句描述。for 語句for 語句用來描述已知重復次數(shù)的循環(huán)結(jié)構。 for 語句有兩種形式:for控制變量:=初值to終值do語句;for控制變量:=初值 down to 終值 do 語句;第一種形式的 for 語句是遞增循環(huán)。首先將初值賦給控制變量,接著判斷控制變量的 值是否小于或等于終值,若是,則執(zhí)行循環(huán)體,在執(zhí)行了循環(huán)體之后,自動將控制變量的值 該為它的后繼值,并重新判斷是否小于或等于終值。當控制變量的值大于終值時,退出for 循環(huán),執(zhí)行f

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

38、osum:=sum+i;writeln(sum);end.goto 語句goto語句是一種無條件轉(zhuǎn)向語句,它可以控制直接從程序的一條語句轉(zhuǎn)向另一條語句。 goto 語句的語法形式為:goto 標號;其中標號必須是不超過4位整數(shù)的正整數(shù)或標識符組成,但標號必須在說明語句中先予 以說明。goto語句會使程序出現(xiàn)一種稱為“亂面條”的結(jié)構,因此你最好還是不要去用。第六章 遞歸算法 將復雜的處理歸納為較簡單的處理,直到 最簡單的處理?;A為歸納,即通過觀察, 得到 3 個內(nèi)容:1、遞歸的形式;2、最基本式是否有解決的方案;3、遞歸終止的條件1、 某人寫了 n 封信和 n 個信封,如果所有的信都裝錯了信封

39、。求所有的信都裝錯信封 共有多少種不同情況。歸納法例子1有n個硬幣(n為偶數(shù))正面朝上排成一排,每次將 n-1 個硬幣翻成朝上為止。編程讓計算機把翻硬幣的最簡過程及翻幣次數(shù)打印出來(用*代 表正面,用 0 代表反面)?;拘问剑篋1=0;d2=1遞歸式: dn= (n-1)*( dn-1 + dn-2)program 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(n-2);end;end;beginrepeat write(n=);

40、readln(n);if n0;writeln(d=,d(n);readln;end.2、有一對雌雄兔子,假定兩個月便可以繁殖雌雄各一對兔子。問n各月后共有多少對 兔子?遞歸的三要素: 遞歸的形式: Tn= Tn-1+ Tn-2 基本: T1=1, T2=1結(jié)束條件: n 個月program rabbit;var n:integer;function fa(n:integer):integer;beginif n0;writeln(s=,s(n);readln;end.4、設有2n個運動員要進行網(wǎng)球比賽。現(xiàn)要設計一個滿足以下要求的比賽日程表:、每個選手必須與其他 n-1 個選手各賽一次;、每個

41、選手每天只能參賽一次;、循環(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(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,fal

42、se,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,true,q div 2); copy1(be+(q div 2),en,false,q div 2)end;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 di

43、v 2); copy1(be+(q div 2),en,false,q div 2)end;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 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:=

44、1 to n dobeginfor j:=1 to n dowrite(si,j, );writeln;end;end.思考題1、數(shù)學寶塔,從最頂上走到最底層,每次只能走到下一層的左邊或右邊的數(shù)字,求 出使所走到的所有數(shù)字之和為 60 1、746625677漢諾塔問題:77漢諾塔問題:小到大依次編號為 1、2、52依次命名為x,y,z。有z個直徑不同的圓盤,由7 設有三個塔座,7 設有三個塔座,n。開始時,它們?nèi)堪催f減的次序插在塔座上?,F(xiàn)要求按2、下列規(guī)則把n個圓盤按次序插放在z塔座上。(1)、每次只能移動一個圓盤;2)、圓盤可以從任一個塔座上移到另一個塔座上;3)、任何時刻都不能把一個較大

45、的圓盤壓在較小的圓盤上。第七章 回溯算法 搜索:全面訪問所有可能的情況,分為兩種:不考慮給定問題的特有性質(zhì),按事先頂 好的順序,依次運用規(guī)則,即盲目搜索的方法;另一種則考慮問題給定的特有性質(zhì),選用合 適的規(guī)則,提高搜索的效率,即啟發(fā)式的搜索。 回溯即是較簡單、較常用的搜索策略?;舅悸?若已有滿足約束條件的部分解,不妨設為(xl,x2,x3,xi), In,則添加x(i+l)屬于s(i+2),檢查(xl,x2,xi,x(i+l)是否滿足條件,滿足了就繼續(xù)添加x(i+2)、s(i+2),若所有的x(i+1)屬于s(i+1)都不能得到部分解,就去掉xi,回溯到 (xi,x2,x(i-1),添加那些

46、未考察過的x1屬于si,看其是否滿足約束條件,為此反復進行,直至得到解或證明無解。例 i 八皇后問題。 program eightqueens;varx:arrayi.8 of integer;b,c:array-7.i6 of boolean; i:integer;procedure print;var k:integer;beginfor k:=i to 8 do write(xk:4);writeln;end;procedure try(i:integer);var j:integer;beginfor j:=i to 8 doif aj and bi+j and ci-jthen be

47、ginxi:=j;aj:=false; bi+j:=false; ci-j:=false;if i8 then try(i+i)else print; aj:=true; bi+j:=true; ci-j:=true endend;beginfor i:=-7 to i6 dobeginai:=true; bi:=true;ci:=trueend;try(1);end.例2 跳馬問題。在 5*5 格的棋盤上,有一個國家象棋的馬,它可以朝8 個方向跳 但不允許出界或跳到已跳過的格子上,要求在跳遍整個棋盤后再條回出發(fā)點。 program jump;varh:array-1.7,-1.7 of in

48、teger;a,b:array1.8 of integer;j,num:integer;procedure print;var i,j:integer;beginnum:=num+1;if num=5 thenbeginfor i:=1 to 5 dobeginfor j:=1 to 5 do write(hi,j:4); writeln;end;writeln;end;end;procedure try(x,y,i:integer);var j,u,v:integer;beginfor j:=1 to 8 dobegin u:=x+aj; v:=y+bj;if hu,v=0 then beg

49、in hu,v:=i;if i=1)and(i=1)and(j=5) then hi,j:=0else hi,j:=1;a1:=2;b1:=1;a2:=1;b2:=2;a3:=-1;b3:=2;a4:=-2;b4:=1;a5:=-2;b5:=-1;a6:=-1;b6:=-2;a7:=1;b7:=-2;a8:=2;b8:=-1;num:=0;h1,1:=1;try(1,1,2);writeln(num=,num);end.思考題1、試編程找出下列字母方陣中所隱含的單詞fujian,單詞中字母的走向可以是圖的 編號為 18 的 8 個方向,要求打印的格式為:(x,y),a1,a2,a3,a4,a5

50、(其中(x,y)為首字母f所在的行、列坐標,a1,a2,a3,a4,a5為后續(xù)每個字母相對前一個 字母的代號。f u j u a n j i f i u n n u i j u f u a n j n a i a j f i u j n n i n f第八章 枚舉型和子界型類型定義類型定義的語法格式:type標識符 1=類型 1;標識符 1=類型 1;標識符n=類型n;枚舉類型 通過預定義列出所有值的標識符來定義一個有序集合,這些值的次序和枚舉類型說明中的標識符的次序識一致的。枚舉類型的形式:(標識符1,,標識符n)例如: type daystype=(sunday,monday,tuesda

51、y,wednesday,thursday,friday,saturday) 枚舉元素只能是標識符,而不能是數(shù)值常量或字符常量。例如以下的定義是錯誤的: type daystype=(sun,mon,tue,wed,thu,fri,sat)枚舉元素是標識符,不要把作為枚舉元素的標識符視作變量名,它不能被賦值。同一個 枚舉元素不能出現(xiàn)在兩個或兩個以上的枚舉類型定義中。例如以下的定義是錯誤的: type daytype1=(monday,tuesday);daytype2=(monday,wednesday); 可以將枚舉類型的定義和變量的定義結(jié)合在一起。例如: vara:(monday,tuesd

52、ay,sunday) 枚舉類型屬于順序類型。根據(jù)定義類型時各枚舉元素的排列順序確定它們的序列,序列號從 0 開始。例如:已經(jīng)定義 daystype ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday 但是枚舉類型中的第一個元素沒有前趨,最后一個元素沒有后繼。 Turbo Pascal 不允許直接讀寫枚舉值,所以枚舉值的輸出常用case語句間接的輸出。枚舉值的輸入,則要一 一判斷讀入字符是否是枚舉類型的標識符。若是才能賦給枚舉變量,否則就會出錯。 例如:枚舉值的輸出case day ofsunday:write(sunday);mond

53、ay:write(monday); tuesday:write(tuesday);wednesday:write(wednesday); thursday:write(thursday);friday:write(friday);saturday:write(saturday);end;子界類型 子界類型是由整型、字符型、枚舉型、布爾型的兩個常量指定該類型的值域區(qū)間。子界 類型的形式:常量常量兩個常量必須是同一種順序類型。例如:a., b,要求a=b例如:type a=1.3;b=a.d;一個子界類型繼承它的常量類型的運算符和標準函數(shù),常量類型相容的不同子界類型可 以混合運算,可以賦值??梢詫?/p>

54、子界類型的定義和變量的定義結(jié)合在一起。例如: vara:1. 9 例 按月、日、年順序讀入一日期,輸出該日期是這一年中的第幾天。program date;var year:0.2010;month,i:1.12;day:1.31;dayth:integer;beginread(month,day,year);dyath:=0;for i:=1 to month-1 docase i of1,3,5,7,8,10,12:dayth:=dayth+31;2:if (year mod 4=0)and(year mod 1000)or(year mod 400 =0)then dayth:=dayth

55、+29else dayth=:=dayth+28;4,6,9,11:dayth:=dayth+30;end;dayth:=dayth+day;writeln(dayth)end.類型相容和賦值相容1.類型相容性類型相容是對參加同一運算的兩個對象的類型要求。設有兩個變量,如果滿足下列條件 之一,就說這兩個變量的類型相容。兩個變量的類型相同兩個變量被同一類型說明。例如: var a,b:1.30;兩個變量的類型是同一類型標識符。例如: var a:1.30;b:1.30;兩個變量的類型是不同的類型標識符,但在類型定義中已經(jīng)說明兩個標識符相 同。例如: type date=1.100;range=d

56、ate;var m:data;n:range;一個變量的類型是另一個變量的子界。兩個變量的類型都是同一基類型的子界。兩個變量的類型是基類型相容的集合類型。兩個變量的類型是成分相同的串類型。賦值相容性賦值相容是對賦值操作的兩個對象的類型要求。設賦值語句“:二”左邊的變量類型為 T,右邊表達式的類型為E,若類型T和類型E滿足下列條件之一,則稱他們是賦值相容的。T和E是相同的類型,而且類型不是文件類型,也不是具有文件類成分的構造類型。T是實型,而E是整型或整型的子界。T和E是類型相容的順序類型,并且E的值不超出T所定義的值的范圍T和E是類型相容的集合類型,并且E的值不超出T所定義的值的范圍T 和 E

57、 是類型相容的串類型。當T和E是順序類型或都是集合類型時,不僅要求這兩個類型是相容的,而且要求E 的值不超出T所定義的值的范圍;否則將產(chǎn)生類型溢出,而這種錯誤只能在你運行程序時進 行檢查,因此你必須要避免不發(fā)生這種錯誤。第九章 數(shù)組及其應用數(shù)組的定義 數(shù)組是程序中最常用的結(jié)構數(shù)據(jù)類型,用來描述由固定數(shù)目的同一類型的元素組成的數(shù) 據(jù)結(jié)構。數(shù)組的每個元素和下標相關聯(lián),根據(jù)下標指示數(shù)組的元素。數(shù)組的存儲方式為按行 存儲,在編譯階段,計算機根據(jù)數(shù)組的類型說明,確定其存儲空間的大小。數(shù)組可以是任何 順序類型。數(shù)組的定義形式:array 下標類型1,下標類型n of元素類型 其中n稱為數(shù)組的維數(shù),每維的下

58、標類型必須是一個順序類型,通常為子界類型或枚舉 類型,其作用是指定數(shù)組下標的編制方式和下標取值范圍。例如:typecolor=(red,yellow,blue);samplel二array 1.10of int eger;有 10 個元素的一維數(shù)組sample2二arrayp1.5,1.5of real; 有 25 個元素的二維數(shù)組,依次按1, 1,1,5, 2,1,2,5,5,1,5,5數(shù)組的操作 當數(shù)組的元素類型為簡單類型時,其下標變量和簡單類型變量一樣使用。例如: a50:=50;a20:=a5;一個數(shù)組,下標的起始值和終止值是在類型定義中給定的,不能在程序執(zhí)行中再通過其 他途徑來改變,

59、所以數(shù)組元素的個數(shù)在程序運行期間是固定不變的。數(shù)組變量作為整體僅允 許同類型數(shù)組之間的賦值運算。例如:var x,y:array1.10of integer;x:=y例:讀入5個學生的學號和成績,計算他們的平均分,若比平均分高10分的等第為A,若 比平均分高小于10分的等地為B若低于平均分,則等第為C,輸出他們的成績和等第。program sample7d1(input,output);const n=5;typeno=array1.n of integer;s=array1.nof real;vari:integer;k:real;num:no;score:s;begink:=0;for i

60、:=1 to n dobeginreadln(numi,scorei);k:=k+scorei;end;k:=k/n;for i:=1 to n dobegin write(numi,scorei); if (scorei-k)=10 then writeln(A)else if(scorei-k)0) then writeln(B)else writeln(C);end;end.3、字符串為了使程序能夠處理文字信息,Turbo Pascal特別引入了字符串類型,其值表示一個 具有可變長度的字符序列。字符串類型定義形式為:strignn或者 string其中正整數(shù)n(l=n=255)表示構成字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論