該內容爲學習 《PASCAL程序設計 第2版》鄭啓華編著 的筆記,部分與c語言對比學習,方便記憶。
基本介紹
保留字(35個)
AND、ARRAY、BEGIN、CASE、CONST、DIV、DO、DOWNTO、ELSE、END、FILE、FOR、FUNCTION、GOTO、IF、IN、LABEL、MOD、NIL、NOT、OF、OR、PACKED、PROCEDURE、PROGRAM、RECORD、REPEAT、SET、THEN、TO、TYPE、UNTIL、VAR、WHILE、WITH。(加粗項NIL不常見需注意)
標識符
1. 以字母開頭的字母、數字組合。(與c語言不同,不能有 ' _ ' 。)
2. 長度沒有限制,但是pascal能識別的只有8位。例 students1 和 students2 只能表示同一標識符 students 。
3. 標準標識符(39個):
標準常量(3個) | false, true, maxint |
標準類型(5個) | integer, real, char, boolean, text |
標準文件(2個) | input, output |
標準函數(17個) | abs, arctan, chr, cos, eof, eoln, exp, ln, odd, ord, pred, round, sin, sqr, sqrt, succ, trunc |
標準過程(12個) | get, new, pack, page, put, read, readln, reset, rewrite, unpack, write, writeln |
程序結構
1. 例:已知半徑,求圓周長和麪積。
PROGRAM circle(input, output);
{已知圓半徑求圓周長和麪積}
CONST
pi = 3.14159;
VAR
r, l, s : real;
BEGIN
read(r);
l := 2*pi*r;
s := pi*r*r;
write(r, l, s);
END.
2. 完整的程序結構。
一個具體的程序不需要包括以下所有內容,但如果有以下內容,需按順序出現。
PROGRAM 程序名(參數);
LABEL
標號說明;
CONST
常量說明;
TYPE
類型說明;
VAR
變量說明;
FUNCTION
函數說明;
PROCEDURE
過程說明;
BEGIN
...
END.
順序結構
標準數據類型
1. 實型(real):即小數(132.67)和指數(1.3267e+2),和c語言差不多。
其中需注意的幾點是:
- 沒有 tan 函數,需寫成 sin(x)/cos(x)
- 應寫成 exp(2.5)
- 應寫爲 ln(x), 寫爲 ln(x)/ln(10)
- 沒有指數運算,sqr(x)表示平方, 爲 exp( y*ln(x) )
- trunc表示去尾,round表示四捨五入,例:trunc(1.6)=1,round(1.6)=2
2. 整型(integer) :正數、負數、0。
- DIV爲商,MOD爲餘數,例:10 DIV 3 = 3, 10 MOD 3 = 1
- / , sin, cos, arctan, exp, ln, sqrt(開根號)的結果均爲實型
- abs(絕對值),sqr(平方)
- pred(前導,小一位),succ(後繼,大一位),例:pred(-5)=-6,succ(-5)=-4
- odd(奇函數),判斷該數的奇偶,例:odd(7)=true,odd(8)=false
- chr(取字符),ASCII碼的轉換,例:chr(65)='A'
- 運算中有實型和整型,則結果爲實型
3. 字符型(char)
- ''代表空格字符,''''代表字符'
- ord()對應整型的chr(),例:ord('A')=65
- pred('b')='a',succ('b')='c'
4. 布爾型(boolean):false,true
- ord(true)=1,pred(ture)=false,succ(false)=true,false沒有前導,true沒有後繼
- 邏輯運算:AND, OR, NOT,跟C相同。優先級:NOT>AND>OR
- 關係運算(>, <等)優先級低於邏輯運算,其中不等於寫爲 ' <> '
基本語句
1. 賦值:與c語言的 ' = ' 不同,pascal爲 ' := ' 。例 i := i+1;
2. read()語句:從終端讀入數據,類似 scanf()。
read(a, b, c, d);
{實數,用空格隔開}
1.1 1.2 1.3 1.4
{字符,中間不間隔}
abcd
{混合,前2個爲字符,第3個爲整型,第4個爲實數}
ab 1 1.2
另有readln()語句,與read區別如下:
輸入:
1.1 1.2 1.3
1.4 1.5 1.6
執行1:(a=1.1, b=1.2, c=1.3, d=1.4)
read(a, b);
read(c, d);
執行2:(a=1.1, b=1.2, c=1.4, d=1.5)
readln(a, b);
readln(c, d);
3. write()語句:打印結果,類似printf()。
- writeln(); 打印完後換行,writeln; 表示打印空行
- 可用場寬來控制打印輸出的佔位數,其中實型可用2個值分別表示整數位和小數位
選擇結構
IF語句
if-else 結構和c語言差不多,語法如下:
IF <條件>
THEN <語句1>
ELSE <語句2>
{例1:複合:讀入x和y,交換次序使x>y}
if x<y
then
BEGIN
temp := x;
x := y;
y := temp; {該處分號可不需要}
END;
writeln('x=', x:8:2, ' y=', y:8:2); {該處分號可不需要}
{例2:根據成績輸出結果}
if score>=90
then writeln('outstanding')
else if score>=60
then writeln('satisfactory')
else writeln('unsatisfactory')
第2個程序中,因爲都在同一if語句中,if語句沒有結束不要用 ' ; ' ,不然會報錯。
而第1個程序中有begin-end的複合,所以中間需要用分號。
複合IF語句與多重IF語句執行效率更高。
改了一下程序的縮進關係,更符合個人理解。
CASE語句
和c語言的switch-case差不多,語法如下:
CASE <表達式> OF
<值1> : <語句1>;
...
END;
{例:簡單計算器,輸入數值和運算符,輸出計算結果}
CASE oper OF
'+' : result := x+y;
'-' : result := x-y;
'*' : result := x*y;
'/' : result := x/y; {可不要分號}
END;
wtireln(x:6:2, oper, y:6:2, '=', result:8:4);
上述例子中,輸入時需注意:
read(x, oper, y);
輸入:
2.51*3.56
2.51 * 3.56
2.51 *3.56
均報錯
read(oper, x, y);
輸入:
* 2.51 3.56
可成功執行
循環結構
FOR語句
1. 語法:
FOR <循環變量> := <初值> TO/DOWNTO <終值> DO
BEGIN
<循環體>
END;
其中,循環變量遞增用 TO,遞減用 DOWNTO。
如果循環體僅爲一個單獨的語句,則不需要加BEGIN-END。
2. 循環體類型:c語言的循環體只能爲整型和布爾型,而pascal可以是所有有序的類型,如:
PROGRAM test(input, ouput);
VAR
ch: char;
BEGIN
FOR ch:='a' TO 'z' DO
write(ch);
writeln;
FOR ch:='z' DOWNTO 'a' DO
write(ch);
END.
輸出:
abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba
3. 一個有趣的例子:畫出sinx的圖形
PROGRAM graph(input, ouput);
CONST
pi=3.14159;
VAR
i, wide: integer;
y: real;
BEGIN
FOR i:=0 TO 24 DO
BEGIN
y := sin(i*15*pi/180); {把角度變成弧度,計算sinx的值}
wide := round(35*y+40); {把該值放大}
writeln('*':wide);
END;
END.
爲了輸出函數曲線,讓每行輸出一個 ' * ',反映函數值的變化。
把輸出的屏幕寬度定爲80字符,則中心點在40。
y的值爲[-1, 1],爲了便於顯示讓範圍擴大35倍再加上40,即 35*y+40 --> [5, 75]。
x從0°開始,每隔15°輸出一次,共360°,即25個值。
WHILE語句
同c語言的while語句差不多,語法:
WHILE <布爾表達式> DO
BEGIN
<循環體>
END;
REPEAT語句
類似c語言的 do...while 語句,語法:
REPEAT
BEGIN
<循環體>
END;
UNTIL <布爾表達式>