企業(yè)培訓(xùn)_中學(xué)信息學(xué)奧林匹克競(jìng)賽培訓(xùn)教程_第1頁(yè)
企業(yè)培訓(xùn)_中學(xué)信息學(xué)奧林匹克競(jìng)賽培訓(xùn)教程_第2頁(yè)
企業(yè)培訓(xùn)_中學(xué)信息學(xué)奧林匹克競(jìng)賽培訓(xùn)教程_第3頁(yè)
企業(yè)培訓(xùn)_中學(xué)信息學(xué)奧林匹克競(jìng)賽培訓(xùn)教程_第4頁(yè)
企業(yè)培訓(xùn)_中學(xué)信息學(xué)奧林匹克競(jìng)賽培訓(xùn)教程_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

中學(xué)信息學(xué)奧林匹克競(jìng)賽培訓(xùn)教程Pascal語(yǔ)言和程序設(shè)計(jì)基礎(chǔ)(第一部分)第一部分 Pascal語(yǔ)言和程序設(shè)計(jì)基礎(chǔ)預(yù)備知識(shí)基本程序結(jié)構(gòu)和幾個(gè)概念::標(biāo)識(shí)符 保留字 常量 變量 運(yùn)算符 表達(dá)式 標(biāo)準(zhǔn)數(shù)據(jù)類型Pacal語(yǔ)言程序結(jié)構(gòu)Program prog_name;var 變量申明;begin 程序體;end.例如:program pname;const n=4;type arr=array 1.4 of integer;var i:integer; a:arr;beginfor i:=1 to n do read(ai);readln;for i:=n downto 1 do write(ai:4);writeln;end.以上是一個(gè)PASCAL程序。從鍵盤讀入4個(gè)數(shù)據(jù),逆序輸出。一般來(lái)說(shuō),一個(gè)PASCAL程序包括以下幾個(gè)部分:程序頭:program pname; 其中,program是保留字,表示程序從這個(gè)地方開始,pname是標(biāo)識(shí)符,是程序的名字,可由程序員自定。保留字是PASCAL選定的,具有固定意義和用法的專用單詞或縮寫,這些單詞不允許作其它使用。如上,“program”就有“程序從這里開始”這樣一種特別的意義,而“const”就有“常量說(shuō)明從這里開始”的意義。我們不能再用“program”、“const”來(lái)作為其它變量、常量等的名字。標(biāo)識(shí)符是以字母開頭的字母數(shù)字串,其長(zhǎng)度最大為8個(gè)字符。用來(lái)表示常量、變量、類型、文件、過(guò)程、函數(shù)和程序的名字。如“pname”、“i”、“j”、“a1”就是合法的標(biāo)識(shí)符;但“1a”、“#a”是非法的標(biāo)識(shí)符。有一點(diǎn)要注意的是,在PASCAL中,字母除了作為字符值或字符串值之外,其大小寫是無(wú)關(guān)的。如標(biāo)識(shí)符“A1”和“a1”在PASCLA看來(lái)是同一標(biāo)識(shí)符。在PASCAL中除了保留字和自定義的標(biāo)識(shí)符外,還有一類有特殊含義的標(biāo)識(shí)符,這類標(biāo)識(shí)符稱為標(biāo)準(zhǔn)標(biāo)識(shí)符。它們是用來(lái)標(biāo)記程序中經(jīng)常引用的處理對(duì)象,如常量、函數(shù)。(PASCAL定義的保留字和標(biāo)準(zhǔn)標(biāo)識(shí)符附后) 標(biāo)識(shí)符在命名的時(shí)候要注意:1、名字要易記易讀,有意義。如8皇后問(wèn)題程序名可以是“queen”也可以是“huanghou”等;2、不能用保留字、標(biāo)準(zhǔn)標(biāo)識(shí)符作為自定義的標(biāo)識(shí)符。說(shuō)明部分:const n=4;type ar=array 1.4 of integer;var i:integer; a:ar;其中,const部分是常量說(shuō)明,說(shuō)明一些在以下部分用到的,在整個(gè)程序執(zhí)行過(guò)程不改變值的量。這些量PASCAL稱為常量。在程序中用到這個(gè)值的地方均用常量名來(lái)代替。如上題中定義“n=4”指本程序處理4個(gè)數(shù)值,在下面的程序體中就用“n”來(lái)代替具體的值(如for i:=1 to n)。如果要改變處理數(shù)據(jù)個(gè)數(shù),則只在常量說(shuō)明部分修改“n=4”這一句就行了,而不用在程序中每一個(gè)用到的地方都加以修改。這樣不但在編寫程序的時(shí)候很方便,也增加了程序的可讀性,修改時(shí)更方便。常量說(shuō)明在保留字“const”下開始??梢杂卸鄠€(gè)語(yǔ)句。常量說(shuō)明語(yǔ)句的格式是:“常量名=值;”。如“n=4;”。n是常量名,4是該常量的值,“;”是語(yǔ)句分隔符。type部分是類型說(shuō)明,說(shuō)明一些在以下部分用到的數(shù)據(jù)類型。如數(shù)組、記錄、指針等。類型說(shuō)明在保留字“type”下開始??梢杂卸鄠€(gè)語(yǔ)句。類型說(shuō)明語(yǔ)句的格式是:“類型名=類型說(shuō)明;”。如“ar=array 1.4 of integer;”。ar是類型名,array 1.4 of integer是類型說(shuō)明,“;”是語(yǔ)句分隔符。var部分是變量說(shuō)明。變量是指在程序執(zhí)行過(guò)程中可以通過(guò)賦值語(yǔ)句或讀語(yǔ)句來(lái)改變值的量。所有在程序中使用的變量都應(yīng)該先在變量說(shuō)明部分說(shuō)明。PASCAL中引用的每個(gè)變量都有“名字”和“類型”屬性。變量說(shuō)明“說(shuō)明”的主要工作是告訴PASCA下面程序中要用到這個(gè)名字的量,同時(shí)這個(gè)量的類型是什么。變量說(shuō)明在保留字“var”下開始。可以有多個(gè)語(yǔ)句。變量說(shuō)明語(yǔ)句的格式是:“變量名:變量類型;”。其中,如果有多個(gè)變量同一類型,則變量名與變量名之間用逗號(hào)分隔,變量名與變量類型之間用冒號(hào)分隔。如“i:integer;”(i是變量名,integer是類型名)、“i、j:integer;”(i、j是變量名,integer是類型名)變量說(shuō)明要注意:1、有效變量名稱不能大于8個(gè)字符;2、變量名稱必須以字母開頭;3、在同一個(gè)有效范圍內(nèi)變量名稱必須唯一。各個(gè)說(shuō)明部分均以該部分的保留字開始。如“const”開始常量說(shuō)明;“type”開始類型說(shuō)明;“var”開始變量說(shuō)明。一個(gè)程序包含多少種類型的說(shuō)明,看需要而定,不是每一個(gè)程序都必須同時(shí)包含這三種說(shuō)明。如果程序不須要用到常量,則常量說(shuō)明部分可以省略;如果不須要用到類型說(shuō)明,則類型說(shuō)明可省 PASCAL還有一條規(guī)則:先說(shuō)明后引用。即所有在程序體中用到的“名字”必須都在說(shuō)明部分說(shuō)明過(guò)才能引用,否則就會(huì)出錯(cuò),通不過(guò)編譯,也執(zhí)行不了。如上,類型“ar”先在類型說(shuō)明中定義,然后在變量說(shuō)明中引用;變量i在變量說(shuō)明中定義,在程序中引用。 程序體:beginfor i:=1 to n do read(ai);readln;for i:=n downto 1 do write(ai:4);writeln;end.程序體是以begin end.括起來(lái)的語(yǔ)句系列。“end”后面是一個(gè)小圓點(diǎn),標(biāo)識(shí)著程序結(jié)束,整個(gè)程序只有一個(gè)是一個(gè)程序的主要部分。編程要完成的工作大部分都在這里完成。程序體中每一語(yǔ)句均以“;”作為結(jié)束符。在書寫程序時(shí),以“分層縮進(jìn)”的風(fēng)格來(lái)寫,以便提高程序的可讀性。所謂的“分層縮進(jìn)”是指在邏輯上同一級(jí)的語(yǔ)句其起始點(diǎn)對(duì)齊,下一級(jí)的語(yǔ)句向右縮進(jìn)。運(yùn)算符 表達(dá)式PASCAL中的運(yùn)算符有算術(shù)運(yùn)算符和關(guān)系運(yùn)算符。和我們?cè)跀?shù)學(xué)課中學(xué)的基本一樣但在寫法上有些不同,在寫程序時(shí)要特別注意寫法的不同: + 加號(hào);- 減號(hào);* 乘號(hào)( 數(shù)學(xué)中寫為 );/ 除號(hào)( 數(shù)學(xué)中寫為 );MOD 取余 如:8 MOD 2=0,7 MOD 2=1,2 MOD 3=2;DIV 取整 如:8 DIV 2=4,7 DIV 2=3,2 DIV 3=0。在PASCAL只有上面6種數(shù)學(xué)運(yùn)算。其它的就只能利用這6種運(yùn)算的組合通過(guò)語(yǔ)句來(lái)實(shí)現(xiàn)。如a2(a的平方)可以化成a*a。大于;小于; 不等于(數(shù)學(xué)中寫為 );= 大于等于(數(shù)學(xué)中寫為 ),變量、常量通過(guò)運(yùn)算符連接起來(lái)的式子我們稱為表達(dá)式。一個(gè)單獨(dú)的變量或常量也是表達(dá)式。如a、a+3、a*3+b都是表達(dá)式。寫表達(dá)式時(shí)要注意PASCAL表達(dá)式跟我們已經(jīng)熟悉的數(shù)學(xué)表達(dá)式在格式上的區(qū)別:數(shù)學(xué)表達(dá)式PASCAL表達(dá)式注意2a2*a*號(hào)不能省略aba/b除號(hào)的寫法abab不等號(hào)的寫法aba = = := ( ) . , : $ (* *) 其中,有些符號(hào)是以雙字符作為一個(gè)整體,拆開后就失去原有的意義。如“”是一個(gè)表示“不等于”的關(guān)系運(yùn)算符,如拆開后就變成了兩個(gè)關(guān)系運(yùn)算符,分別表示“小于”、“大于”。PASCAL使用的保留字有: AND、ARRAY、BEGIN、CASE、CONST、DIV、DO、DOWNTO、ELSE、END、FILE、FOR、FUNCTION、GOTO、IF、IN、LABEL、MOD、NIL、NOT、OF、PACKED、PROCEDURE、PROGRAM、RECORD、REPEAT、SET、THEN、TO、TYPE、UNTIL、VAR、WHILE、WITH、FORWARD常用的標(biāo)準(zhǔn)標(biāo)識(shí)符有: 標(biāo)準(zhǔn)常量:FALSE TRUE MAXINT MAXLONGINT 標(biāo)準(zhǔn)類型:INTEGER BOOLEAN REAL CHAR TEXT 標(biāo)準(zhǔn)文件:INPUT OUTPUT 標(biāo)準(zhǔn)函數(shù):ABS ACTAN CHR COS EOF ELON EXP LN ODD ORD PRED ROUND SIN SQR SQRT SUCC TRUNC 標(biāo)準(zhǔn)過(guò)程:ASSIGN GET NEW DISPOSE PACK PUT READ READLN RESET REWRITE UNPACK WRITE WRITELN函數(shù)格式:function fun_name(參數(shù)表):數(shù)據(jù)類型;var 變量聲明;begin 函數(shù)體;end;例題:寫出計(jì)算兩個(gè)整數(shù)a,b的和函數(shù)add(a,b)。過(guò)程格式:procedure proc_name(參數(shù)表);var 變量聲明;begin 過(guò)程體;end;例題:寫出在屏幕打印一行文字:”hello,Pascal language is very easy!”函數(shù)和過(guò)程的調(diào)用:例題:從鍵盤輸入:a,b兩個(gè)數(shù),輸出由這兩個(gè)數(shù)為直角邊的三角形的面積?!緓oi00_01.pas】program xoi00_01;function area(const a,b:real):real;var s:real;begin s:=a*b/2.0; area:=s;end;procedure myproc;var a,b:real; s:real;begin write(Please input two number a,b:); readln(a,b); s:=area(a,b); writeln(the area of trian is: ,s:5:2);end;= main program =begin myproc;end.練習(xí):一、 判斷以下標(biāo)識(shí)符的合法性:a3 3a a17 abcd ex9.5 二、 將下列的數(shù)學(xué)表達(dá)式改寫成PASCAL表達(dá)式:b2-4ac 三、 求下列表達(dá)式的值:20 mod 19, 15 mod 9, 7 div 8 ,19 div 3,(45) and (79) or ( 910),2 and (3=3) or (37)第一節(jié) 順序結(jié)構(gòu)操作一操作二順序結(jié)構(gòu)是程序設(shè)計(jì)中最簡(jiǎn)單的結(jié)構(gòu),也是最基本的結(jié)構(gòu),它就是按照程序書寫的順序逐句執(zhí)行程序中的指令。流程圖如下:例題:計(jì)算圓的周長(zhǎng)的過(guò)程:輸入圓的半徑;(操作一)計(jì)算圓的周長(zhǎng);(操作二)輸出圓的周長(zhǎng);(操作三)基本的程序語(yǔ)句:賦值語(yǔ)句:賦值語(yǔ)句是最簡(jiǎn)單的語(yǔ)句,其一般形式為::=;“:=”稱為賦值號(hào),賦值語(yǔ)句的作用是計(jì)算表達(dá)式的值,并賦給變量。對(duì)于任何一個(gè)變量必須首先賦值,然后才能引用,否則,未賦初值的變量將以一個(gè)隨機(jī)值參與運(yùn)算。另外,賦值號(hào)兩邊的類型必須相同,但表達(dá)式值為整數(shù)時(shí),它可自動(dòng)化為實(shí)型后賦給該實(shí)型變量,即符合賦值相容。如:Pi:=3.14;R:=2;Age:=20;S:=Pi*R*R例:關(guān)于賦值的例子prssogram example;var a,b:integer;begina:=3;b:=2;a:=a+b;writeln(a);writeln(b);end.輸入語(yǔ)句通過(guò)計(jì)算機(jī)的外設(shè)把數(shù)據(jù)送到計(jì)算機(jī)內(nèi)存的過(guò)程稱為輸入。Turbo Pascal語(yǔ)言的輸入語(yǔ)句有如下兩種形式:read();readln();是一個(gè)或幾個(gè)由逗號(hào)隔開的變量標(biāo)識(shí)符,他們必須在程序說(shuō)明部分預(yù)先說(shuō)明,他們可以是整型、實(shí)型或字符型,布爾型不可以直接讀入。例如a,b,c為整型變量,read(a,b,c)之后,鍵盤輸入:20 30 40 (表示回車),結(jié)果:a=20,b=30,c=40readln語(yǔ)句和read語(yǔ)句不同之處在于輸入數(shù)據(jù)到各變量之后,readln自動(dòng)換行,從下一行開始再輸入數(shù)據(jù)。一個(gè)read語(yǔ)句執(zhí)行完后,數(shù)據(jù)行中多余的未讀數(shù)據(jù)可以被下一個(gè)輸入語(yǔ)句讀入;而一個(gè)readln于執(zhí)行完后,數(shù)據(jù)行中多余未讀數(shù)據(jù)就沒有用了。readln語(yǔ)句中可以不包含變量名表。即有以下等價(jià)情況:read(a,b);readln等價(jià)于readln(a,b)輸入語(yǔ)句輸入的數(shù)據(jù)類型必須和變量一一對(duì)應(yīng)。如果輸入的是一串整數(shù)或?qū)崝?shù),數(shù)據(jù)間用空格或回車分隔;若輸入的是一串字符,則不用分隔。輸出語(yǔ)句輸出是將內(nèi)存中的數(shù)據(jù)送到外設(shè)的過(guò)程。Turbo Pascal的輸出語(yǔ)句有兩種形式:write();writeln();其中是一串用逗號(hào)分隔的常量、變量、函數(shù)名、表達(dá)式或字符串。如果是變量、函數(shù)名、表達(dá)式,則將其計(jì)算結(jié)果輸出;如果是常量或字符串,則直接輸出其值。write和writeln的區(qū)別在于:write語(yǔ)句是輸出項(xiàng)輸出后,不換行,光標(biāo)停留在最后一項(xiàng)后,writeln語(yǔ)句按項(xiàng)輸出后,自動(dòng)換行,光標(biāo)則停留在下一行的開始位置。writeln語(yǔ)句允許不含有輸出項(xiàng),即僅writeln;表示換行。Turbo Pascal語(yǔ)言把輸出項(xiàng)的數(shù)據(jù)顯示占用的寬度稱為域?qū)?,你可以根?jù)輸出格式的要求在輸出語(yǔ)句中自動(dòng)定義每個(gè)輸出項(xiàng)的寬度。定義寬度時(shí)分為單域?qū)捄碗p域?qū)?。單域?qū)捿敵龈袷剑簑riteln(I:n);在n個(gè)字符寬的輸出域上按右對(duì)齊方式輸出I的值,若n大于I的實(shí)際位數(shù),則在I值前面補(bǔ)(n-I的實(shí)際位數(shù))個(gè)空格。若I的實(shí)際位數(shù)大于n,則自動(dòng)突破限制。n必須是整數(shù)。雙域?qū)捿敵龈袷剑簑riteln(a:n:m);雙域?qū)捴饕糜趯?shí)型數(shù)據(jù)的輸出。n的用法同上。在n個(gè)字符寬的輸出域上按右隊(duì)齊方式用小數(shù)點(diǎn)形式輸出a的數(shù)值,m是小數(shù)點(diǎn)后的位數(shù)。原來(lái)的數(shù)據(jù)按該該格式指定的小數(shù)位數(shù)四舍五入。若m=0 ,則不輸出小數(shù)部分和小數(shù)點(diǎn),原數(shù)據(jù)四舍五入取整。n,m必須是整數(shù)。 例:輸出語(yǔ)句的例子program shuchu;const s=pascal;var i: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. 復(fù)合語(yǔ)句復(fù)合語(yǔ)句是由若干語(yǔ)句組成的序列,語(yǔ)句之間用分號(hào)“;”隔開,并且以begin和end括起來(lái),作為一條語(yǔ)句。復(fù)合語(yǔ)句的一般形式:begin語(yǔ)句1;語(yǔ)句2;語(yǔ)句n;end;例:變量值的交換program swap;vara,b,t:integer;begin a:=10;b:=20;begint:=a;a:=b;b:=t;end;writeln(a=,a,b=,b)end. 例題1:輸入圓的半徑,求出圓的周長(zhǎng)和面積:Progam CalCircle;var R,C,S:Real;變量聲明beginwrite(輸入圓的半徑:);readln(R);C:=2*Pi*R;write(周長(zhǎng)=,C);readln;S:=Pi*sqr(R);sqr(R)=R*Rwrite(面積=,S);readln;end.例題2:找出下面程序中的語(yǔ)法錯(cuò)誤。Program Example1;計(jì)算圓環(huán)面積的程序,R2表示外圓環(huán)的半徑,R1表示內(nèi)圓環(huán)的半徑,R2R1var R1,R2:Real;begin S=(R2+R1)*(R2-R1)*Pi Pi=3.14為常數(shù) writeln(s)end;糾正以后的程序Program Example1;計(jì)算圓環(huán)面積的程序,R2表示外圓環(huán)的半徑,R1表示內(nèi)圓環(huán)的半徑,R2R1var R1,R2:real; S:real;每一個(gè)變量都必須聲明begin S=(R2+R1)*(R2-R1)*Pi; Pi=3.14為常數(shù) writeln(s); 語(yǔ)句必須以“;”結(jié)束end.主程序必須以“.”結(jié)尾練習(xí):編寫程序?qū)崿F(xiàn)以下功能:1、輸入三角形三邊的長(zhǎng),計(jì)算三角形的面積。計(jì)算公式:Pascal程序中計(jì)算平方根的函數(shù)為:sqrt(x);x:real; x0基本要求:有友好的輸入輸出界面,不需要考慮輸入的a,b,c是否可以構(gòu)成三角形,假設(shè)輸入的數(shù)據(jù)符合要求。第二節(jié) IF分支結(jié)構(gòu)例題: 輸入一個(gè)考試分?jǐn)?shù),如果大于等于60就說(shuō)恭喜你考試及格,如果小于60就說(shuō)真差勁,要努力哦!program JudgeScore;輸入分?jǐn)?shù)score;如果Score60那么 輸出“恭喜你考試及格”否則 輸出“真差勁,要努力哦”“如果.那么”形式的判斷在Pascal中使用If語(yǔ)句來(lái)實(shí)現(xiàn)。IF語(yǔ)句是由一個(gè)布爾表達(dá)式和兩個(gè)供選擇的操作序列組成。運(yùn)行時(shí)根據(jù)布爾表達(dá)式求值結(jié)果,選取其中之一的操作序列執(zhí)行。有兩種形式的IF語(yǔ)句:ifthen ;ifthen else ;當(dāng)布爾表達(dá)式的值為真,則執(zhí)行then后面的語(yǔ)句,值為假時(shí)有兩種情況:要么什么也不做,要么執(zhí)行else后面的語(yǔ)句。注意else前面沒有分號(hào),因?yàn)榉痔?hào)是兩個(gè)語(yǔ)句之間的分隔符,而else并非語(yǔ)句。如果在該處添了分號(hào),則在編譯的時(shí)候就會(huì)認(rèn)為if 語(yǔ)句到此結(jié)束,而把else當(dāng)作另一句的開頭,輸出出錯(cuò)信息。前面例題的Pascal程序代碼:Program JudgeScore;var score:real;聲明分?jǐn)?shù)變量scorebeginreadln(score); 輸入分?jǐn)?shù)if score=60 then begin score代表分?jǐn)?shù)的變量writeln(恭喜你,考試及格!);end else beginwriteln(真差勁,要努力哦!);end; end if score=60end.例:求y=f(x),當(dāng)x0時(shí),y=1,當(dāng)x=0時(shí),y=0,當(dāng)x0 then y:=1;if x=0 then y:=0;if x0時(shí)候,計(jì)算x*x,并且輸出x和x*x。program lianxi;var x,x1:real;beginreadln(x=,x);if x= then beginx1:=x*x;writeln(x*x=,x1);writeln(x=,x);end;end.當(dāng)if 語(yǔ)句嵌套時(shí),Turbo Pascal約定else總是和最近的一個(gè)if配對(duì)。前面介紹了If語(yǔ)句的使用情況,下面來(lái)概括if判斷語(yǔ)句的使用方法。分支結(jié)構(gòu)的基本情況:if 條件成立 then begin 處理;end;下一語(yǔ)句;if 條件成立 then begin操作B;end else if 條件不成立 then begin 操作A;end;下一語(yǔ)句;練習(xí):寫出下列關(guān)系表達(dá)式和邏輯表達(dá)式的Pascal語(yǔ)句:1、 區(qū)分合格和不合格:x = 602、 60分到70分之間: ( x = 60 ) and ( x =70 )3、判別閏年的條件(年份能被4整除,并且不能被100整除;或者能被400整除的整數(shù)年份):(y mod 4 = 0) and (y mod 100 0 ) or (y mod 400 = 0)編寫程序?qū)崿F(xiàn)下列功能:1、從鍵盤讀入一個(gè)數(shù),判斷它的正負(fù)。是正數(shù),則輸出+,是負(fù)數(shù),則輸出-2、輸入a,b,c三個(gè)不同的數(shù),將它們按由小到大的順序輸出3、鐵路托運(yùn)行李規(guī)定:行李重不超過(guò)50公斤的,托運(yùn)費(fèi)按每公斤0.15元計(jì)費(fèi);如超50公斤,超過(guò)部分每公斤加收0.10元。編一程序完成自動(dòng)計(jì)費(fèi)工作。4、打印某年某月有多少天。(提示:A、閏年的計(jì)算方法:年數(shù)能被4整除,并且不能被100整除;或者能被400整除的整數(shù)年份。B、利用MOD運(yùn)算可以判斷一個(gè)數(shù)能否被另一個(gè)數(shù)整除) 5、從鍵盤輸入3個(gè)數(shù)a,b,c輸出其中最大的數(shù)。第三節(jié) Case分支結(jié)構(gòu)case語(yǔ)句是由一個(gè)表達(dá)式和眾多可選擇的操作序列組成。運(yùn)行時(shí),根據(jù)表達(dá)式的求值結(jié)果,在眾多的分支中選取一個(gè)分支執(zhí)行。其形式為:case表達(dá)式of常量1:語(yǔ)句1;常量2:語(yǔ)句2;常量n:語(yǔ)句n;else語(yǔ)句 n+1; 可選項(xiàng)end;表達(dá)式只能是順序類型(除了實(shí)型以外的簡(jiǎn)單類型),其值必須是唯一確定并且和表達(dá)式類型相同。case語(yǔ)句執(zhí)行和表達(dá)式值相匹配的case常數(shù)所指向的那條語(yǔ)句,如果沒有相匹配的值,則執(zhí)行else部分(如果有的話)或者什么也不做。在else前面的語(yǔ)句末尾有分號(hào),這是和if語(yǔ)句不同的。Case表達(dá)式的應(yīng)用:例題:輸入一個(gè)考試分?jǐn)?shù)(整數(shù)),根據(jù)分?jǐn)?shù)情況報(bào)告相應(yīng)的信息。要求:假設(shè)輸入的分?jǐn)?shù)為0,100之間的整數(shù)。Program JudgeScore2;var x:real;begin read(x);輸入一個(gè)分?jǐn)?shù)case x of 0.59:writeln(不及格;60.89:writeln(及格);90.100;writeln(優(yōu)秀);elsewriteln(錯(cuò)誤的分?jǐn)?shù));end;case x ofend.例:根據(jù)學(xué)生的成績(jī)給予相應(yīng)的等級(jí),對(duì)應(yīng)關(guān)系如下:以下program 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:=A;8:ch:=B;7,6:=C;else ch:=D;end;writeln(s,-,ch);end.練習(xí):1、我們把字母作如下的分類:大寫字母:A.Z;小寫字母:a.z;數(shù)字:0.9;其他字母,編寫一個(gè)程序,根據(jù)上述分類的方法,輸入一個(gè)字母,報(bào)告該字母所屬的類型。2、某超市為了促銷,規(guī)定:購(gòu)物不足50元的按原價(jià)付款,超過(guò)50不足100的按九折付款,超過(guò)100元的,超過(guò)部分按八折付款。編一程序完成超市的自動(dòng)計(jì)費(fèi)的工作。 第四節(jié) for循環(huán)結(jié)構(gòu)程序設(shè)計(jì)時(shí)我們經(jīng)常要做一些重復(fù)的任務(wù)通過(guò)反復(fù)的執(zhí)行某一個(gè)動(dòng)作來(lái)完成任務(wù),編寫這一類程序我們使用循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn)。如計(jì)算1+2+3+.+100。Pascal中循環(huán)結(jié)構(gòu)通過(guò)使用For、While、Repeat三種語(yǔ)句來(lái)實(shí)現(xiàn)。For語(yǔ)句是形式最簡(jiǎn)單的循環(huán)語(yǔ)句。例題1:輸入正整數(shù)N,計(jì)算分析:1+2+3+N,因此我們必需重復(fù)的執(zhí)行S:=S+i,其中S代表和,S=1i=1S=1+2i=2S=1+2+3i=3S=1+2+3+4i=4.S=1+2+3+4+Ni=Ni從1變化到N,計(jì)算前I項(xiàng)的和:1+2+3+I,寫成Pascal代碼如下:For i:=1 to N DO S:=S+i;i從1變化到N重復(fù)執(zhí)行S:=S+i完整的程序如下:Program Example1_4Var N,I,S:integer;Begin Write(輸入正整數(shù)N:);Readln(N); S:=0; For I:=0 to n do S:=S+I; Writeln(1+2+3+,n,=,s);End.FOR 循環(huán)有兩種形式:升序形式:for := to do 降序形式:for := downto do for語(yǔ)句功能描述:雖然for循環(huán)形式簡(jiǎn)單,但是執(zhí)行的機(jī)制卻很復(fù)雜。其基本過(guò)程如下:1. 計(jì)算初值并記憶2. 判斷初值是否超出終值、如果超過(guò)則執(zhí)行步驟7,否則執(zhí)行步驟33. 把初值賦給控制變量4. 執(zhí)行do后面的語(yǔ)句(循環(huán)體)5. 判斷控制變量的值 是否達(dá)道終值,如果是則執(zhí)行步驟6,否則執(zhí)行步驟76. 控制變量取下一個(gè)值(升序取后繼,降序取前驅(qū))7. (循環(huán)結(jié)束)執(zhí)行下一語(yǔ)句.例題:編寫程序輸出序號(hào)從32到126的ASCII字符與對(duì)應(yīng)代碼之間的對(duì)應(yīng)關(guān)系。每行輸出5個(gè)字符,輸出結(jié)果如下如所示。(Example4_2)program example4_2;var i, j: byte;begin for i := 32 to 126 do begin if (j mod 5 = 0) then writeln; write(i: 5, chr(i): 2); j := j + 1;end;end. 程序說(shuō)明:標(biāo)準(zhǔn)函數(shù)chr(i)可以得到代碼為i的字符。j mod 5 求 j模5的余數(shù)。語(yǔ)句if (j mod 5 = 0) then writeln;用于控制換行,每行寫5個(gè)字符的對(duì)應(yīng)關(guān)系。語(yǔ)句write(i: 5, chr(i): 2);用于格式化輸出結(jié)果。編程完成下列計(jì)算:1、2、3、 把數(shù)碼1,2,3,4,9分成3組,每組構(gòu)成一個(gè)3位數(shù),使這3個(gè)3位數(shù)恰好成1:2:3,該怎樣分?求出所有的解答來(lái)。(如:192,384,576就是一組解答)4、 求出所有的三位數(shù),它除以11所得余數(shù)等于它的三個(gè)數(shù)字的平方和。第五節(jié) while、repeat循環(huán)結(jié)構(gòu)While語(yǔ)句是另外一種實(shí)現(xiàn)循環(huán)的語(yǔ)句,一般形式如下:While do While循環(huán)的執(zhí)行過(guò)程如下:1. 判斷條件是否成立,條件成立時(shí)執(zhí)行步驟2,否則執(zhí)行步驟42. 執(zhí)行do后面的語(yǔ)句(循環(huán)體)3. 返回步驟14. 結(jié)束循環(huán),執(zhí)行下一語(yǔ)句注意:一定要有使條件取假(False)的時(shí)候,否則會(huì)出現(xiàn)死循環(huán)。例題:從鍵盤輸入一批學(xué)生考試數(shù)據(jù),統(tǒng)計(jì)這些數(shù)據(jù)中大于80的數(shù)的個(gè)數(shù)。分析:因?yàn)閷W(xué)生的人數(shù)沒有確定,因此不方便用for循環(huán)來(lái)完成此項(xiàng)工作,但是用while循環(huán)比較容易實(shí)現(xiàn)。(example4_3)while score=0 do 輸入一個(gè)學(xué)生成績(jī)score;計(jì)算總分;Pascal代碼: while score = 0 do begin readln(score); total := total + score; end;完整的程序代碼:program example4_3;var score: integer; total: integer; c: char;begin writeln(輸入學(xué)生分?jǐn)?shù):); readln(score); total:=0; while score = 0 do begin readln(score); total := total + score; end; writeln(總分為:,total); read(c);end.Repeat語(yǔ)句與while語(yǔ)句基本類類似,只是while先判斷條件,reapeat語(yǔ)句先執(zhí)行循環(huán)體然后再判斷。Repeat ;循環(huán)體部分Until ;循環(huán)結(jié)束條件執(zhí)行過(guò)程如下:1. 執(zhí)行循環(huán)體2. 判斷條件,如果布滿足重復(fù)1,否則 執(zhí)行步驟33. 結(jié)束循環(huán),執(zhí)行下一語(yǔ)句例題:改寫Example4_3程序使用Repeat循環(huán)語(yǔ)句實(shí)現(xiàn)。(Example4_4)program example4_4;var score: integer; total: integer; c: char;begin writeln(輸入學(xué)生分?jǐn)?shù):); total := 0; repeat readln(score); total := total + score; until score 0; writeln(總分為:, total); read(c);end.練習(xí):1、 計(jì)算下列式子的值:(1) 1+3+5+99(2) 1+2+4+8+128+256+512+1024(3) 1+(1+2)+(1+2+3)+(1+2+3+4+N)2、 有一分?jǐn)?shù)序列:求出這個(gè)數(shù)列的前20項(xiàng)的和。3、 求水仙花數(shù)。所謂水仙花數(shù),是指一個(gè)三位數(shù),如果滿足,則abc是水仙花數(shù)。4、 輸入一個(gè)整數(shù),計(jì)算它各位上數(shù)字的和。(注意:是任意位的整數(shù))5、 輸入一整數(shù)A,判斷它是否質(zhì)數(shù)。(提示:若從2到A的平方根的范圍內(nèi),沒有一個(gè)數(shù)能整除A,則A是質(zhì)數(shù)。)6、 求兩個(gè)數(shù)的最小公倍數(shù)和最大公約數(shù)。(提示:公約數(shù)一定小于等于兩數(shù)中的小數(shù),且能整除兩數(shù)中的大數(shù)。公倍數(shù)一定大于等于兩數(shù)中的大數(shù),且是大數(shù)的倍數(shù),又能給兩數(shù)中的小數(shù)整除。)7、 編寫一個(gè)譯碼程序,把一個(gè)英語(yǔ)句子譯成數(shù)字代碼。譯碼規(guī)則是以數(shù)字1代替字母A,數(shù)字2代替字母B,26代替字母Z,如遇空格則打印一個(gè)星號(hào)*,英文句子以.結(jié)束。8、 “百錢買百雞”是我國(guó)古代的著名數(shù)學(xué)題。題目這樣描述:3文錢可以買1只公雞,2文錢可以買一只母雞,1文錢可以買3只小雞。用100文錢買100只雞,那么各有公雞、母雞、小雞多少只?與之相似,有雞兔同籠問(wèn)題。9、 輸入一個(gè)正整數(shù)N,把它分解成質(zhì)因子相乘的形式。如:36=12233; 19=119(提示:設(shè)因子為I,從2開始到N,讓N重復(fù)被I除,如果能整除,則用商取代N,I為一個(gè)因子;如果不能整除,再將I增大,繼續(xù)以上操作,直到I等于N。)10、 編程實(shí)現(xiàn):求之值,其中a是一個(gè)數(shù)字。例如:(當(dāng)n=5時(shí)),n由鍵盤輸入。11、 一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如:6的因子為1、2、3,而6123,因此6是“完數(shù)”。編程序找出1000以內(nèi)的所有完數(shù)。12、 編一程序,輸入a,b,c,d,e,f,然后解出方程組的解。第六節(jié) 數(shù)據(jù)類型簡(jiǎn)單數(shù)據(jù)類型Pascal語(yǔ)言基本數(shù)據(jù)類型由:integer(longint,shortint,byte),real,char,Boolean.等構(gòu)成。自定義數(shù)據(jù)類型:我們可以 在基本數(shù)據(jù)類型的基礎(chǔ)上定義新的數(shù)據(jù)類型,類型定義的保留字為“Type”,格式為:TYPE =如:Type MyLong=Longint;枚舉類型: “枚舉”的意思就是把所需要的對(duì)象都一個(gè)一個(gè)的列舉出來(lái)。比方說(shuō)星期是一個(gè)只有7個(gè)元素的數(shù)據(jù),因此我們可以定義一種數(shù)據(jù)類型TWeekDay代表星期,如果一個(gè)變量定義為TWeekDay類型,那么他的取值范圍就是Sunday.Saturday,另外顏色TColor也一樣。習(xí)慣上我們?cè)?自定義類型名稱前加上“T”,如TColor,TWeekDay,而且單詞以大寫字母開始。Type TWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday); TColor=(Red,Yellow,Blue,Green.Purple,White,Black);枚舉變量的第一個(gè)代表0,第二個(gè) 代表1,以此類推,如上面定義的TweekDay類型,Sunday=0,Monday=1,Saturday=6。例題:輸入今天的日期數(shù)字:0Sunday,1Monday,6Saturday,輸出明天的日期,用英文單詞表示。【xoi00_02.pas】program xoi00_02;Type TWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);var today,tomorrow:TWeekDay; number,i:integer;begin write(Enter today number:);readln(number); if (number6) then writeln(Error number) else begin today:=Sunday; for i:=0 to number-1 do today:=succ(today); if today=Saturday then tomorrow:=Saturday else tomorrow:=succ(today); write(Tomorrow is:); case tomorrow of Sunday:writeln(Sunday); Monday:writeln(Monday); Thursday:writeln(Thusday); Wednesday:writeln(Wednesday); Thursday:writeln(Thursday); Friday:writeln(Friday); Saturday:writeln(Saturday); end;if today=saturday then end;if (number6)end.子界類型:子界類型是在其它的離散類型的值域中取出一部分構(gòu)成獨(dú)立的類型。子界類型的一般定義形式如下:TYPE =.;如: TYPE Tmonth=1.12;TYPE Tscore=0.100;例按月、日、年順序讀入一日期,輸出該日期是這一年中的第幾天。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+29else dayth=:=dayth+28;4,6,9,11:dayth:=dayth+30;end;dayth:=dayth+day;writeln(dayth)end.數(shù)組類型:定義數(shù)組:Type 數(shù)組類型標(biāo)識(shí)符=Array下標(biāo)類型 OF 數(shù)組元素類型數(shù)組元素類型本身也可以是復(fù)雜的自定義類型,如子界類型,數(shù)組類型,記錄等。例如:定義存放學(xué)生姓名的字符數(shù)組:TYPE TName=Array1.20 of Char;定義一個(gè)存放班級(jí)學(xué)生(50人)名單的數(shù)組:TYPE TStudents=Array1.50 of TName也可以這么定義:TYPE TStudents=Array1.50 of Array1.20 of Char;例1:輸入5個(gè)考分?jǐn)?shù),計(jì)算它們的總分?!緓oi00_03.pas】program xoi00_03;Type TScore=Array1.5 of integer;var score:TScore; i:integer;sum:integer;begin for i:=1 to 5 do begin write(Enter Number #,i); readln(scorei); end; sum:=0; for i:=1 to 5 do begin sum:=sum+scorei; end; writeln(Total Score is:,sum);end.例2:從鍵盤輸入10個(gè)數(shù),將這10個(gè)數(shù)逆序輸入,并求這10個(gè)數(shù)的和,輸出這個(gè)和。program p1;var a: array1.10 of integer; i, s: integer;begin for i := 1 to 10 do read(ai); for i := 10 downto 1 do write(ai, ); writeln; s := 0; for i := 1 to 10 do s := s + ai; writeln(s=, s);end.例3:用篩法求100以內(nèi)的素?cái)?shù)(質(zhì)數(shù))。分析:素?cái)?shù)是除了1和它本身以外沒有其它約數(shù)的數(shù)。用篩法求素?cái)?shù)的方法是:用質(zhì)數(shù)篩去合數(shù):從第一個(gè)素?cái)?shù)2開始,把它的倍數(shù)去掉;這樣2以后的第一個(gè)非0數(shù)就一定也是素?cái)?shù),把它的倍數(shù)也刪了重復(fù)這個(gè)刪數(shù)過(guò)程,直到在所找到的素?cái)?shù)后再也找不到一個(gè)非0數(shù)。把所有非0數(shù)輸出。program p2;var a: array1.100 of integer; i, j, k: integer;begin for i := 1 to 100 do ai := i; a1 := 0; i := 2; while i = 100 do begin k := i; while k = 100 do begin k := k + i; ak := 0; end; -上面將所有ai的倍數(shù)清0 i := i + 1; while ai = 0 do i := i + 1; -查找接下來(lái)的第一個(gè)非0數(shù) end; for i := 1 to 100 do if ai 0 then write(ai, );end. 字符串類型:如果數(shù)組存放的是字符,則成為字符數(shù)組。例如前面提到的學(xué)生姓名:Tname可以存放20個(gè)字符。為了操作方便Turbo Pascal 提供了字符串類型和操作函數(shù)。字符串類型:String。例如前面

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論