pascal語言基礎(一)

該內容爲學習 《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)
  • e^{^{2.5}} 應寫成 exp(2.5)
  • lnx 應寫爲 ln(x),lgx 寫爲 ln(x)/ln(10)
  • 沒有指數運算,sqr(x)表示平方,x^{_{y}} 爲 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 <布爾表達式>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章