信息學(xué)奧賽Pascal教程_第1頁(yè)
信息學(xué)奧賽Pascal教程_第2頁(yè)
信息學(xué)奧賽Pascal教程_第3頁(yè)
信息學(xué)奧賽Pascal教程_第4頁(yè)
信息學(xué)奧賽Pascal教程_第5頁(yè)
已閱讀5頁(yè),還剩88頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

信息學(xué)奧賽Pascal教程:第一課初識(shí)Pascal語(yǔ)言

信息學(xué)奧林匹克競(jìng)賽是一項(xiàng)益智性的競(jìng)賽活動(dòng),核心是考查選手的智力和使用計(jì)算機(jī)解題的能力。選手首先應(yīng)針對(duì)競(jìng)

賽中題目的要求構(gòu)建數(shù)學(xué)模型,進(jìn)而構(gòu)造出計(jì)算機(jī)可以接受的算法,之后要寫(xiě)出高級(jí)語(yǔ)言程序,上機(jī)調(diào)試通過(guò)。程序

設(shè)計(jì)是信息學(xué)奧林匹克競(jìng)賽的基本功,在青少年朋友參與競(jìng)賽活動(dòng)的第一步必須掌握一門(mén)高級(jí)語(yǔ)言及其程序設(shè)計(jì)方法。

一、Pascal語(yǔ)言概述

PASCAL語(yǔ)言也是一種算法語(yǔ)言,它是瑞士蘇黎世聯(lián)邦工業(yè)大學(xué)的N.沃思(NiklausWirth)教授于1968年設(shè)計(jì)完成的,

1971年正式發(fā)表。1975年,對(duì)PASCAL語(yǔ)言進(jìn)行了修改,作為“標(biāo)準(zhǔn)PASCAL語(yǔ)言”。

PASCAL語(yǔ)言是在ALGOL60的基礎(chǔ)上發(fā)展而成的。它是一種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,可以用來(lái)編寫(xiě)應(yīng)用程序。它又

是一種系統(tǒng)程序設(shè)計(jì)語(yǔ)言,可以用來(lái)編寫(xiě)順序型的系統(tǒng)軟件(如編譯程序)。它的功能強(qiáng)、編譯程序簡(jiǎn)單,是70年代

影響最大一種算法語(yǔ)言。

二、Pascal語(yǔ)言的特點(diǎn)

從使用者的角度來(lái)看,PASCAL語(yǔ)言有以下幾個(gè)主要的特點(diǎn):

L它是結(jié)構(gòu)化的語(yǔ)言。PASCAL語(yǔ)言提供了直接實(shí)現(xiàn)三種基本結(jié)構(gòu)(順序、分支、循環(huán))的語(yǔ)句以及定義“過(guò)程”和“函

數(shù)”(子程序)的功能??梢苑奖愕貢?shū)寫(xiě)出結(jié)構(gòu)化程序。在編寫(xiě)程序時(shí)可以完全不使用GOTO語(yǔ)句和標(biāo)號(hào)。這就易于保證

程序的正確性和易讀性。PASCAL語(yǔ)言強(qiáng)調(diào)的是可靠性、易于驗(yàn)證性、概念的清晰性和實(shí)現(xiàn)的簡(jiǎn)化。在結(jié)構(gòu)化這一點(diǎn)

上,比其它(如BASICFORTRAN77)更好一些。

2.有豐富的數(shù)據(jù)類(lèi)型。PASCAL提供了整數(shù)、實(shí)型、字符型、布爾型、枚舉型、子界型以及由以上類(lèi)型數(shù)據(jù)構(gòu)成的數(shù)

組類(lèi)型、集合類(lèi)型、記錄類(lèi)型和文件類(lèi)型。此外,還提供了其它許多語(yǔ)言中所沒(méi)有的指針類(lèi)型。沃思有一個(gè)著名的公

式:”算法+數(shù)據(jù)結(jié)構(gòu)=程序"。指出了在程序設(shè)計(jì)中研究數(shù)據(jù)的重要性。豐富的數(shù)據(jù)結(jié)構(gòu)和上述的結(jié)構(gòu)化性質(zhì),使得

PASCAL可以被方便地用來(lái)描述復(fù)雜的算法,得到質(zhì)量較高的程序。

3.能適用于數(shù)值運(yùn)算和非數(shù)值運(yùn)算領(lǐng)域。有些語(yǔ)言(如FORTRAN66,ALGOL60)只適用于數(shù)值計(jì)算,有些語(yǔ)言(如

COBOL)則適用于商業(yè)數(shù)據(jù)處理和管理領(lǐng)域。PASCAL的功能較強(qiáng),能廣泛應(yīng)用于各種領(lǐng)域。PASCAL語(yǔ)言還可以

用于輔助設(shè)計(jì),實(shí)現(xiàn)計(jì)算機(jī)繪圖功能。

4.PASCAL程序的書(shū)寫(xiě)格式比較自由。不象FORTRAN和COBOL那樣對(duì)程序的書(shū)寫(xiě)格式有嚴(yán)格的規(guī)定。PASCAL允

許一行寫(xiě)多個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以分寫(xiě)在多行上,也不區(qū)分大小寫(xiě),這樣就可以使PASCAL程序?qū)懙孟笤?shī)歌格式一樣

優(yōu)美,便于閱讀。

由于以上特點(diǎn),許多學(xué)校選PASCAL作為程序設(shè)計(jì)課程中的一種主要的語(yǔ)言。它能給學(xué)生嚴(yán)格而良好的程序設(shè)計(jì)的基

本訓(xùn)練。培養(yǎng)學(xué)生結(jié)構(gòu)化程序設(shè)計(jì)的風(fēng)格。但它也有一些不足之處,如它的文件處理功能較差等。

三、Pascal語(yǔ)言程序的基本結(jié)構(gòu)

任何程序設(shè)計(jì)語(yǔ)言都有著一組自己的記號(hào)和規(guī)則。PASCAL語(yǔ)言同樣必須采用其本身所規(guī)定的記號(hào)和規(guī)則來(lái)編寫(xiě)程序。

盡管不同版本的PASCAL語(yǔ)言所采用的記號(hào)的數(shù)量、形式不盡相同,但其基本成分一般都符合標(biāo)準(zhǔn)PASCAL的規(guī)定,

只是某些擴(kuò)展功能各不相同罷了。下面我們首先來(lái)了解Pascal語(yǔ)言的程序基本結(jié)構(gòu)。

為了明顯起見(jiàn)先舉一個(gè)最簡(jiǎn)單的PASCAL程序例子:【例1】

從這個(gè)簡(jiǎn)單的程序可以看到:

1.一個(gè)PASCAL程序分為兩個(gè)部分:程序首部和程序體(或稱(chēng)分程序)

2.程序首部是程序的開(kāi)頭部分,它包括:

⑴程序標(biāo)志。用“program”來(lái)標(biāo)識(shí)“這是一個(gè)PASCAL程序”。PASCAL規(guī)定任何一個(gè)PASCAL程序的首部都必須以此

字開(kāi)頭。在turbopascal語(yǔ)言中,首部也可省略。

⑵程序名稱(chēng)。由程序設(shè)計(jì)者自己定義(但受一些規(guī)則限制),如例中的examl。

注:在寫(xiě)完程序首部之后,應(yīng)有一個(gè)分號(hào)。

3.程序體是程序的主體,在有的書(shū)本里也稱(chēng)“分程序”。程序體包括說(shuō)明部分(也可省略)和執(zhí)行部分兩個(gè)部分。

⑴說(shuō)明部分用來(lái)描述程序中用到的變量、常量、類(lèi)型、過(guò)程與函數(shù)等。本程序中第二行是"變量說(shuō)明",用來(lái)定義變量

的名稱(chēng)、類(lèi)型。

PASCAL規(guī)定,凡程序中用到所有變量、符號(hào)常量、數(shù)組、標(biāo)號(hào)、過(guò)程與函數(shù)、記錄、文件等數(shù)據(jù)都必須在說(shuō)明部分

進(jìn)行定義(或稱(chēng)“說(shuō)明”)。也就是說(shuō),不允許使用未說(shuō)明先使用。

⑵執(zhí)行部分的作用是通知計(jì)算機(jī)執(zhí)行指定的操作。如果?個(gè)程序中不寫(xiě)執(zhí)行部分,在程序運(yùn)行時(shí)計(jì)算機(jī)什么工作也不

做。因此,執(zhí)行部分是?個(gè)PASCAL程序的核心部分。

執(zhí)行部分以“begin”開(kāi)始,以“end”結(jié)束,其間有若干個(gè)語(yǔ)句,語(yǔ)句之間以分號(hào)隔開(kāi)。

注:執(zhí)行部分之后有一個(gè)句點(diǎn),表示整個(gè)程序結(jié)束。

4.PASCAL程序的書(shū)寫(xiě)方法比較靈活。當(dāng)然,書(shū)寫(xiě)不應(yīng)以節(jié)省篇幅為目的,而應(yīng)以程序結(jié)構(gòu)清晰、易讀為目的。在編

寫(xiě)程序時(shí)盡量模仿本書(shū)中例題程序格式。

5.在程序中,一對(duì)大括號(hào)間的文字稱(chēng)為注釋。注釋的內(nèi)容由人們根據(jù)需要書(shū)寫(xiě),可以用英語(yǔ)或漢語(yǔ)表示。注釋可以放

在任何空格可以出現(xiàn)的位置。執(zhí)行程序時(shí)計(jì)算機(jī)對(duì)注釋不予理睬。

四、TurboPascal語(yǔ)言系統(tǒng)的使用(FreePascal與之類(lèi)似)

目前,常用的Pascal語(yǔ)言系統(tǒng)有TurboPascal7.0、BorlandPascal7.0,FreePascal1.0.10,下面我們就來(lái)學(xué)習(xí)TurboPascal

7.0系統(tǒng)的使用。

1.系統(tǒng)的啟動(dòng)(上面的這幾個(gè)版本都可在DOS、WINDOWS下使用)

方式-:只適合在WINDOWS下,在桌面上建立快捷方式,然后雙擊快捷方式即可

方式二:進(jìn)入相應(yīng)的系統(tǒng)目錄下,執(zhí)行主程序(TurboPascal的主程序?yàn)門(mén)URBO.EXE;FreePascal的主程序?yàn)镕P.EXE),

具體的操作步驟如下

進(jìn)入DOS命令行(這是在WIDOWS下要做的,WIN98及以前的版本是在“運(yùn)行”窗U中輸入COMMAND命令;

WINXP及以上版本是在“運(yùn)行”窗口中輸入CMD命令)

輸入以下命令行即可啟動(dòng)相應(yīng)的編譯集成環(huán)境:

cd\tp\bin{進(jìn)入主程序所在的文件夾,F(xiàn)reepascal是cd\pp\bin\go32V2}

turbo{Freepascal是fp)

系統(tǒng)啟動(dòng)后,屏幕匕出現(xiàn)如圖1所示的集成環(huán)境。

2.TurboPascal系統(tǒng)集成環(huán)境簡(jiǎn)介

最頂上一行為主菜單。中間藍(lán)色框內(nèi)為編輯窗口,在它個(gè)編輯窗口內(nèi)可以進(jìn)行程序的編輯。最底下一行為提示行,顯

示出系統(tǒng)中常用命令的快捷鍵,如:將當(dāng)前編輯窗口中文件存盤(pán)的命令快捷鍵為F2,獲得系統(tǒng)幫助的快捷鍵為F1,等

等。

3.新建程序窗口

按F10進(jìn)入主菜單,選擇FILE菜單,執(zhí)行其中New命令。就可建立一個(gè)新的程序窗口(默認(rèn)文件名為NonameOO.pas

或NonameOl.pas等)。

4.程序的輸入、編輯與運(yùn)行

在當(dāng)前程序窗口中,一行一行的輸入程序。事實(shí)上,程序窗口是一個(gè)全屏幕編輯器。所以對(duì)程序的編輯與其它編輯器

的編輯方法類(lèi)似,這里不再重復(fù)。

當(dāng)程序輸入完畢之后,一般要先按Alt+F9(或執(zhí)行compile菜單中compile命令)對(duì)程序進(jìn)行編譯。如果程序有語(yǔ)法錯(cuò)

誤,則會(huì)在程序窗口的第一行處顯示第?個(gè)紅色錯(cuò)誤信息。若無(wú)語(yǔ)法錯(cuò)誤,則窗口正中央會(huì)出現(xiàn)一個(gè)對(duì)話(huà)框,提示編

譯成功。接下來(lái),我們可以運(yùn)行程序了。

程序的運(yùn)行可以通過(guò)按ALT+R打開(kāi)RUN菜單中的RUN命令,或直接按快捷鍵CTRL+F9。則可以在用戶(hù)窗口中輸出

運(yùn)行結(jié)果。通常在程序運(yùn)行結(jié)束后系統(tǒng)回到Pascal系統(tǒng)的集成環(huán)境,因此要查看運(yùn)行結(jié)果,要按ALT+F5將屏幕切換

到用戶(hù)屏幕。

5.程序的保存與打開(kāi)

當(dāng)我們想把程序窗口中的程序存入磁盤(pán)時(shí),可以通過(guò)按F2鍵(或執(zhí)行File菜單中的save命令)來(lái)保存程序。第一次保存

文件時(shí)屏幕上會(huì)出現(xiàn)一個(gè)對(duì)話(huà)框要求輸入文件名(默認(rèn)擴(kuò)展名為.pas)。

當(dāng)我們要將磁盤(pán)上的程序文件中的PASCAL程序裝入窗口時(shí),可按F3(或執(zhí)行File菜單中的Open命令)來(lái)裝入程序,

此時(shí)系統(tǒng)也會(huì)彈出一個(gè)對(duì)話(huà)框要求輸入要打開(kāi)的文件名,或直接在文件對(duì)話(huà)框列表中選擇所要的文件,然后回到打開(kāi)

文件。

6.退出TurboPascal:直接按組合鍵ALT+X或選擇“File”菜單中的“Exit”

五、第一個(gè)程序

為讓大家了解程序設(shè)計(jì)的基本過(guò)程(編輯一編譯/解釋T連接T運(yùn)行),請(qǐng)大家輸入下面的程序并運(yùn)行,學(xué)會(huì)用自己

的描述它的功能是什么?

programsample;

var

i,n,number:integer;

begin

write('Number=');

readln(number);

fori:=ltonumberdo

begin

ifimod2=1then

begin

forn:=lto(number-i)div2dowrite,');

forn:=ltoidowrite,*');

writein;

end;

end;

readln

end.

請(qǐng)輸入上面的程序,將其存盤(pán)、關(guān)閉。然后再打開(kāi)并運(yùn)行序。(中途要在不退出Pascal的情況下進(jìn)入命令行狀態(tài)查看

程序的運(yùn)行結(jié)果,可以選擇“File”菜單中的“Commandshell”,TurboPascal為“Dosshell”,返回請(qǐng)輸入EXIT命令,不

分大小寫(xiě)。

作業(yè):模仿本課中出現(xiàn)的例程及學(xué)到的知識(shí),完成下列編程任務(wù)

1.提示用戶(hù)輸入圓的半徑,計(jì)算并輸出圓的周長(zhǎng)

2.提示用戶(hù)輸入兩個(gè)數(shù),計(jì)算并輸出這兩個(gè)數(shù)的和

信息學(xué)奧賽Pascal教程第二課賦值語(yǔ)句與輸出語(yǔ)句

上節(jié)課,我們學(xué)習(xí)了Pascal語(yǔ)言的程序基本結(jié)構(gòu),在一個(gè)程序中,所有的操作都由執(zhí)行部分來(lái)完成,而執(zhí)行部分又都

是由一個(gè)個(gè)語(yǔ)句組成的。因此,下面開(kāi)始我們要學(xué)習(xí)pascal語(yǔ)言的基本語(yǔ)句,并且在學(xué)習(xí)過(guò)程中逐步學(xué)會(huì)程序設(shè)計(jì)的

基本方法。

這節(jié)課我們要學(xué)習(xí)兩種語(yǔ)句,即賺值語(yǔ)句與輸出語(yǔ)句。在語(yǔ)句學(xué)習(xí)之前我們要先了解??些pascal語(yǔ)言的基礎(chǔ)知識(shí)。

一、常量、變量與算術(shù)表達(dá)式

(-)常量:在程序運(yùn)行過(guò)程中,其值不能被改變的量稱(chēng)為常量。如123,145.88,'abc',true等。

1、整型常量:整型常量采用我們平常使用的十進(jìn)制整數(shù)表示,包括正整數(shù)、負(fù)整數(shù)和零。如:138,0,-512等都是

整型常量,而18.或18.0都不是整型常量。pascal中有一個(gè)標(biāo)準(zhǔn)標(biāo)識(shí)符Maxint,它代表所使用的計(jì)算機(jī)系統(tǒng)允許的最

大整型數(shù),而最小的整型數(shù)即為一Maxint-1;TurboPascal還定義了長(zhǎng)整數(shù)常量MaxLonglnt,其值為2147483647。

注:計(jì)算機(jī)系統(tǒng)能表示的整型數(shù)的范圍取決于其字長(zhǎng),如:現(xiàn)在大部分機(jī)器的字長(zhǎng)字長(zhǎng)為16,它們所能支持的整型

數(shù)的范圍為+2與至一2巴1,即-32768至+32767,這里涉及到有符號(hào)數(shù)和補(bǔ)碼方面的知識(shí);要想知道你所使用的計(jì)算機(jī)所

能表示的整型數(shù)的范圍,用這樣的語(yǔ)句就可以知道了:WRITE(-maxint-l;\maxint)

2、實(shí)型常量:包括正實(shí)數(shù)、負(fù)實(shí)數(shù)和實(shí)數(shù)零,其實(shí)就是常說(shuō)的小數(shù),pascal中表示實(shí)型常量的形式有兩種。

⑴十進(jìn)制表示法:這是人們?nèi)粘J褂玫膸?shù)點(diǎn)的表示方法,如0.0、-0.0、+5.61、-8.0、-6.050等都是實(shí)型常量,而

0.、.37都不是合法的實(shí)數(shù)形式

⑵科學(xué)記數(shù)法:采用指數(shù)形式的表示方法,如1.25、1()5可表示成1.25£+05。在科學(xué)記數(shù)法中,字母"E”表示10這個(gè)"

底數(shù)",而E之前為一個(gè)十進(jìn)制表示的小數(shù),稱(chēng)為尾數(shù),E之后必須為一個(gè)整數(shù),稱(chēng)為"指數(shù)"。如-1234.56E+26、+0.268E-5、

1E5是合法形式,而.34E12、2.E5、E5、E、1.2E+0.5都不是合法形式的實(shí)數(shù)。

無(wú)論實(shí)數(shù)是用十進(jìn)制表示法還是科學(xué)表示法,它們?cè)谟?jì)算機(jī)內(nèi)的表示形式是一樣的,總是用浮點(diǎn)方式存儲(chǔ)。

和整數(shù)相比,實(shí)數(shù)能表示的范圍大得多,但值得注意的是實(shí)數(shù)的運(yùn)算比整數(shù)的運(yùn)算速度慢且無(wú)法像整數(shù)那樣精確表示,

只能近似表示。

3、字符常量:在Pascal語(yǔ)言中,字符常量是由單個(gè)字符組成,所有字符來(lái)自ASCII字符集,共有256個(gè)字符。在程

序中,通常用一對(duì)單引號(hào)將單個(gè)字符括起來(lái)表示一個(gè)字符常量,如:,a','A',。等;特殊地,對(duì)于單引號(hào)字符,則要表

示成口對(duì)于ASCII字符集中,按每個(gè)字符在字符集中的位置,將每個(gè)字符編號(hào)為0—255,編號(hào)稱(chēng)為對(duì)應(yīng)字符的序號(hào),

因此字符也存在大小,$11:'A'<'a\'b'>'a'

4、布爾常量:布爾型常量?jī)H有兩個(gè)值,真和假,分別用標(biāo)準(zhǔn)常量名true和false表示,它們的序號(hào)分別為1和0。

5、符號(hào)常量:它是由程序員自己定義的,-個(gè)常量即可以直接用字面形式表示(稱(chēng)為直接常量,如124,156.8),

也可以用一個(gè)標(biāo)識(shí)符來(lái)代表一個(gè)常量,稱(chēng)為"符號(hào)常量"。但符號(hào)常量必須在程序中的說(shuō)明部分定義,也就是說(shuō)先定義,

后使用。

定義符號(hào)常量的一般格式:CONST(常量標(biāo)識(shí)符>=<常量>;如:

CONSTPI=3.1415926;

E=2.71828;

說(shuō)明:常量說(shuō)明部分以關(guān)鍵字const開(kāi)頭,后面的標(biāo)識(shí)符為常量標(biāo)識(shí)符,其中”="號(hào)后的常量為整數(shù)、實(shí)數(shù)、字符、字符

串(字符串常量在后面章節(jié)中將作介紹);而且在常量說(shuō)明部分可以將幾個(gè)常量說(shuō)明成符號(hào)常量,共用一個(gè)關(guān)鍵字

"const",例如:

則在本程序中pi和zero作為符號(hào)常量,分別代表實(shí)數(shù)3.14159和整數(shù)0;也就是說(shuō),常量說(shuō)明部分既定義了常量名及

其值,又隱含定義了常量的類(lèi)型。

關(guān)于符號(hào)常量,應(yīng)注意下列兒點(diǎn):

⑴、符號(hào)常量一經(jīng)定義,在程序的執(zhí)行部分就只能使用該常量標(biāo)識(shí)符,而不能修改其值

⑵、使用符號(hào)常量比直接用數(shù)值更能體現(xiàn)"見(jiàn)名知義"的原則,也便于修改參數(shù),故一個(gè)較好的程序中,應(yīng)盡量使用符

號(hào)常量,在執(zhí)行部分基本上不出現(xiàn)直接常量。

(-)變量:變量代表了一個(gè)存儲(chǔ)單元,其中的值是可變的,故稱(chēng)為變量。如游戲"魂斗羅"中玩者命的個(gè)數(shù)最初

為3,當(dāng)你死了一次命減少一,這里命的個(gè)數(shù)就是一個(gè)變量(或者說(shuō)命的個(gè)數(shù)存儲(chǔ)在一個(gè)存儲(chǔ)單元中)。即在程序運(yùn)行

過(guò)程中,其值可以改變的量,稱(chēng)為變量。

變量有三個(gè)要素是:變量名、變量類(lèi)型、變量值

一個(gè)程序中可能要使用到若干個(gè)變量,為了區(qū)別不同的變量,必須給每個(gè)變量(存貯單元)取一個(gè)名(稱(chēng)為變量

名),該變量(存貯單元)存放的值稱(chēng)為變量的值,變量中能夠存放值的類(lèi)型為變量的類(lèi)型。例如“魂斗羅"游戲中用

于存放"命"的變量,在游戲程序中的名字可取為N,它的類(lèi)型為整型,游戲初始時(shí)這個(gè)變量的值為3

1.變量名:用一個(gè)合法的標(biāo)識(shí)符代表一個(gè)變量。如n,m,rot,total等都是合法變量名。在程序中用到的變量必須在說(shuō)明

部分加以說(shuō)明,變量名應(yīng)遵循自定義標(biāo)識(shí)符的命名規(guī)則,并注意“見(jiàn)名知義”的原則,即用一些有意義的單詞作為變量

“自定義標(biāo)識(shí)符”的命名規(guī)則為:自定義標(biāo)識(shí)符必須以字母(包含下劃線"二')開(kāi)頭,后面的字符可以是字母或數(shù)字,標(biāo)

識(shí)符長(zhǎng)度不超過(guò)63個(gè)字符

2.變量的類(lèi)型:常量是有類(lèi)型的數(shù)據(jù),變量在某一固定時(shí)刻用來(lái)存放一個(gè)常量,因此也應(yīng)有相應(yīng)的類(lèi)型;如整型變量

用來(lái)存放整數(shù),實(shí)型變量用來(lái)存放實(shí)數(shù);也就是說(shuō),變量的類(lèi)型取決于將要存放的數(shù)據(jù)的類(lèi)型,并且其類(lèi)型一旦定義

了,就不能再改變,也不能把其他類(lèi)型的數(shù)據(jù)賦給它

3.變量說(shuō)明:在程序中若要使用變量,變量的名稱(chēng)及類(lèi)型在程序的變量說(shuō)明部分加以定義,變量的值則在程序的執(zhí)行

部分中才能賦給,變量說(shuō)明的一般格式:VAR<變量標(biāo)識(shí)符>[,(變量標(biāo)識(shí)符>]:<類(lèi)型〉;(中括號(hào)內(nèi)部分表示可省,下

同)

其中VAR是pascal保留字,表示開(kāi)始一個(gè)變量說(shuō)明段,每個(gè)變量標(biāo)識(shí)符或由逗號(hào)隔開(kāi)的多個(gè)變量標(biāo)識(shí),必須在它的冒號(hào)

后面說(shuō)明成同一類(lèi)型。一個(gè)程序中,可以說(shuō)明許多不同類(lèi)型的變量,每種類(lèi)型變量之間用分號(hào)隔開(kāi),共用一個(gè)VAR符

號(hào)。例如:

var

age,day:integer;

amount,average:real;

其中:Integer(整型)、Real(實(shí)型)、Boolean(布爾型)、Char(字符型)是標(biāo)準(zhǔn)標(biāo)識(shí)符,它們是"類(lèi)型標(biāo)識(shí)符”,代表了確定的

類(lèi)型,如age和day被定義為整型變量,amount和average被定義為實(shí)型變量。

一旦定義了變量,就確定了它的類(lèi)型,也就是說(shuō),就確定了該變量的取值范圍和對(duì)該變量所能進(jìn)行的運(yùn)算。

(三)算術(shù)表達(dá)式

⑴算術(shù)表達(dá)式的定義:pascal語(yǔ)言中的算術(shù)表達(dá)式是由符合pascal語(yǔ)法規(guī)定的運(yùn)算對(duì)象(包括常量、變量、函數(shù))、算術(shù)

運(yùn)算符、圓括號(hào)組成的有意義的式子。如:A+3.14159*5/8.4-Abs(-1123)

⑵算術(shù)運(yùn)算符,常用的有以下6個(gè)算術(shù)運(yùn)算符:

①+(加)

②一(減)

③*(乘)

④/(實(shí)數(shù)除)得到結(jié)果為實(shí)型.如5.0/20=2.5,5/2=2.5,4/2=20而不等于2。

⑤DIV(整除)DIV它要求除數(shù)和被除數(shù)均為整型,結(jié)果也為整型。如10DIV2=5,10DIV3=3,5DIV10=0.-15DIV4=

-3,DIV運(yùn)算只取商的整數(shù)部分,參與DIV運(yùn)算的兩個(gè)對(duì)象不能為實(shí)型

⑥mod俅余),也只能用于整數(shù)運(yùn)算,結(jié)果為整數(shù)。例如:10mod4=2,-17mod4=-1,4mod(-3)=1,-4mod3=-1,即

amodb=a-(adivb)*b

(3)運(yùn)算優(yōu)先順序,如果一個(gè)表達(dá)式里出現(xiàn)兩個(gè)或兩個(gè)以上的運(yùn)算符,則必須規(guī)定它們的運(yùn)算次序,pascal規(guī)定

①表達(dá)式中相同優(yōu)先級(jí)的運(yùn)算符,按從左到右順序計(jì)算

②表達(dá)式中不同優(yōu)先級(jí)的運(yùn)算符,按從高到低順序計(jì)算

③括號(hào)優(yōu)先級(jí)最高,從內(nèi)到外逐層降低

在算術(shù)運(yùn)算中運(yùn)算符的優(yōu)先順序與數(shù)學(xué)上的四則運(yùn)算一致,即“先乘除后加減"(注:MOD、DIV運(yùn)算的優(yōu)先級(jí)與*、/

相同)

二、賦值語(yǔ)句

變量既然代表一個(gè)存儲(chǔ)單元,其值是可變的,那么其中的值是怎么提供的,又是怎么改變的呢?可以通過(guò)賦值語(yǔ)句來(lái)

進(jìn)行

1、賦值語(yǔ)句的格式

變量名:=表達(dá)式;

其中“:="稱(chēng)為賦值號(hào),是賦值語(yǔ)句的標(biāo)志

2、執(zhí)行過(guò)程:計(jì)算機(jī)先計(jì)算賦值號(hào)右邊表達(dá)式的值,然后將表達(dá)式的值賦給變量名代表的變量,如:

A:=(9*8)-(2-l);

A:=A+1;

最后A的值為72

三、輸出語(yǔ)句

輸出語(yǔ)句的作用是將程序運(yùn)算的結(jié)果輸出到屏幕或打印機(jī)等輸出設(shè)備,這里通常是指輸出到屏幕。

(一)輸出語(yǔ)句的兩種格式

1、write語(yǔ)句

格式:Write(表達(dá)式1,表達(dá)式2,……);

如:write。,2,3,4);

write(1.2,3.4,5);

write('MynameisLiping');

2,writein語(yǔ)句

格式:Writein(表達(dá)式1,表達(dá)式2,..........)或writein

(-)輸出語(yǔ)句的功能

計(jì)算機(jī)執(zhí)行到某一輸出語(yǔ)句時(shí),先計(jì)算出輸出語(yǔ)句中的每個(gè)表達(dá)式的值,并將每一個(gè)表達(dá)式的值一個(gè)接一個(gè)地輸出到

屏幕上。

Write語(yǔ)句與writein語(yǔ)句格式上都相似,但它們?cè)诠δ苌嫌兴煌?,兩個(gè)語(yǔ)句的區(qū)別在于,wrile語(yǔ)句將其后括號(hào)中的

表達(dá)式一個(gè)接一個(gè)輸出后,沒(méi)有換行;而writein語(yǔ)句則在輸出各個(gè)表達(dá)式的值后換行,例如以下兩個(gè)程序段的輸出分

別為:

write。,2,3,4);

write(5,6);

輸出為:

123456

writeln(1,2,3,4);write(5,6);

輸出為:

1234

56

四、應(yīng)用例析

例1:某倉(cāng)庫(kù)5月1日有糧食100噸,5月2日又調(diào)進(jìn)20噸,5月3日賣(mài)出庫(kù)存的3分之二,5月4日又調(diào)進(jìn)庫(kù)存的3

倍糧食,問(wèn)該倉(cāng)庫(kù)從5月1日到5月4日期間每天的糧食分別是多少?lài)崳?輸出每天的庫(kù)存量)

分析:在這個(gè)問(wèn)題中,主要要描述從5月1日到5月4日期間倉(cāng)庫(kù)的糧食庫(kù)存量,且易知它是不斷變化的。因此我們

可以用一個(gè)變量A來(lái)描述倉(cāng)庫(kù)的糧食庫(kù)存量

程序可寫(xiě)如下:

Programexl;

Var

A:integer;

Begin

A:=100;

Writeln('5/1:',A);

A:=A+20;

Writeln('5/2:',A);

A:=Adiv3;

writeln(,5/3:\A);

A:=A*4;

writeln('5/4:',A);

Readln;

End.

例2:有三個(gè)小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,丙有13粒糖果。現(xiàn)在他們做一個(gè)游戲。從甲開(kāi)始,將

自己的糖分三份,自己留一份,其余兩份分別給乙與丙,多余的糖果自己吃掉,然后乙與丙也依次這樣做。問(wèn)最后甲、

乙、丙三人各有書(shū)多少粒糖果?

分析:這個(gè)問(wèn)題中我們關(guān)心的是在游戲過(guò)程中每個(gè)小朋友的糖果個(gè)數(shù),且他們所擁有的的糖果數(shù)是在變化的。因此可

用a,b,c三個(gè)變量分別存放甲乙丙三個(gè)小朋友在某一時(shí)刻所擁有的糖果數(shù)。對(duì)于每人,分糖后,他的糖果數(shù)一定為原來(lái)

的糖果數(shù)div3(因?yàn)榉痔沁^(guò)程糖果的數(shù)目不一定都剛好分完,用整除恰恰可以表示多余的糖自己吃掉)。而其他兩人

則增加與這個(gè)小朋友現(xiàn)在擁有的一樣的糖果。

程序可寫(xiě)如下:

programex2;

var

A,B,C:integer;

begin

A:=50;B:=43;C:=13;{初始時(shí)每個(gè)小朋友所擁有的糖果數(shù)}

A:=Adiv3;B:=B+A;C:=C+A;{甲小朋友分糖果后,每個(gè)人擁有的糖果數(shù)變化情況}

B:=Bdiv3;A:=A+B;C:=C+B;{乙小朋友分糖果后,每個(gè)人擁有的糖果數(shù)變化情況}

C:=Cdiv3;A:=A+C;B:=B+C;{丙小朋友分糖果后,每個(gè)人擁有的糖果數(shù)變化情況}

writeln('A=',A,B=;B,C=',C);{輸出結(jié)果}

readln;

end.

注:上程序中倒數(shù)第三行中表示一個(gè)字符串(即用一對(duì)單引號(hào)括起來(lái)的一串字符),對(duì)于字符串,輸出字符串的內(nèi)

容(即引號(hào)內(nèi)的所得字符,而引號(hào)不輸出)。

以上程序的運(yùn)行結(jié)果為:

A=51B=35C=16

練習(xí)二:

1、已知某梯形的上底A=13,下底B=18,高H=9,求它的面積S。

2、已知某圓的半徑R=139,求該圓的周長(zhǎng)C與面積S?

3、某機(jī)關(guān)組織游泳比賽。將一堆西瓜分給前三名,把該堆西瓜中的一半又半個(gè)西瓜獎(jiǎng)給第一名;剩下的一半又半個(gè)西

瓜給第二名;把最后剩下的一半又半個(gè)西瓜給第三名,但每次分時(shí)并沒(méi)切開(kāi)任何一個(gè)西瓜,且剛好西瓜分完。問(wèn)前三

名各分到多少個(gè)西瓜?(答案:共7個(gè),第一、二、三名各4、2、1個(gè))

信息學(xué)奧賽Pascal教程第三課輸出語(yǔ)句及輸入語(yǔ)句

一、寫(xiě)語(yǔ)句(WRITE、WRITELN)的輸出格式

在pascal語(yǔ)言中輸出數(shù)據(jù)忖是可以按照一定格式的,對(duì)整數(shù)隱含的輸出形式為按十進(jìn)制數(shù)形式:對(duì)實(shí)數(shù)的輸出,隱含

的形式是科學(xué)記數(shù)法形式(如果不想用科學(xué)記數(shù)法輸出而用小數(shù)形式輸出,要自己另行定義)。

事實(shí)上,輸出語(yǔ)句中的每個(gè)輸出項(xiàng)中的表達(dá)式之后可以加上格式說(shuō)明,若輸出項(xiàng)后沒(méi)有加格式說(shuō)明,則數(shù)據(jù)按系統(tǒng)隱

含的格式輸出,還可加上一定格式符號(hào)按特定格式輸出。

1、隱含的輸出格式

pascal語(yǔ)言為整型量、實(shí)型量、布爾型量和字符串(用一對(duì)單引號(hào)括起來(lái)的字符序列)規(guī)定了每種數(shù)據(jù)所占的寬度(即

一個(gè)數(shù)據(jù)占兒列),?個(gè)數(shù)據(jù)所占的寬度稱(chēng)為“場(chǎng)寬”或"字段寬”;系統(tǒng)給出的隱含場(chǎng)寬稱(chēng)為標(biāo)準(zhǔn)場(chǎng)寬,每一種pascal

版本給定的標(biāo)準(zhǔn)場(chǎng)寬不盡相同,F(xiàn)表給出標(biāo)準(zhǔn)pascal、Turbopascal>FreePascal所規(guī)定的標(biāo)準(zhǔn)場(chǎng)寬

標(biāo)準(zhǔn)場(chǎng)寬

數(shù)據(jù)類(lèi)型標(biāo)準(zhǔn)pascalTurboPascalFreePascal

integer10實(shí)際長(zhǎng)度實(shí)際長(zhǎng)度

real221725

布爾型104或54或5

字符串串長(zhǎng)串長(zhǎng)串長(zhǎng)

在TurboPascal系統(tǒng)中,對(duì)于整型字符串的輸出都是按數(shù)據(jù)本身長(zhǎng)度輸出,對(duì)于布爾型數(shù)據(jù)(只有True和False

兩種值),TRUE為4歹U,F(xiàn)ALSE為5歹ij,一律采用大寫(xiě)輸出。而real型數(shù)據(jù)的輸出時(shí),則按17列輸出,其中第一-

列為符號(hào)位,正號(hào)不顯示,后四位為"Einn”,中間的12列為尾數(shù)部分。如:(□代表一個(gè)空格)

語(yǔ)句WRITELN(2.367)WRITELN(67)WRITELN(TRUE)WRITELNCACDE')

TurboPascal

□2.36700000E+000167TRUEACDE

結(jié)果

FreePascal

□2.3670000000000000E+000167TRUEACDE

結(jié)果

有時(shí),在程序中往往根據(jù)實(shí)際情況,需要自己定義場(chǎng)寬。

2、指定場(chǎng)寬(自己定義場(chǎng)寬):在寫(xiě)語(yǔ)句中輸出項(xiàng)含有格式符號(hào)時(shí),就是為了指定場(chǎng)寬

⑴指定單場(chǎng)寬

格式:write(表達(dá)式:N)或writein(表達(dá)式:N),其中N為自然數(shù),指定單場(chǎng)寬后,所有數(shù)據(jù)不再按標(biāo)準(zhǔn)場(chǎng)寬輸出,而按指

定場(chǎng)寬輸出;若數(shù)據(jù)實(shí)際長(zhǎng)度小于指定場(chǎng)寬時(shí),則一律“向右靠齊,左留空格”。

如write(1234:8);write('abcdef:12)

輸出結(jié)果:

□□□□1234aDDnaDabcdef

對(duì)于標(biāo)準(zhǔn)實(shí)型數(shù)據(jù)指定單場(chǎng)寬時(shí),如果場(chǎng)寬大于標(biāo)準(zhǔn)場(chǎng)寬時(shí),右靠齊按標(biāo)準(zhǔn)場(chǎng)寬格式輸出17位,左留空格。若場(chǎng)寬小

于標(biāo)準(zhǔn)場(chǎng)寬時(shí),第?位仍為符號(hào)位,最后四位仍為“E土nn”,中間部分為尾數(shù)顯示部分;如果指定的寬度小于8位,則

數(shù)據(jù)按8位格式“*.*E士nn”輸出

⑵指定雙場(chǎng)寬

如果輸出項(xiàng)是實(shí)數(shù)時(shí),如果希望輸出的實(shí)數(shù)不用科學(xué)記數(shù)法輸出,而用小數(shù)形式輸出,可以用指定雙場(chǎng)寬方法輸出,雙場(chǎng)

寬輸出格式為:write(實(shí)型表達(dá)式:m:n),其中m和n都是自然數(shù),m用以指定整個(gè)數(shù)據(jù)所占的寬度,n指定輸出實(shí)數(shù)

的小數(shù)位數(shù),如:

write(sqrt(75):9:4);

輸出:口口口8.6602

如果雙場(chǎng)寬不能滿(mǎn)足輸出數(shù)據(jù)的最低要求,系統(tǒng)自動(dòng)突破指定的場(chǎng)寬限制,按實(shí)際長(zhǎng)度輸出,如:write(sqrt(75):5:4);要

使小數(shù)點(diǎn)后有4位數(shù)字,而總場(chǎng)寬為5,是不可能的(因?yàn)檫€有一個(gè)小數(shù)點(diǎn),小數(shù)點(diǎn)前面還有一個(gè)數(shù)字),它最低限度

要有6列,即輸出為:8.6602(舍棄超過(guò)場(chǎng)寬的數(shù)據(jù)堅(jiān)持四舍五入原則)

例1:寫(xiě)出下列程序在turbopascal下的輸出結(jié)果

programex;

consts=,abcdefg,;

var

i:integer;

r:real;

c:char;b:boolean;

begin

i:=1234;

r:=1234.5678;

c:=#;

b:=true;

writeln(i,i:6,i:3);

writeln(r,r:12:5,r:8:5,r:8:3);

writeln(c,c:5);

writeln(s,s:10,s:5);

writeln(b,b:5,b:3);

end.

運(yùn)行結(jié)果如下:

1234nal2341234

□1.2345678000E+03□口1234.567801234.567801234.568

#□□□□#

abcdefgDoaabcdef^abcdefg

TRUEDTRUETRUE

3、應(yīng)用例析

例2:已知A=253,B=43,輸出A*B的運(yùn)算式子,即輸出如下

□□□□□□□253*43=

10879

□□□□□□□□□253

□□□□□□□*□□43

□□□□-----------------

□□□□□□□□□759

□□□□□+□1012

□□□□-----------------

□□□□□□□10879

分析:對(duì)于該問(wèn)題,我們只要控制好輸出時(shí)右靠齊即可。即前四行的總寬度一樣(例如為12),第五行總寬度比

前面少1。第六、七行總寬度與前四行一樣。

參考程序如下:

var

a,b:integer;

begin

a:=253;b:=43;

writeln(a:,a*b);

writeln(a:12);

write('*,:8);writeln(b:4);

writelnC--------*:12);

writeln(a*3:12);

write(,+*:6);writeln(a*4:5);

writelnC1--------':12);

writeln(a*b:12);

end.

二、輸入語(yǔ)句(讀語(yǔ)句READ、READLN)

在程序中變量獲得一個(gè)確定的值,固然可以用賦值語(yǔ)句,但是如果需要賦值的變量較多,或變量的值經(jīng)常變化,則使

用本節(jié)介紹的輸入語(yǔ)句一讀語(yǔ)句,將更為方便。讀語(yǔ)句是在程序運(yùn)行時(shí)由用戶(hù)給變量提供數(shù)據(jù)的一種很靈活的輸入動(dòng)作,

它有兩種格式:

read(〈變量名表>);

readln[(v變量名表>)];

其中變量名表是用逗號(hào)隔開(kāi)的若干個(gè)變量名組成的。

功能:從標(biāo)準(zhǔn)輸入文件(即INPUT,一般對(duì)應(yīng)著鍵盤(pán))中讀入數(shù)據(jù),并依次賦給相應(yīng)的變量

說(shuō)明:①、read和readln是標(biāo)準(zhǔn)過(guò)程名,它們是標(biāo)準(zhǔn)標(biāo)識(shí)符

②、執(zhí)行到read或readln語(yǔ)句時(shí),系統(tǒng)處于等待狀態(tài),等待用戶(hù)從鍵盤(pán)上輸入數(shù)據(jù),系統(tǒng)根據(jù)變量的數(shù)據(jù)類(lèi)型的語(yǔ)法

要求判斷輸入的字符是否合法。如執(zhí)行read(a)語(yǔ)句,a是整型變量,則輸入的字符為數(shù)字字符時(shí)是合法的,當(dāng)輸入結(jié)束

時(shí).,則自動(dòng)將剛接受的?串?dāng)?shù)字字符轉(zhuǎn)換為整數(shù)賦給變量a

③、在輸入數(shù)值型(整型或?qū)嵭?數(shù)據(jù)時(shí):數(shù)據(jù)間要用空格或回車(chē)分隔開(kāi)各個(gè)數(shù)據(jù),輸入足夠個(gè)數(shù)的數(shù)據(jù),否則仍要

繼續(xù)等待輸入,但最后一定要有回車(chē),表示該輸入行結(jié)束,直到數(shù)據(jù)足夠,該讀語(yǔ)句執(zhí)行結(jié)束,程序繼續(xù)運(yùn)行

例3:設(shè)a、b、c為整型變量,需將它們的值分別賦以10、20、30,寫(xiě)出對(duì)應(yīng)下列語(yǔ)句的所有可能輸入格式

Read(a,b,c);

解:根據(jù)③,即可列出所有可能輸入格式

(a)10a20o30<~~1

(b)l(k)20-」

30一」

(c)10一」

20Q30<—1

(d)10一

20一」

30一」

其中“一」”表示回車(chē)鍵,下同

④、read語(yǔ)句與readln語(yǔ)句的第一個(gè)區(qū)別是:read語(yǔ)句是一個(gè)接一個(gè)地讀數(shù)據(jù),在執(zhí)行完本Read語(yǔ)句(讀完本語(yǔ)句中

變量所需的數(shù)據(jù))后,下一個(gè)讀語(yǔ)句接著從該數(shù)據(jù)輸入行中繼續(xù)讀數(shù)據(jù),也就是說(shuō),不換行。如:

Read(a,b);

Read(c,d);

Read(e);

如果輸入數(shù)據(jù)行如下:

1口2口3口4口5口6口<?

則a,b,c,d,e的值分別為1,2,3,4,5,如果后面無(wú)讀語(yǔ)句則數(shù)據(jù)6是多余的,這是允許的。

Readln則不同,在讀完本Readln語(yǔ)句中變量所需的數(shù)據(jù)后,該數(shù)據(jù)行中剩余的數(shù)據(jù)多余無(wú)用,或者說(shuō),在讀完本Readln

語(yǔ)句中變量所需數(shù)據(jù)后,一定要讀到一個(gè)回車(chē),否則多余的數(shù)據(jù)無(wú)用

例4:設(shè)要達(dá)到例1同樣的目的,但語(yǔ)句改為

readln(a,b);

readln(c);

則例3中的4種輸入格式只有(b)(d)是有效的

⑤、readln語(yǔ)句與read語(yǔ)句的第二個(gè)區(qū)別是:read后?定要有參數(shù)表,而readln可以不帶參數(shù)表,即可以沒(méi)有任何輸

入項(xiàng),只是等待讀入一個(gè)換行符(回車(chē)),經(jīng)常用于暫停程序的運(yùn)行,直到輸入一個(gè)回車(chē)

例5:設(shè)有下列語(yǔ)句

read(a,b,c);

readln(d,e);

readln;

readln(f,g);

其中,所有變量均為整型。再設(shè)輸入的數(shù)據(jù)如下:

1口2一」

3口4口5口6口7口8<一?

9口10一」

1,」

12口13一」

列表給出每個(gè)變量的值

分析:可以假想有一“數(shù)據(jù)位置指針”,每讀一個(gè)數(shù)據(jù)后,指針后移到該數(shù)據(jù)之后,每執(zhí)行一個(gè)readln語(yǔ)句后,指針移

到下一個(gè)數(shù)據(jù)行的開(kāi)頭。

各變量的值如下表所示:

變量名abcdefg

值123451112

⑥、為了避免可能出現(xiàn)的錯(cuò)誤,建議在程序中按下列原則使用讀語(yǔ)句:(A)如果沒(méi)有特殊需要,在一個(gè)程序中盡量避免混

合使用read語(yǔ)句和readln語(yǔ)句;(B)盡量用readln語(yǔ)句來(lái)輸入數(shù)據(jù),一個(gè)數(shù)據(jù)行對(duì)應(yīng),?個(gè)readln語(yǔ)句;(C)由于執(zhí)行read或

readln語(yǔ)句時(shí);系統(tǒng)不會(huì)提供任何提示信息,因此,編程時(shí)最好在readln語(yǔ)句之前加以適當(dāng)提示,例如:

writeC'Inputa,b,c:');

readln(a,b,c);

在執(zhí)行時(shí),屏幕上顯示:

Inputa,b,c:?

其中,"?”為光標(biāo);執(zhí)行readln語(yǔ)句后,系統(tǒng)處于待待輸入狀態(tài),只有輸入了所需數(shù)據(jù)后才繼續(xù)往下執(zhí)行

三、順序結(jié)構(gòu)程序設(shè)計(jì)

到目前為止,我們可以用讀、寫(xiě)語(yǔ)句和賦值語(yǔ)句編寫(xiě)些簡(jiǎn)單的程序。通過(guò)閱讀這些程序,可以逐步熟悉pascal程序

的編寫(xiě)方法和應(yīng)遵循的規(guī)則,為以后各章的學(xué)習(xí)打基礎(chǔ)

例6:試編一程序,輸入?梯形的上底、下底、高,求該梯形的面積。

分析:整個(gè)程序分為三段:輸入、計(jì)算、輸出。程序中用a,b,h三個(gè)變量分別存放梯形的上、下底與高,S存放面積;要

而使用這些變量都要先說(shuō)明,程序的執(zhí)行部分中先輸入上、下底與高,接著求面積S,最后輸出結(jié)果S

源程序如下:

programTixing;{程序首部}

var

a,b,h,s:real;{程序說(shuō)明部分}

begin

write('Inputa,b,h:');

readln(a,b,h);{程序執(zhí)行部分}

s:=(a+b)*h/2;

write('s=',s:10:3);

end.

例7:某幼兒園里,有5個(gè)小朋友編號(hào)為1、2、3、4、5,他們按自己的編號(hào)順序圍坐在一張圓桌旁。他們身上都有若

干個(gè)糖果,現(xiàn)在他們做一個(gè)分糖果游戲。從1號(hào)小朋友開(kāi)始,將他的糖果均分三份(如果有多余的,則他將多余的糖

果吃掉),自己留一份,其余兩份分給他的相鄰的兩個(gè)小朋友。接著2號(hào)、3號(hào)、4號(hào)-、5號(hào)小朋友也這如果做。問(wèn)一

輪后,每個(gè)小朋友手上分別有多少糖果分析:這道問(wèn)題與第二課中的例2基本一樣,只不過(guò)這里有5位小朋友,

且他們初始時(shí)糖果的數(shù)目不確定。這里用a,b,c,d,e分別存放5個(gè)小朋友的糖果。初始時(shí)它們的值改為由鍵盤(pán)輸入。其

它都與第二課中的例2類(lèi)似。

參考程序如下:

programfentang;

var

a,b,c,d,e:integer;

begin

write('PleaseEnterinitnumbers');readln(a,b,c,d,e);

a:=adiv3;b:=b+a;e:=e+a;{1號(hào)均分后,1、2、5號(hào)的糖果數(shù)變化情況}

b:=bdiv3;c:=c+b;a:=a+b;{2號(hào)均分后,1、2、3號(hào)的糖果數(shù)變化情況)

c:=cdiv3;b:=b+c;d:=d+c;{3號(hào)均分后,2、3、4號(hào)的糖果數(shù)變化情況}

d:=ddiv3;c:=c+d;e:=e+d;{4號(hào)均分后,3、4、5號(hào)的糖果數(shù)變化情況}

e:=ediv3;d:=d+e;a:=a+e;{5號(hào)均分后,4、5、1號(hào)的糖果數(shù)變化情況}

{輸出結(jié)果}

writeln(,a=\a);

writeln(*b=\b);

writeln('c=',c);

writeln(,d=,,d);

writeln(,e=,,e);

readln;{暫停}

end.

例8:編一程序求半徑為R的圓的周長(zhǎng)與面積?

分析:程序要先輸入半徑R,然后求周長(zhǎng)c和面積s,最后輸出c和s.

源程序如下:

programcircle;

constPI=3.14159;

var

r,c,s:real;

begin

write('EnterR=');readln(r);

c:=2*pi*r;

s:=pi*sqr(r);

writeln('c=;c:10:2);

writeln('s=,,s:10:2);

end.

在程序中,為了輸出實(shí)型周長(zhǎng)c和面積s時(shí),按照小數(shù)形式輸出,采用了指定雙場(chǎng)寬格式

練習(xí)三

1、編一程序,將攝氏溫度換為華氏溫度。公式為:

其中f為華氏溫度,C是攝氏溫度

2、編一程序,輸入三角形的三邊a、b、c(假設(shè)這三邊可以構(gòu)成一個(gè)三角形),求三角形的面積S?

提示:可利用海倫公式,求平方根請(qǐng)使用SQRT()函數(shù),如:56的平方根可表示為SQRT(56)

3、編一程序,要求輸入任意兩個(gè)整數(shù)A和B,其中0<B<99,輸出這兩個(gè)數(shù)相乘的計(jì)算過(guò)程,例如:InputAand

B(0<B<99):23525」

235*25=5875

□□□□□□□□□235

25

□□□□□□□□1175

□□□+□□□□470

□□□□□□□□5875

信息學(xué)奧賽Pascal教程:第四課簡(jiǎn)單的分支結(jié)構(gòu)程序

在現(xiàn)實(shí)生活中,我們每天都要進(jìn)行根據(jù)實(shí)際情況進(jìn)行選擇。例如,原打算明天去公園,但如果明天天氣不好,將留在

家里看電視,所以人也會(huì)根據(jù)條件進(jìn)行行為的選擇;計(jì)算機(jī)也會(huì)根據(jù)不同情況作出各種邏輯判斷,進(jìn)行一定的選擇。

在這課與下一課中,我們將會(huì)發(fā)現(xiàn),我們是通過(guò)選擇(分支)結(jié)構(gòu)語(yǔ)句來(lái)實(shí)現(xiàn)程序的邏輯判斷功能。

一、PASCAL中的布爾(邏輯)類(lèi)型

在前面,我們學(xué)習(xí)了整型(integer)與實(shí)型(real),其中integer型數(shù)據(jù)取值范圍為-32768到32767之間所有整數(shù)。而real

型數(shù)據(jù)取值范圍為其絕對(duì)值在IO,、到1()38之間的所有實(shí)數(shù),它們都是數(shù)值型的(即值都為數(shù));布爾型(Boolean)

是一種數(shù)據(jù)的類(lèi)型,這種類(lèi)型只有兩種值,即“真''與"假”

1、布爾常量:在Pascal語(yǔ)言中“真”用ture表示,“假”用False表示,所以布爾類(lèi)型只有TRUE與FALSE兩個(gè)常量;

2、布爾變量(BOOLEAN):如果我們將某些變量說(shuō)明成布爾型,那么這些變量就是布爾變量,它們只能用于存放布

爾值(ture或false),例如,VARA,B:BOOLEAN;

3、布爾類(lèi)型是順序類(lèi)型:由于這種類(lèi)型只有兩個(gè)常量,Pascal語(yǔ)言中規(guī)定ture的序號(hào)為1,false的序號(hào)為0。若某種

類(lèi)型的常量是有限的,那么這種類(lèi)型的常量通常都有一個(gè)序號(hào),我們稱(chēng)這種類(lèi)型為順序類(lèi)型;如前面我們學(xué)過(guò)的整型

(integer),以及后面要學(xué)到的字符型(char)都是順序類(lèi)型;

4,布爾類(lèi)型的輸入與輸出

a)、輸出

VARA,B:BOOLEAN;

BEGIN

A:=TRUE;B:=FALSE;

WRITELN(A,B);

END.

結(jié)果:TRUEFALSE

b)布爾類(lèi)型變量不能直接用讀語(yǔ)句輸入:布爾類(lèi)型變量不能通過(guò)讀語(yǔ)句給它們提供值;事實(shí)上,我們可以通過(guò)間

接方式對(duì)布爾變量進(jìn)行值的輸入,最常用的就是通過(guò)賦值語(yǔ)句

例如,以下程序是錯(cuò)誤的

vara,b,c:Boolean;

begin

readln(a,b,c);{錯(cuò)誤語(yǔ)句}

writeln(a,b,c);

end.

又如:

vara:Boolean;

begin

a:=3>7;{正確語(yǔ)句}

writeln(a);

end.

二、關(guān)系表達(dá)式與布爾表達(dá)式

1、什么是關(guān)系表達(dá)式:用小括號(hào)、>、V、>=、<=、=、<>將兩個(gè)算術(shù)表達(dá)式連接起來(lái)的式子就稱(chēng)為關(guān)系表達(dá)式(比較

式),如:3+7>8,x+yvlO,2*7<=13等都是關(guān)系表達(dá)式

2、關(guān)系表達(dá)式的值

很顯然,上面幾個(gè)關(guān)系表達(dá)式中第一個(gè)是真的,第三個(gè)是假的,而第二個(gè)表達(dá)式可能是真的,也可能是假的;所以我

們很容易發(fā)現(xiàn),這些表達(dá)式的值是"對(duì)"的或"不對(duì)"的(或者說(shuō),是"真"的或"假"的),即關(guān)系表達(dá)式的值為布爾值。表

示該比較式兩端式子的大小關(guān)系是否成立;如3+2>6是假的,故它的值為FALSE;同樣,45>=32是對(duì)的,故該表達(dá)式

的值為true

說(shuō)明:①對(duì)于>=、<=來(lái)說(shuō),只要有一部分成立,則表達(dá)式的值就為T(mén)RUE,如:3<=4和5>=5者B是真的,即值為T(mén)RUE

②關(guān)系表達(dá)式可用于表示一個(gè)命題。如:“m為偶數(shù)”可表示為:mmod2=0。“n為正數(shù)”可表示為:n>0

3、布爾運(yùn)算及布爾表達(dá)式(也稱(chēng)邏輯運(yùn)算及邏輯表達(dá)式):為了表示更復(fù)雜的命題,Pascal還引入三種邏輯運(yùn)算符:

not、and、or,它們分別相當(dāng)于數(shù)學(xué)上的“非”、“且”和“或”的意義

這三個(gè)運(yùn)算符的運(yùn)算對(duì)象為布爾量,其中not為單目運(yùn)算,只有一個(gè)運(yùn)算對(duì)象,and與or為雙目運(yùn)算,有兩個(gè)運(yùn)算對(duì)

象,它們的運(yùn)算真值表如下:

abNotaaandbaorbaxorb

falsefalsetruefalsefalsefalse

falsetruetruefalseturetrue

truefalsefalsefalsetruetrue

truetruefalsetruetruefalse

于是,一個(gè)或多個(gè)關(guān)系表達(dá)式用布爾運(yùn)算符連接起來(lái)的式子就稱(chēng)為布爾表達(dá)式;布爾表達(dá)式的值也為布爾值;根

據(jù)上表我們可以總結(jié)各運(yùn)算符的運(yùn)算規(guī)則:

NOT:非運(yùn)算,取反(原來(lái)為真,非后為假;原來(lái)為假,非后為真)

AND:與運(yùn)算,同為真則為真,其余均為假(參加運(yùn)算的兩個(gè)對(duì)象同為真結(jié)果才為真,否則為假)

OR:或運(yùn)算,只要有一個(gè)為真,結(jié)果就為真

XOR:異或運(yùn)算,相同則為假,不同則為真(參加運(yùn)算的兩個(gè)對(duì)象相同就為假,不同則為真)

請(qǐng)算出后面表達(dá)式的值:,a'<'A'NOT('ak'A')(3*4>6)AND(B>'A)(3*4>6)OR(B<'A')

注:①布爾運(yùn)算符與運(yùn)算對(duì)象之間可以沒(méi)有空格,如:NOTCaVA)和(3*4>6)AND(B>,A)都是正確的表達(dá)式;

②用括號(hào)改變各種運(yùn)算符的先后順序是非常重要的,如:NOTHv7V和3*4>6AND(B>7V)都是不正確的表達(dá)式,因?yàn)?/p>

布爾運(yùn)算比關(guān)系運(yùn)算的優(yōu)先級(jí)高,導(dǎo)制上面的表達(dá)式有語(yǔ)法錯(cuò)誤,為什么錯(cuò)請(qǐng)想-想

③布爾運(yùn)算符的運(yùn)算級(jí)別為:NOT>AND>OR如:FALSEORNOTTRUEANDTRUE的值為FALSE,它等價(jià)于:

FALSEOR((NOTTRUE)ANDTRUE)

如果?個(gè)表達(dá)式里出現(xiàn)兩個(gè)或兩個(gè)以上的運(yùn)算符,則必須規(guī)定它們的運(yùn)算次序,pascal規(guī)定:

①表達(dá)式中相同優(yōu)先級(jí)的運(yùn)算符,按從左到右順序計(jì)算;

②表達(dá)式中不同優(yōu)先級(jí)的運(yùn)算符,按從高到低順序計(jì)算;

③括號(hào)優(yōu)先級(jí)最高,從內(nèi)到外逐層降低;

對(duì)于一個(gè)復(fù)雜的表達(dá)式可能同時(shí)包含算術(shù)運(yùn)算、關(guān)系運(yùn)算和邏輯運(yùn)算以及函數(shù)運(yùn)算,運(yùn)算的優(yōu)先順序?yàn)椋豪ㄌ?hào)〉函數(shù)

>NOT>*、/、div、mod>and>+、一、or、xor>關(guān)系運(yùn)算(>、=、<、<=、>=、<>)

對(duì)于復(fù)雜的命題,我們可以用布爾表達(dá)式來(lái)表示。例如,命題:“m,n都是偶數(shù)或都是奇數(shù)”可表示為(mmod2=0)and(nmod

2=0)or(mmod2=l)and(nmod2=1)

三、簡(jiǎn)單的IF語(yǔ)句

1、格式

I、IF〈布爾表達(dá)式>THEN語(yǔ)句;

II、IF〈布爾表達(dá)式〉THEN語(yǔ)句1ELSE語(yǔ)句2;

注意:II型IF語(yǔ)句中語(yǔ)句1后無(wú)“;”號(hào)

2、功能

I、執(zhí)行IF語(yǔ)句時(shí),先計(jì)算V布爾表達(dá)式〉的值,若為T(mén)RUE則執(zhí)行語(yǔ)句,否則不執(zhí)行任何操作;

II、執(zhí)行IF語(yǔ)句時(shí),先計(jì)算V布爾表達(dá)式〉的值,若為T(mén)RUE則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2;

3、示例

1)例4.2:輸入一個(gè)整數(shù)a,判斷是否為偶數(shù)(是輸出Yes,否則輸出N。)

Programex4_2;

Vara:integer;

Begin

Write('a=,);readln(a);

If(amod2=O)thenwriteln(,Yes,)

Elsewriteln(,No,);

Readln;

End.

2)華榕超市里賣(mài)電池,每個(gè)電池8角錢(qián),若數(shù)量超過(guò)10個(gè),則可打75折

Programex4_3;

VarNurn:integer;Price,Total:real;

Begin

Write(,Num=');readln(Num);

Price=0.8;

IfNum>10thenPrice:=Price*0.75;

Total:=Num*Price;

Writeln(Total=\Total:0:2);

Readln;

End.

3)編寫(xiě)-與電腦猜"紅'或'黑”的游戲

分析:用1代表紅,0代表黑。先由計(jì)算機(jī)先出答案,然后再由人猜,猜對(duì)輸出"YOUWIN”否則輸出"YOULOST";

為了模擬猜"紅"或"黑"的隨意性,程序中需要用到隨機(jī)函數(shù)random(n)

函數(shù)是什么呢,例如大家都知道1-21=2,1581=58,那么1x1=?

如果我們用y表示1x1,那么,這里y=lxl就是一個(gè)函數(shù),也就是說(shuō)函數(shù)是一個(gè)關(guān)于一個(gè)或多個(gè)自變量(未知量,如上例

中的x)的運(yùn)算結(jié)果

在pascal語(yǔ)言中,系統(tǒng)提供了許多內(nèi)部函數(shù),其中包括1x1函數(shù),當(dāng)然它用abs(x)表示;我們?nèi)绻骕^Y的絕對(duì)值,

可以調(diào)用內(nèi)部函數(shù)abs(x*x-y)即可求得;Random(n)也是一個(gè)內(nèi)部函數(shù),調(diào)用它能得到0~n-l之間的整數(shù)(但它不確定

的,或說(shuō)是隨機(jī)的):同時(shí)由于函數(shù)是一個(gè)運(yùn)算結(jié)果,所以函數(shù)的調(diào)用只能出現(xiàn)在表達(dá)式中

Programex4_3;

Usescrt;

VarComputer,People:integer;

Begin

Randomize;

Computer:=random(2);

WriteC'Youguess(0—Red1-Black):');readln(People);

IfPeople=Computerthenwriteln('YOUWIN')

ElsewritelnCYOULOST);

Readln;

End.

練習(xí)四:

1.某車(chē)站行李托運(yùn)收費(fèi)標(biāo)準(zhǔn)是:10公斤或10公斤以下,收費(fèi)2.5元,超過(guò)10公斤的行李,按每超過(guò)1公斤增加1.5元

進(jìn)行收費(fèi)。試編?程序,輸入行李的重量,算出托運(yùn)費(fèi)。

2.利用本課的知識(shí),將第三課練習(xí)的第2題作進(jìn)一步完善,即:程序要能判斷輸入的三個(gè)邊能不能構(gòu)成三角形(有數(shù)小

于等于零、兩邊之和不能大于第三邊都不能構(gòu)成三角形),若不能則提示輸入的數(shù)據(jù)有誤且不做任何計(jì)算;若能構(gòu)成

三角形就計(jì)算并輸出其面積。

信息學(xué)奧賽Pascal教程第五課If嵌套與Case語(yǔ)句

一、IF語(yǔ)句的嵌套

在if語(yǔ)句中,如果then子句或else子句仍是一個(gè)if語(yǔ)句,則稱(chēng)為if語(yǔ)句的嵌套;

例L計(jì)算下列函數(shù)

分析:根據(jù)輸入的x值,先分成x>0與聯(lián)0兩種情況,然后對(duì)于情況爛0,再區(qū)分x是小于0,還是等于0;

源程序如下:

programex;

var

x:real;

y:integer;

begin

wrtie(*Inputx:');readln(x);

ifx>0theny:=l{x>0時(shí),y的值為1}

else{x<0時(shí)}

ifx=0theny:=0elsey:=-l;

writeln(,x=,,x:6:2,'y=\y);

end.

顯然,以上的程序中,在then子句中嵌套了一個(gè)H型if語(yǔ)句,當(dāng)然程序也可以寫(xiě)成如卜形式:

programex;

var

x:real;y:integer;

begin

wrtie('Inputx:');readln(x);

ifx>=0then

ifx>0theny:=l

elsey:=0

elsey=-l;

writeln(,x=\x:6:2,,y=,,y);

end.

但是對(duì)于本題,下面的程序是不對(duì)的。

y:=0;

ifx>=0then

ifx>0theny:=l

elsey:=-l;

明顯,從此人的程序書(shū)寫(xiě)格式可以看出,他想讓else與第個(gè)if配對(duì),而事實(shí)上,這是錯(cuò)的。因?yàn)閜ascal規(guī)定:else

與它上面的距它最近的then配對(duì),因此以上程序段的邏輯意義就與題義不符。

要使上程序段中esle與第一個(gè)then配對(duì),應(yīng)將程序段修改為:

或者y:=0;

ifx>=0thenifx>=0then

ifx>0theny:=lbegin

elsey:=0ifx>0thenY:=l;

elsey:=-l;end

elseY:=-l;

二、case語(yǔ)句

從上面我們知道可以用嵌套的if語(yǔ)句實(shí)現(xiàn)多分支的選擇結(jié)構(gòu),但如果分支越來(lái)越多時(shí);用嵌套的if語(yǔ)句實(shí)現(xiàn)多分支就

顯得繁雜。當(dāng)多分支選擇的各個(gè)條件山同一個(gè)表達(dá)式的不同結(jié)果值決定時(shí),可以用case語(yǔ)句實(shí)現(xiàn);它的選擇過(guò)程,很

象?個(gè)多路開(kāi)關(guān),即由case語(yǔ)句的選擇表達(dá)式的值,決定切換至哪一語(yǔ)句去工作。因此在分支結(jié)構(gòu)程序設(shè)計(jì)中,它是

一種強(qiáng)有力的手段,在實(shí)現(xiàn)多路徑分支控制時(shí),用

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論