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

下載本文檔

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

文檔簡介

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

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

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

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

一、Pascal語言概述

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

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

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

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

影響最大一種算法語言。

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

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

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

數(shù)”(子程序)的功能??梢苑奖愕貢鴮懗鼋Y(jié)構(gòu)化程序。在編寫程序時可以完全不使用GOTO語句和標(biāo)號。這就易于保證

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

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

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

組類型、集合類型、記錄類型和文件類型。此外,還提供了其它許多語言中所沒有的指針類型。沃思有一個著名的公

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

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

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

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

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

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

許一行寫多個語句,一個語句可以分寫在多行上,也不區(qū)分大小寫,這樣就可以使PASCAL程序?qū)懙孟笤姼韪袷揭粯?/p>

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

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

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

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

任何程序設(shè)計語言都有著一組自己的記號和規(guī)則。PASCAL語言同樣必須采用其本身所規(guī)定的記號和規(guī)則來編寫程序。

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

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

為了明顯起見先舉一個最簡單的PASCAL程序例子:【例1】

從這個簡單的程序可以看到:

1.一個PASCAL程序分為兩個部分:程序首部和程序體(或稱分程序)

2.程序首部是程序的開頭部分,它包括:

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

字開頭。在turbopascal語言中,首部也可省略。

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

注:在寫完程序首部之后,應(yīng)有一個分號。

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

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

的名稱、類型。

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

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

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

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

執(zhí)行部分以“begin”開始,以“end”結(jié)束,其間有若干個語句,語句之間以分號隔開。

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

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

寫程序時盡量模仿本書中例題程序格式。

5.在程序中,一對大括號間的文字稱為注釋。注釋的內(nèi)容由人們根據(jù)需要書寫,可以用英語或漢語表示。注釋可以放

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

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

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

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

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

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

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

具體的操作步驟如下

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

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

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

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

turbo{Freepascal是fp)

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

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

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

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

等。

3.新建程序窗口

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

或NonameOl.pas等)。

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

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

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

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

誤,則會在程序窗口的第一行處顯示第?個紅色錯誤信息。若無語法錯誤,則窗口正中央會出現(xiàn)一個對話框,提示編

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

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

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

到用戶屏幕。

5.程序的保存與打開

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

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

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

此時系統(tǒng)也會彈出一個對話框要求輸入要打開的文件名,或直接在文件對話框列表中選擇所要的文件,然后回到打開

文件。

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

五、第一個程序

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

的描述它的功能是什么?

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.

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

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

分大小寫。

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

1.提示用戶輸入圓的半徑,計算并輸出圓的周長

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

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

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

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

基本方法。

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

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

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

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

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

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

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

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

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

2、實(shí)型常量:包括正實(shí)數(shù)、負(fù)實(shí)數(shù)和實(shí)數(shù)零,其實(shí)就是常說的小數(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這個"

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

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

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

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

只能近似表示。

3、字符常量:在Pascal語言中,字符常量是由單個字符組成,所有字符來自ASCII字符集,共有256個字符。在程

序中,通常用一對單引號將單個字符括起來表示一個字符常量,如:,a','A',。等;特殊地,對于單引號字符,則要表

示成口對于ASCII字符集中,按每個字符在字符集中的位置,將每個字符編號為0—255,編號稱為對應(yīng)字符的序號,

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

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

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

也可以用一個標(biāo)識符來代表一個常量,稱為"符號常量"。但符號常量必須在程序中的說明部分定義,也就是說先定義,

后使用。

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

CONSTPI=3.1415926;

E=2.71828;

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

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

"const",例如:

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

其值,又隱含定義了常量的類型。

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

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

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

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

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

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

過程中,其值可以改變的量,稱為變量。

變量有三個要素是:變量名、變量類型、變量值

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

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

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

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

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

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

識符長度不超過63個字符

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

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

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

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

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

同)

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

后面說明成同一類型。一個程序中,可以說明許多不同類型的變量,每種類型變量之間用分號隔開,共用一個VAR符

號。例如:

var

age,day:integer;

amount,average:real;

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

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

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

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

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

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

⑵算術(shù)運(yùn)算符,常用的有以下6個算術(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)算的兩個對象不能為實(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)先順序,如果一個表達(dá)式里出現(xiàn)兩個或兩個以上的運(yùn)算符,則必須規(guī)定它們的運(yùn)算次序,pascal規(guī)定

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

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

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

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

相同)

二、賦值語句

變量既然代表一個存儲單元,其值是可變的,那么其中的值是怎么提供的,又是怎么改變的呢?可以通過賦值語句來

進(jìn)行

1、賦值語句的格式

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

其中“:="稱為賦值號,是賦值語句的標(biāo)志

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

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

A:=A+1;

最后A的值為72

三、輸出語句

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

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

1、write語句

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

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

write(1.2,3.4,5);

write('MynameisLiping');

2,writein語句

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

(-)輸出語句的功能

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

屏幕上。

Write語句與writein語句格式上都相似,但它們在功能上有所不同,兩個語句的區(qū)別在于,wrile語句將其后括號中的

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

別為:

write。,2,3,4);

write(5,6);

輸出為:

123456

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

輸出為:

1234

56

四、應(yīng)用例析

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

倍糧食,問該倉庫從5月1日到5月4日期間每天的糧食分別是多少噸?(輸出每天的庫存量)

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

可以用一個變量A來描述倉庫的糧食庫存量

程序可寫如下:

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:有三個小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,丙有13粒糖果?,F(xiàn)在他們做一個游戲。從甲開始,將

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

乙、丙三人各有書多少粒糖果?

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

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

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

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

程序可寫如下:

programex2;

var

A,B,C:integer;

begin

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

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

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

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

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

readln;

end.

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

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

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

A=51B=35C=16

練習(xí)二:

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

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

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

瓜給第二名;把最后剩下的一半又半個西瓜給第三名,但每次分時并沒切開任何一個西瓜,且剛好西瓜分完。問前三

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

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

一、寫語句(WRITE、WRITELN)的輸出格式

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

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

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

含的格式輸出,還可加上一定格式符號按特定格式輸出。

1、隱含的輸出格式

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

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

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

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

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

integer10實(shí)際長度實(shí)際長度

real221725

布爾型104或54或5

字符串串長串長串長

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

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

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

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

TurboPascal

□2.36700000E+000167TRUEACDE

結(jié)果

FreePascal

□2.3670000000000000E+000167TRUEACDE

結(jié)果

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

2、指定場寬(自己定義場寬):在寫語句中輸出項含有格式符號時,就是為了指定場寬

⑴指定單場寬

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

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

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

輸出結(jié)果:

□□□□1234aDDnaDabcdef

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

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

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

⑵指定雙場寬

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

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

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

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

輸出:口口口8.6602

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

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

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

例1:寫出下列程序在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

分析:對于該問題,我們只要控制好輸出時右靠齊即可。即前四行的總寬度一樣(例如為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.

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

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

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

它有兩種格式:

read(〈變量名表>);

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

其中變量名表是用逗號隔開的若干個變量名組成的。

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

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

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

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

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

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

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

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

Read(a,b,c);

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

(a)10a20o30<~~1

(b)l(k)20-」

30一」

(c)10一」

20Q30<—1

(d)10一

20一」

30一」

其中“一」”表示回車鍵,下同

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

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

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,如果后面無讀語句則數(shù)據(jù)6是多余的,這是允許的。

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

語句中變量所需數(shù)據(jù)后,一定要讀到一個回車,否則多余的數(shù)據(jù)無用

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

readln(a,b);

readln(c);

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

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

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

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

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一」

列表給出每個變量的值

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

到下一個數(shù)據(jù)行的開頭。

各變量的值如下表所示:

變量名abcdefg

值123451112

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

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

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

writeC'Inputa,b,c:');

readln(a,b,c);

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

Inputa,b,c:?

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

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

到目前為止,我們可以用讀、寫語句和賦值語句編寫些簡單的程序。通過閱讀這些程序,可以逐步熟悉pascal程序

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

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

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

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

源程序如下:

programTixing;{程序首部}

var

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

begin

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

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

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

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

end.

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

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

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

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

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

它都與第二課中的例2類似。

參考程序如下:

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號均分后,1、2、5號的糖果數(shù)變化情況}

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

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

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

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

{輸出結(jié)果}

writeln(,a=\a);

writeln(*b=\b);

writeln('c=',c);

writeln(,d=,,d);

writeln(,e=,,e);

readln;{暫停}

end.

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

分析:程序要先輸入半徑R,然后求周長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í)型周長c和面積s時,按照小數(shù)形式輸出,采用了指定雙場寬格式

練習(xí)三

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

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

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

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

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

B(0<B<99):23525」

235*25=5875

□□□□□□□□□235

25

□□□□□□□□1175

□□□+□□□□470

□□□□□□□□5875

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

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

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

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

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

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

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

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

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

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

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

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

類型的常量是有限的,那么這種類型的常量通常都有一個序號,我們稱這種類型為順序類型;如前面我們學(xué)過的整型

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

4,布爾類型的輸入與輸出

a)、輸出

VARA,B:BOOLEAN;

BEGIN

A:=TRUE;B:=FALSE;

WRITELN(A,B);

END.

結(jié)果:TRUEFALSE

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

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

例如,以下程序是錯誤的

vara,b,c:Boolean;

begin

readln(a,b,c);{錯誤語句}

writeln(a,b,c);

end.

又如:

vara:Boolean;

begin

a:=3>7;{正確語句}

writeln(a);

end.

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

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

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

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

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

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

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

的值為true

說明:①對于>=、<=來說,只要有一部分成立,則表達(dá)式的值就為TRUE,如:3<=4和5>=5者B是真的,即值為TRUE

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

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

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

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

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

abNotaaandbaorbaxorb

falsefalsetruefalsefalsefalse

falsetruetruefalseturetrue

truefalsefalsefalsetruetrue

truetruefalsetruetruefalse

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

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

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

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

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

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

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

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

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

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

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

FALSEOR((NOTTRUE)ANDTRUE)

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

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

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

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

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

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

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

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

三、簡單的IF語句

1、格式

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

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

注意:II型IF語句中語句1后無“;”號

2、功能

I、執(zhí)行IF語句時,先計算V布爾表達(dá)式〉的值,若為TRUE則執(zhí)行語句,否則不執(zhí)行任何操作;

II、執(zhí)行IF語句時,先計算V布爾表達(dá)式〉的值,若為TRUE則執(zhí)行語句1,否則執(zhí)行語句2;

3、示例

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

Programex4_2;

Vara:integer;

Begin

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

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

Elsewriteln(,No,);

Readln;

End.

2)華榕超市里賣電池,每個電池8角錢,若數(shù)量超過10個,則可打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)編寫-與電腦猜"紅'或'黑”的游戲

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

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

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

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

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

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

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

的,或說是隨機(jī)的):同時由于函數(shù)是一個運(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.某車站行李托運(yùn)收費(fèi)標(biāo)準(zhǔn)是:10公斤或10公斤以下,收費(fèi)2.5元,超過10公斤的行李,按每超過1公斤增加1.5元

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

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

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

三角形就計算并輸出其面積。

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

一、IF語句的嵌套

在if語句中,如果then子句或else子句仍是一個if語句,則稱為if語句的嵌套;

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

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

源程序如下:

programex;

var

x:real;

y:integer;

begin

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

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

else{x<0時}

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

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

end.

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

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.

但是對于本題,下面的程序是不對的。

y:=0;

ifx>=0then

ifx>0theny:=l

elsey:=-l;

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

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

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

或者y:=0;

ifx>=0thenifx>=0then

ifx>0theny:=lbegin

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

elsey:=-l;end

elseY:=-l;

二、case語句

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

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

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

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

溫馨提示

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

評論

0/150

提交評論