第一章、pascal介紹
一、pascal的基本語法單位
1、基本符號
A——Z;a——z;0——9;+,-,*,/,=,<>,<=,>=,<,>,(,),[,],{,},:=,,,;,.,:,..,",^
注意:pascal語言除了能使用以上規定的基本符號外,不得使用任何其它符號。
2、保留字
AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DIWNTO,ELSE,END,FILE,FOR,FUNTION,GOTO,IF,LABEL,MOD,NIL,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH。
注意:所起的檔名不能與保留字相同。
3、識別符號
以字母打頭的字母數字串,長度小於等於8。
標準識別符號(共三十九個):
標準常量:
false,true,maxint
標準型別:
integer,real,char,boolean,text
標準檔案:
input,output
標準函式:
abs,arctan,chr,cos,eof,eoln,exp,ln,odd,ord,ored,round,sin,sqr,
sqrt,succ,trunc
標準過程:
get,new,pack,page,put,read,readln,reset,rewrite,unpack,write, writeln
二、程式結構
1、由三大部分組成:程式首部,說明部分,語句部分。
PROGRAM 程式名(input,output);
{……} 解釋
CONST
pi=3.14159;
VAR
r,l,s:real;
BEGIN
write("input r:");
read(r);
l:=2*pi*r;
write("l=",l,"s=",s);
END;
2、大量使用標點符號,保留字後不加標點符號(END除外)。
第二章、順序結構程式設計
一、標準資料型別
1、實型(real)
小數表示法、指數表示法
2、整型(integer)
正、負整數和零
maxint=32767
pred:前導;succ:後繼
[例]:pred(3)=2;succ(3)=4;
pred(true)=false;
succ(false)=true
3、字元型(char)
是指在兩個單引號中的一個字元。
ord:取序數
[例]:ord("A")=65
4、布林型(boolean)
false;true
用於布林型的運算:NOT、AND、OR
ord(true)=1;ord(false)=0
二、常量和變數的定義
常量的定義:CONST
blank=" ";
變數的定義:VAR
r,l,s:read;
cl:char;
三、表示式及賦值語句
[例]:b2-4ac 寫成:sqt(b)-4*a*c
賦值:<變數>:=<表示式>
四、輸入輸出語句
1、輸入語句:read(<變量表>);readln(<變量表>)
注:表示式裡面變數與變數之間用逗號隔開;
readln表示下一個語句將從下一行開始操作;
輸入時,整型或實型用空格或回車隔開,字元型之間無需分隔,一個接一
個輸入。
2、輸出語句:write(<輸出表>);writeln(<輸出表>)
注:對real或integer限定場寬:write("a=",a:2:0) {a為real型}
第三章、選擇結構程式設計
一、if 語句
格式:IF<條件>
THEN<語句1>
ESLE<語句2>
注:1、ELSE與最近的並且未被配對的ELSE配對;
2、複合,如果THEN或ELSE帶有多個語句,則要用BEGIN——END括起來。
二、CASE語句
格式:CASE <表示式> OF
<值表1>:<語句1>
<值表2>:<語句2>
……
<值表n>:<語句n>
[ELSE<語句>]
END
注:1、值表的三種表達方式:“1:”;“2,4,6:”;“10..100:”
2、CHAR,INTEGER,BOOLEAN有序
第四章、迴圈結構程式設計
一、FOR語句
格式:1、FOR <迴圈變數>:=<初值> TO <終值> DO <語句>;
2、FOR<迴圈變數>:=<終值> DOWNTO <初值> DO <語句>。
[例1]:輸入10個數,求最大值、最小值、和、及平均值。
PROGRAM ten(input,output);
a,s,max,min,avg:real;
i:integer;
write("please input:");
read(a);
s:=a;
max:=a;
min:=a;
FOR i:=2 TO 10 DO
s:=s+a;
IF a>max THEN
max:=a
ELSE
IF a<min THEN min:=a
avg:=s/i;
writeln(……);
END.
[例2]:求s=1!+2!+3!+……+10!
program sum_fac(input,output);
var
i,j,s,m:integer;
begin
s:=0:
for j:=1 to 10 do
m:=1;
for j:=1 to i do
m:=m*j;
s:=s+m;
end;
write(……);
二、while語句
格式:WHILE <條件> DO
<迴圈體>
[例1]:輸入一串字串,求第一個“,”前的大小寫字母個數和其它字元個數。
program string(input,output);
ch:char;
c,s,o:integer;
read(ch);
c:=0;
s:=0;
o:=0;
while ch<>"," do
if (ch>="A")and(ch<="Z") then
c:=c+1
else if (ch>="a")and(ch<="z") then
s:=s+1
else
o:=o+1;
write(……);
end.
三、REPEAT語句
格式:REPEAT
UNTIL
[例]:以字元(char)的形式讀入一實數,以實形(real)輸出該數。
第五章、函式與過程程式設計
一、函式(包括標準函式和自定義函式)
1、函式的定義
格式:FUNCTION 函式名(<形參表>):返回值型別;
<變數說明>
<函式體>
[注]:1、形參表每個引數都寫明其型別;
2、有且只有一個返回值,並且要將返回值賦值給函式名。
[例]:求五邊形的面積
function area(a,b,c:real):real;
p:real;
p:=(a+b+c)/2;
area:=sqrt(p*(p-a)*(p-b)*(p-c);
2、函式的呼叫
1)、函式的呼叫必然出現在表示式中(等號的右邊),不能以單獨地在語句出現
2)、呼叫時,將每個實參傳遞給對應的形參
program ml_area(input,output);
l1,l2,l3,l4,l5,l6,l7,s:real;
write("input");
readln(l1,l2,l3,l4,l5,l6,l7);
s:=area(l1,l2,l6)+area(l2,l6,l7)+……;
writeln("s=",s:10:3);
二、過程
格式:PROCEDURE<過程名>(<形式引數表>)
<說明部分>
<過程體>
END;
[例1]某過程的形參表為(var a,b:real;c,d:integer;var e:char);
主程式中有如下變數說明:x,y:real; m:integer; next:char;
則以下實參表中合法的有:(1、2、3)
1、(x,y,m+3,70,next)
2、(y,x,m,m,next)
3、(y,x,35,m DIV 10,next)
4、(m,x,30,10,next)
5、(x,y,m,10)
6、(35,0,y,m,10,next)
7、(x,y,m,m/10,next)
8、(A,B,30,10,next)
[例2]求程式輸出的結果。
program ex(input,output);
x,y,z:integer;
procedure s(x:integer; var y:integer);
z:integer
x:=5; y:=6; z:=7;
x:=1; y:=2; z:=3;
s(x,y);
writeln(x,y,z);
輸出結果:1 6 3
[例3]:求五個數中的最大值。
program max_in_5(input,output);
n1,n2,n3,n4,n5:integer;
procedure lagest_in_three(a,b,c:integer;var e:integer)
e:=a;
if b>e then
e:=b;
if c>e then
e:=c;
write("……");
readln(n1,n2,n3,n4,n5);
lagest(n1,n2,n3,n1);
lagest(n1,n4,n5,n1);
write(n1);
三、巢狀
[例]:計算、
program Cmn(input,output);
function fax(x:integer):integer:
fac:=1;
for i:=1 to x do
fac:=fac*i;
function c(a,b:integer):real;
c:=fac(a)/fac(b)*fac(a-b)
writeln("c(9,3)=",c(9,3));
writeln("c(8,5=",c(8,5));
四、遞迴
函式或過程呼叫它本身,稱為遞迴。
[例1]、用遞迴計算n! {=m!/n!(m-n)!}
program fac_n(input,output);
n:integer;
function fac(n:integer):integer;
if n=1 then fac:=1
else fac:=n*fac(n-1);
[例2]、用遞迴計算
1)、function power(a,b:integer):integer;
if b=1 then power:=a
else power:=a*power(a,b-1);
2)、procedure power(a,b:integer;var c:integer);
if b=1 then c:=a
else power(a,b-1,c);
c:=a*c;
[例3]、輸入一串字串(以‘.’結束)按逆順輸出
program revers(input,output);
procedure rever;
c:char;
read(c);
if c<>"." then rever;
write(c);
rever;
五、識別符號的作用域
1、全域性變數和區域性變數
1)、全域性變數:在主程式中被說明,作用域:整個程式;
2)、區域性變數:在子程式中被說明,作用域:主程式及其下級的程式。
2、子程式(function、precedure)的作用域
一個子程式可以呼叫它的下一級了程式,或可以呼叫在它之前定義的同級子程式。
[例]寫出程式執行的結果。
program range(input,output);
x,y:integer;
procedure p1;
x,z:integer;
x:=10; y:=y+1; z:=10;
x:=1; y:=1;
writeln(x,y);
p1;
結果為:
(x y z)
1 1
10 2 10
1 2 (error)
3、在子程式中被改變值的變數可以回傳的兩種方法:
a、變數引數 procedure(var 變數名);
b、在上一級程式定義了的,且在下一級程式未被重新定義的。
[注]如果主程式的變數在子程式被重新定義,在子程式中主程式的變數被穩藏,在主程式中子程式的變數無效。
第一章、pascal介紹
一、pascal的基本語法單位
1、基本符號
A——Z;a——z;0——9;+,-,*,/,=,<>,<=,>=,<,>,(,),[,],{,},:=,,,;,.,:,..,",^
注意:pascal語言除了能使用以上規定的基本符號外,不得使用任何其它符號。
2、保留字
AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DIWNTO,ELSE,END,FILE,FOR,FUNTION,GOTO,IF,LABEL,MOD,NIL,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH。
注意:所起的檔名不能與保留字相同。
3、識別符號
以字母打頭的字母數字串,長度小於等於8。
標準識別符號(共三十九個):
標準常量:
false,true,maxint
標準型別:
integer,real,char,boolean,text
標準檔案:
input,output
標準函式:
abs,arctan,chr,cos,eof,eoln,exp,ln,odd,ord,ored,round,sin,sqr,
sqrt,succ,trunc
標準過程:
get,new,pack,page,put,read,readln,reset,rewrite,unpack,write, writeln
二、程式結構
1、由三大部分組成:程式首部,說明部分,語句部分。
PROGRAM 程式名(input,output);
{……} 解釋
CONST
pi=3.14159;
VAR
r,l,s:real;
BEGIN
write("input r:");
read(r);
l:=2*pi*r;
write("l=",l,"s=",s);
END;
2、大量使用標點符號,保留字後不加標點符號(END除外)。
第二章、順序結構程式設計
一、標準資料型別
1、實型(real)
小數表示法、指數表示法
2、整型(integer)
正、負整數和零
maxint=32767
pred:前導;succ:後繼
[例]:pred(3)=2;succ(3)=4;
pred(true)=false;
succ(false)=true
3、字元型(char)
是指在兩個單引號中的一個字元。
ord:取序數
[例]:ord("A")=65
4、布林型(boolean)
false;true
用於布林型的運算:NOT、AND、OR
ord(true)=1;ord(false)=0
二、常量和變數的定義
常量的定義:CONST
pi=3.14159;
blank=" ";
變數的定義:VAR
r,l,s:read;
cl:char;
三、表示式及賦值語句
[例]:b2-4ac 寫成:sqt(b)-4*a*c
賦值:<變數>:=<表示式>
四、輸入輸出語句
1、輸入語句:read(<變量表>);readln(<變量表>)
注:表示式裡面變數與變數之間用逗號隔開;
readln表示下一個語句將從下一行開始操作;
輸入時,整型或實型用空格或回車隔開,字元型之間無需分隔,一個接一
個輸入。
2、輸出語句:write(<輸出表>);writeln(<輸出表>)
注:對real或integer限定場寬:write("a=",a:2:0) {a為real型}
第三章、選擇結構程式設計
一、if 語句
格式:IF<條件>
THEN<語句1>
ESLE<語句2>
注:1、ELSE與最近的並且未被配對的ELSE配對;
2、複合,如果THEN或ELSE帶有多個語句,則要用BEGIN——END括起來。
二、CASE語句
格式:CASE <表示式> OF
<值表1>:<語句1>
<值表2>:<語句2>
……
<值表n>:<語句n>
[ELSE<語句>]
END
注:1、值表的三種表達方式:“1:”;“2,4,6:”;“10..100:”
2、CHAR,INTEGER,BOOLEAN有序
第四章、迴圈結構程式設計
一、FOR語句
格式:1、FOR <迴圈變數>:=<初值> TO <終值> DO <語句>;
2、FOR<迴圈變數>:=<終值> DOWNTO <初值> DO <語句>。
[例1]:輸入10個數,求最大值、最小值、和、及平均值。
PROGRAM ten(input,output);
VAR
a,s,max,min,avg:real;
i:integer;
BEGIN
write("please input:");
read(a);
s:=a;
max:=a;
min:=a;
FOR i:=2 TO 10 DO
BEGIN
read(a);
s:=s+a;
IF a>max THEN
max:=a
ELSE
IF a<min THEN min:=a
END;
avg:=s/i;
writeln(……);
END.
[例2]:求s=1!+2!+3!+……+10!
program sum_fac(input,output);
var
i,j,s,m:integer;
begin
s:=0:
for j:=1 to 10 do
begin
m:=1;
for j:=1 to i do
m:=m*j;
s:=s+m;
end;
write(……);
end;
二、while語句
格式:WHILE <條件> DO
<迴圈體>
[例1]:輸入一串字串,求第一個“,”前的大小寫字母個數和其它字元個數。
program string(input,output);
var
ch:char;
c,s,o:integer;
begin
write(……);
read(ch);
c:=0;
s:=0;
o:=0;
while ch<>"," do
begin
if (ch>="A")and(ch<="Z") then
c:=c+1
else if (ch>="a")and(ch<="z") then
s:=s+1
else
o:=o+1;
read(ch);
end;
write(……);
end.
三、REPEAT語句
格式:REPEAT
<迴圈體>
UNTIL
[例]:以字元(char)的形式讀入一實數,以實形(real)輸出該數。
第五章、函式與過程程式設計
一、函式(包括標準函式和自定義函式)
1、函式的定義
格式:FUNCTION 函式名(<形參表>):返回值型別;
VAR
<變數說明>
BEGIN
<函式體>
END
[注]:1、形參表每個引數都寫明其型別;
2、有且只有一個返回值,並且要將返回值賦值給函式名。
[例]:求五邊形的面積
function area(a,b,c:real):real;
var
p:real;
begin
p:=(a+b+c)/2;
area:=sqrt(p*(p-a)*(p-b)*(p-c);
end;
2、函式的呼叫
1)、函式的呼叫必然出現在表示式中(等號的右邊),不能以單獨地在語句出現
2)、呼叫時,將每個實參傳遞給對應的形參
program ml_area(input,output);
var
l1,l2,l3,l4,l5,l6,l7,s:real;
function area(a,b,c:real):real;
var
p:real;
begin
p:=(a+b+c)/2;
area:=sqrt(p*(p-a)*(p-b)*(p-c);
end;
begin
write("input");
readln(l1,l2,l3,l4,l5,l6,l7);
s:=area(l1,l2,l6)+area(l2,l6,l7)+……;
writeln("s=",s:10:3);
end.
二、過程
格式:PROCEDURE<過程名>(<形式引數表>)
VAR
<說明部分>
BEGIN
<過程體>
END;
[例1]某過程的形參表為(var a,b:real;c,d:integer;var e:char);
主程式中有如下變數說明:x,y:real; m:integer; next:char;
則以下實參表中合法的有:(1、2、3)
1、(x,y,m+3,70,next)
2、(y,x,m,m,next)
3、(y,x,35,m DIV 10,next)
4、(m,x,30,10,next)
5、(x,y,m,10)
6、(35,0,y,m,10,next)
7、(x,y,m,m/10,next)
8、(A,B,30,10,next)
[例2]求程式輸出的結果。
program ex(input,output);
var
x,y,z:integer;
procedure s(x:integer; var y:integer);
var
z:integer
begin
x:=5; y:=6; z:=7;
end;
begin
x:=1; y:=2; z:=3;
s(x,y);
writeln(x,y,z);
end.
輸出結果:1 6 3
[例3]:求五個數中的最大值。
program max_in_5(input,output);
var
n1,n2,n3,n4,n5:integer;
procedure lagest_in_three(a,b,c:integer;var e:integer)
begin
e:=a;
if b>e then
e:=b;
if c>e then
e:=c;
end;
begin
write("……");
readln(n1,n2,n3,n4,n5);
lagest(n1,n2,n3,n1);
lagest(n1,n4,n5,n1);
write(n1);
end.
三、巢狀
[例]:計算、
program Cmn(input,output);
function fax(x:integer):integer:
var
i:integer;
begin
fac:=1;
for i:=1 to x do
fac:=fac*i;
end;
function c(a,b:integer):real;
begin
c:=fac(a)/fac(b)*fac(a-b)
end;
begin
writeln("c(9,3)=",c(9,3));
writeln("c(8,5=",c(8,5));
end.
四、遞迴
函式或過程呼叫它本身,稱為遞迴。
[例1]、用遞迴計算n! {=m!/n!(m-n)!}
program fac_n(input,output);
var
n:integer;
function fac(n:integer):integer;
begin
if n=1 then fac:=1
else fac:=n*fac(n-1);
end;
[例2]、用遞迴計算
1)、function power(a,b:integer):integer;
begin
if b=1 then power:=a
else power:=a*power(a,b-1);
end;
2)、procedure power(a,b:integer;var c:integer);
begin
if b=1 then c:=a
else power(a,b-1,c);
c:=a*c;
end;
[例3]、輸入一串字串(以‘.’結束)按逆順輸出
program revers(input,output);
procedure rever;
var
c:char;
begin
read(c);
if c<>"." then rever;
write(c);
end;
begin
rever;
end.
五、識別符號的作用域
1、全域性變數和區域性變數
1)、全域性變數:在主程式中被說明,作用域:整個程式;
2)、區域性變數:在子程式中被說明,作用域:主程式及其下級的程式。
2、子程式(function、precedure)的作用域
一個子程式可以呼叫它的下一級了程式,或可以呼叫在它之前定義的同級子程式。
[例]寫出程式執行的結果。
program range(input,output);
var
x,y:integer;
procedure p1;
var
x,z:integer;
begin
x:=10; y:=y+1; z:=10;
writeln(x,y,z);
end;
begin
x:=1; y:=1;
writeln(x,y);
p1;
writeln(x,y,z);
end.
結果為:
(x y z)
1 1
10 2 10
1 2 (error)
3、在子程式中被改變值的變數可以回傳的兩種方法:
a、變數引數 procedure(var 變數名);
b、在上一級程式定義了的,且在下一級程式未被重新定義的。
[注]如果主程式的變數在子程式被重新定義,在子程式中主程式的變數被穩藏,在主程式中子程式的變數無效。