您的位置首页百科问答

free pascal教程?

free pascal教程?

的有关信息介绍如下:

free pascal教程?

第一章、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 aEND;avg:=s/i;writeln(……);END.[例2]:求s=1!+2!+3!+……+10!program sum_fac(input,output);vari,j,s,m:integer;begins:=0:for j:=1 to 10 dobeginm:=1;for j:=1 to i dom:=m*j;s:=s+m;end;write(……);end;二、while语句格式:WHILE <条件> DO<循环体>[例1]:输入一串字符串,求第一个“,”前的大小写字母个数和其它字符个数。program string(input,output);varch:char;c,s,o:integer;beginwrite(……);read(ch);c:=0;s:=0;o:=0;while ch<>',' dobeginif (ch>='A')and(ch<='Z') thenc:=c+1else if (ch>='a')and(ch<='z') thens:=s+1elseo:=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;varp:real;beginp:=(a+b+c)/2;area:=sqrt(p*(p-a)*(p-b)*(p-c);end;2、函数的调用1)、函数的调用必然出现在表达式中(等号的右边),不能以单独地在语句出现2)、调用时,将每个实参传递给对应的形参program ml_area(input,output);varl1,l2,l3,l4,l5,l6,l7,s:real;function area(a,b,c:real):real;varp:real;beginp:=(a+b+c)/2;area:=sqrt(p*(p-a)*(p-b)*(p-c);end;beginwrite('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);varx,y,z:integer;procedure s(x:integer; var y:integer);varz:integerbeginx:=5; y:=6; z:=7;end;beginx:=1; y:=2; z:=3;s(x,y);writeln(x,y,z);end.输出结果:1 6 3[例3]:求五个数中的最大值。program max_in_5(input,output);varn1,n2,n3,n4,n5:integer;procedure lagest_in_three(a,b,c:integer;var e:integer)begine:=a;if b>e thene:=b;if c>e thene:=c;end;beginwrite('……');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:vari:integer;beginfac:=1;for i:=1 to x dofac:=fac*i;end;function c(a,b:integer):real;beginc:=fac(a)/fac(b)*fac(a-b)end;beginwriteln('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);varn:integer;function fac(n:integer):integer;beginif n=1 then fac:=1else fac:=n*fac(n-1);end;[例2]、用递归计算1)、function power(a,b:integer):integer;beginif b=1 then power:=aelse power:=a*power(a,b-1);end;2)、procedure power(a,b:integer;var c:integer);beginif b=1 then c:=aelse power(a,b-1,c);c:=a*c;end;[例3]、输入一串字符串(以‘.’结束)按逆顺输出program revers(input,output);procedure rever;varc:char;beginread(c);if c<>'.' then rever;write(c);end;beginrever;end.五、标识符的作用域1、全局变量和局部变量1)、全局变量:在主程序中被说明,作用域:整个程序;2)、局部变量:在子程序中被说明,作用域:主程序及其下级的程序。2、子程序(function、precedure)的作用域一个子程序可以调用它的下一级了程序,或可以调用在它之前定义的同级子程序。[例]写出程序运行的结果。program range(input,output);varx,y:integer;procedure p1;varx,z:integer;beginx:=10; y:=y+1; z:=10;writeln(x,y,z);end;beginx:=1; y:=1;writeln(x,y);p1;writeln(x,y,z);end.结果为:(x y z)1 110 2 101 2 (error)3、在子程序中被改变值的变量可以回传的两种方法:a、变量参数 procedure(var 变量名);b、在上一级程序定义了的,且在下一级程序未被重新定义的。[注]如果主程序的变量在子程序被重新定义,在子程序中主程序的变量被稳藏,在主程序中子程序的变量无效。

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、在上一级程序定义了的,且在下一级程序未被重新定义的。

[注]如果主程序的变量在子程序被重新定义,在子程序中主程序的变量被稳藏,在主程序中子程序的变量无效。