寫給C++的同學(xué):Pascal語言簡介_第1頁
寫給C++的同學(xué):Pascal語言簡介_第2頁
寫給C++的同學(xué):Pascal語言簡介_第3頁
寫給C++的同學(xué):Pascal語言簡介_第4頁
寫給C++的同學(xué):Pascal語言簡介_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Pascal語言簡介·PAGE7·Pascal語言簡介 有很多OI資料是用Pascal語言寫的。所以了解一些Pascal語言、把Pascal程序看懂,并且能把P代碼轉(zhuǎn)換成C代碼,是大有益處的。SEQfulu\c\*ALPHABETICA.seqtp0f1代碼結(jié)構(gòu)(seqt0f_011)開頭開頭有一句:programprogram1;對于C++來講,這句話沒什么意義。(seqt0f_012)main()Pascal中沒有main()函數(shù)。在代碼最后有一個單獨(dú)的begin…end.(end后面有一個小數(shù)點(diǎn))相當(dāng)于intmain(){…}。Pascal的主程序不需要“return0”。(seqt0f_013)代碼塊和注釋在Pascal中,“{}”表示注釋,而begin和end才表示“{}”。注意,有的語句中,end后面不能加分號,如if…else結(jié)構(gòu)。SEQfulu\c\*ALPHABETICA.seqtp0f2數(shù)據(jù)類型和變量聲明(seqt0f_021)數(shù)據(jù)類型Pascal數(shù)據(jù)類型對應(yīng)的C數(shù)據(jù)類型Pascal數(shù)據(jù)類型對應(yīng)的C數(shù)據(jù)類型shortintsignedcharreal無integer*shortsinglesinglelongintintdoubledoublebyteunsignedcharbooleanboolwordunsignedshortchar**charstring***char[]*表示最大值的常量:maxint=32767,maxlongint=2147483647**Pascal中的char的行為不同于C++——它不能進(jìn)行算術(shù)運(yùn)算,所以'u'-'a'+'A'是非法的。***string雖然是char[],但還有其他功能。****如果看見“^”,說明是指針。如果看見“record”,說明是結(jié)構(gòu)體(C++中叫struct)。Pascal里用單引號表示字符或字符串——這一點(diǎn)和C++不同!(seqt0f_022)常量const 常量標(biāo)識符:類型=常量; ... 常量標(biāo)識符:類型=常量;例如:const a:integer=3; b:integer=5;const語句必須放在過程和程序的開頭,不能放到語句塊(begin…end)的內(nèi)部。(seqt0f_023)變量var 常量標(biāo)識符:類型=常量; ... 常量標(biāo)識符:類型=常量;例如:var a:integer; b:longint;var語句必須放在過程和程序的開頭,不能放到語句塊(begin…end)的內(nèi)部。一維數(shù)組的聲明:a:array[1..10]ofinteger; //可以任意指定上下標(biāo)二維數(shù)組的聲明:a:array[1..10,1..5]ofinteger;和C++不一樣,Pascal的數(shù)組可以指定下限?!?.”是兩個小數(shù)點(diǎn),如果翻譯成英語,相當(dāng)于“to”。假如在C++中有一個二維數(shù)組寫成“f[2][4]”,那么到Pascal中要寫成“f[2,4]”。Pascal語言不區(qū)分大小寫,所以A和a是同一個標(biāo)識符。(seqt0f_024)字符串類型字符串可以當(dāng)做字符數(shù)組使用,也可以整體使用。字符串可以直接用readln輸入,直接用writeln輸出。有關(guān)字符串的操作:操作類型作用返回值實(shí)例length(s)函數(shù)求字符串s的長度整型s:='123456789';l:=length(s);{l的值為9}copy(s,w,k)函數(shù)復(fù)制s中從w開始的k位字符串s:='123456789';s1:=copy(s,3,5);{s1的值是'34567'}val(s,k,code)過程將字符串s轉(zhuǎn)為數(shù)值,存在k中;code是錯誤代碼

vars:string;k,code:integer;begins:='1234';val(s,k,code);write(k);{k=1234}str(i,s)過程將數(shù)值i轉(zhuǎn)為字符串s

i:=1234;str(i,s);write(s);{s='1234'}Delete(s,w,k)過程在s中刪除從第w位開始的k個字符

s:='HonestAbeLincoln';Delete(s,8,4);Writeln(s);{'HonestLincoln'}Insert(s1,S,w)過程將s1插到s中第w位

S:='HonestLincolnInsert('Abe',S,8);{'HonestAbeLincoln'}Pos(c,S)函數(shù)求字符c在s中的位置整型S:='123.5';i:=Pos('',S);{i的值為1}+運(yùn)算符將兩個字符串連接起來

s1:='1234';s2:='5678';s:=s1+s2;{'12345678'}(seqt0f_025)子界類型type語句和typedef很像。type

day=1..31;

letter='A'..'Z';

定義兩個子界類型——day和letter。day是整數(shù)類型,但是只能取1~31的整數(shù);letter是字符類型,但是只能從'A'取到'Z'。(seqt0f_026)集合類型集合類型是setof…

集合類型支持+(并集)、*(交集)、-(差集)、=(相等)、<>(不相等)、<=(包含于)、>=(包含)

ain[1,2,3,4]用來判斷a是否在指定的集合內(nèi)。常見語句ifchin['A','a','B','b']then…

翻譯成if(ch=='A'||ch=='a'||ch=='B'||ch=='b')ifain[20..50]then

翻譯成if(a>=20&&a<=50)C++有一個類似的類型set,頭文件<set>,它的集合算法位于<algorithm>中。SEQfulu\c\*ALPHABETICA.seqtp0f3標(biāo)準(zhǔn)函數(shù)(seqt0f_031)算術(shù)函數(shù)函數(shù)標(biāo)識符自變量類型意義結(jié)果類型實(shí)例abs整型、實(shí)型絕對值同自變量abs(-4)=4abs(-7.49)=7.49arctan整型、實(shí)型反正切實(shí)型arctan(0)=0.0cos整型、實(shí)型余弦實(shí)型cos(pi)=-1.0exp整型、實(shí)型指數(shù)實(shí)型exp(0)=1.0frac整型、實(shí)型小數(shù)部分實(shí)型frac(-3.71)=-0.71int整型、實(shí)型整數(shù)部分實(shí)型int(-3.71)=-3.0ln整型、實(shí)型自然對數(shù)實(shí)型ln(1)=0.0pi無自變量圓周率實(shí)型sin整型、實(shí)型正弦實(shí)型sin(pi)=0.0sqr整型、實(shí)型平方同自變量sqr(4)=16sqrt整型、實(shí)型平方根實(shí)型sqrt(4)=2(seqt0f_032)標(biāo)準(zhǔn)函數(shù)函數(shù)標(biāo)識符自變量類型意義結(jié)果類型實(shí)例odd整型判斷奇數(shù)布爾型odd(1000)=falseodd(3)=truepred離散類型*求前趨同自變量pred(2000)=1999pred('x')='w'succ離散類型求后繼同自變量succ(2000)=2001succ('x')='y'*結(jié)構(gòu)體和集合肯定不是離散類型,因?yàn)樗鼈儧]有“位置”這樣的概念。(seqt0f_033)轉(zhuǎn)換函數(shù)函數(shù)標(biāo)識符自變量類型意義結(jié)果類型實(shí)例chrbyte自變量對應(yīng)的字符字符型chr(66)='B'ord離散類型自變量對應(yīng)的序號longintord('A')=65round實(shí)型四舍五入longintround(-4.3)=-5trunc實(shí)型截?cái)嗳≌鹟onginttrunc(2.88)=2C++的字符操作不同于Pascal,例如:把字符變成數(shù)字:C++可以直接把char當(dāng)做整數(shù)類型使用,但是在Pascal中,必須用ord函數(shù)。把數(shù)字變成字符:C++也可以直接用。但是在Pascal中要用chr。'X'-'A'+'a':在Pascal中要用chr(ord('X')-ord('A')+ord('a'))(seqt0f_034)雜類函數(shù)函數(shù)標(biāo)識符自變量類型意義結(jié)果類型random無自變量[0,1)間的隨機(jī)實(shí)數(shù)realrandomword[0,自變量)間的隨機(jī)整數(shù)wordrandomize無自變量初始化內(nèi)部隨機(jī)數(shù)產(chǎn)生器longintupcase字符型使小寫英文字母變?yōu)榇髮懽址蚫owncase字符型使小寫英文字母變?yōu)榇髮懽址蚐EQfulu\c\*ALPHABETICA.seqtp0f4運(yùn)算符算術(shù)運(yùn)算符:+、-、*、/、div(整除)、mod(就是%)、^(乘方)

“/”的返回類型是實(shí)型。如果用整除,要換成div。邏輯運(yùn)算符和C++中對應(yīng)的運(yùn)算符:not(!)、and(&&)、or(||)、xor(^)比較運(yùn)算符:等于變成了一個等號“=”,不等于變成了“<>”。<、>、<=、>=含義不變。位移運(yùn)算符:shr代表“>>”,shl代表“<<”。取地址和取值運(yùn)算符:@和^“=”只有一個功能——判斷相等。

賦值符號要寫成“:=”,并且,賦值符號不屬于運(yùn)算符。所以a:=b:=c;是非法的語句。inc(a)和dec(a)是兩個函數(shù),相當(dāng)于“a++”、“a--”。

inc(a,b)和dec(a,b)相當(dāng)于“a+=b”、“a-=b”。在Pascal中,需要打開特殊的編譯選項(xiàng)才能使用+=、-=、*=、/=、++、--運(yùn)算符。也就是說,競賽的時候這些運(yùn)算符可能是無法使用的。SEQfulu\c\*ALPHABETICA.seqtp0f5程序結(jié)構(gòu)(seqt0f_051)順序結(jié)構(gòu)程序賦值符號要寫成“:=”,一個冒號跟一個等號。輸入內(nèi)容:

read(變量名表); //如read(a,b);

readln(變量名表); //如readln(a,b,c,d);

readln; //用于暫停屏幕

{語句read只管接收數(shù)據(jù),語句readln接收完數(shù)據(jù)后,還把同一行的其它數(shù)據(jù)全部宣布作廢。}輸出內(nèi)容:

write(輸出量表); //如write('Theresultis:',ans); 輸出后不換行

writeln(輸出量表); //如writeln('Answer:',12,'',b); 輸出后換行

writeln; //輸出一個空行(seqt0f_052)選擇結(jié)構(gòu)程序IF:if條件then語句[else語句];條件后面有一個then。如果語句不止一句,要用begin和end包上(就像C++中的“{”和“}”)。如果用else,它前面的語句不能加分號。CASE:同switch。例如:

caseaof

1:ans:=0;

2:ans:=2;

3:beginans:=4;inc(j)end;

elsewriteln('Error') {此處沒有分號}

end;(seqt0f_053)循環(huán)結(jié)構(gòu)程序如果語句只有一行,可以像C++一樣,把begin和end刪除。FOR:Pascal語言示例對應(yīng)的C++語句fori:=10to15begin ……end;for(i=10;i<=15;i++){ ……}fori:=20downto15begin ……end;for(i=20;i<=15;i--){ ……}WHILE:Pascal語言示例對應(yīng)的C++語句whilea>0dobegin ……end;while(a>0){ ……}REPEAT…UNTIL:Pascal語言示例對應(yīng)的C++語句repeat ……untila>0;do{ ……}while(!(a>0)); //until和while是反義詞注意,無論里面有幾行代碼,repeat…until都不需要begin和end。SEQfulu\c\*ALPHABETICA.seqtp0f6函數(shù)和過程過程

procedurefunc(a,b:integer;c:longint); //注意哪里有分號

var

i:integer;…… //必須在開頭聲明變量

begin

…… //用exit代替“return”

end;函數(shù)

functionabc():longint; //函數(shù)是longint類型的

var

……

begin

……

end;

返回一個值:“abc:=10;”,也可寫成“result:=10;”。執(zhí)行之后不會跳出函數(shù)。

“exit(10);”和“return10;”一模一樣,立即返回10,函數(shù)結(jié)束。procedurefunc(a,b:integer;varc:integer);

其中的“varc:integer”相當(dāng)于“int&c”。SEQfulu\c\*ALPHABETICA.seqtp0f7文件操作text類型代表文本文件。在聲明變量時看到“fp:text”,說明fp是用于文件操作的。

下面假設(shè)已經(jīng)定義了fp。讀文件:先來一句:assign(fp,'文件名');馬上接一句:reset(fp);讀取變量:read和readln的第一個參數(shù)是fp,如readln(fp,var1,var2,...,varn);寫文件:先來一句:assign(fp,'文件名');馬上接一句:rewrite(fp);寫變量:write和writeln的第一個參數(shù)是fp,如writeln(fp,var1,var2,...,varn);輸入/輸出重定向:Pascal也有輸入/輸出重定向。此時,assign的第一個參數(shù)是input或output。程序?qū)懲?,別忘記關(guān)閉文件:close(fp);

有時如果忘記關(guān)閉文件,會得0分的(找不到輸出文件,或答案錯誤)。SEQfulu\c\*ALPHABETICA.seqtp0f8FreePascalIDE問題的處理方法Pascal的IDE主要有三種:一種是LazarusIDE,一種是FreePascalIDE,還有一種是GUIDE。競賽中使用的FreePascalIDE屬于使用控制臺

溫馨提示

  • 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

提交評論