版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度漁業(yè)科技示范園承包合同3篇
- 畢業(yè)生就業(yè)平臺(tái)和資源
- 基于2025年度市場(chǎng)價(jià)格的二手汽車(chē)買(mǎi)賣(mài)合同范本3篇
- 2025版苗木種植與市場(chǎng)推廣合作合同范本4篇
- 2025年高性能建筑材料研發(fā)委托合同3篇
- 2025年度文化產(chǎn)業(yè)園承包經(jīng)營(yíng)權(quán)擔(dān)保合同4篇
- 危險(xiǎn)品化學(xué)品火災(zāi)預(yù)防措施
- 2024年09月江蘇2024年寧波銀行南京分行校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025年度新型智慧社區(qū)場(chǎng)物業(yè)管理合同書(shū)范本4篇
- 二零二五年度光伏產(chǎn)品模具研發(fā)制造合同4篇
- 2025年度版權(quán)授權(quán)協(xié)議:游戲角色形象設(shè)計(jì)與授權(quán)使用3篇
- 2024年08月云南省農(nóng)村信用社秋季校園招考750名工作人員筆試歷年參考題庫(kù)附帶答案詳解
- 防詐騙安全知識(shí)培訓(xùn)課件
- 心肺復(fù)蘇課件2024
- 2024年股東股權(quán)繼承轉(zhuǎn)讓協(xié)議3篇
- 2024-2025學(xué)年江蘇省南京市高二上冊(cè)期末數(shù)學(xué)檢測(cè)試卷(含解析)
- 四川省名校2025屆高三第二次模擬考試英語(yǔ)試卷含解析
- 《城鎮(zhèn)燃?xì)忸I(lǐng)域重大隱患判定指導(dǎo)手冊(cè)》專(zhuān)題培訓(xùn)
- 湖南財(cái)政經(jīng)濟(jì)學(xué)院專(zhuān)升本管理學(xué)真題
- 考研有機(jī)化學(xué)重點(diǎn)
- 全國(guó)身份證前六位、區(qū)號(hào)、郵編-編碼大全
評(píng)論
0/150
提交評(píng)論