一步一个脚印学PASCAL.docx
《一步一个脚印学PASCAL.docx》由会员分享,可在线阅读,更多相关《一步一个脚印学PASCAL.docx(8页珍藏版)》请在冰点文库上搜索。
一步一个脚印学PASCAL
一步一个脚印学PASCAL
2008-04-1918:
19
第一章、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('inputr:
');
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;
三、表达式及赋值语句
[例]:
b²-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个数,求最大值、最小值、和、及平均值。
Programten(input,output);
var
a,s,max,min,avg:
real;
i:
integer;
BEGIN
write('pleaseinput:
');
read(a);
s:
=a;
max:
=a;
min:
=a;
FORi:
=2TO10DO
BEGIN
read(a);
s:
=s+a;
IFa>maxTHEN
max:
=a
ELSE
IFa=a
END;
avg:
=s/i;
writeln(……);
END.
[例2]:
求s=1!
+2!
+3!
+……+10!
Programsum_fac(input,output);
var
i,j,s,m:
integer;
begin
s:
=0:
forj:
=1to10do
begin
m:
=1;
forj:
=1toido
m:
=m*j;
s:
=s+m;
end;
write(……);
end;
二、while语句
格式:
WHILE<条件>DO
<循环体>
[例1]:
输入一串字符串,求第一个“,”前的大小写字母个数和其它字符个数。
Programstring(input,output);
var
ch:
char;
c,s,o:
integer;
begin
write(……);
read(ch);
c:
=0;
s:
=0;
o:
=0;
whilech<>','do
begin
if(ch>='A')and(ch<='Z')then
c:
=c+1
elseif(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、有且只有一个返回值,并且要将返回值赋值给函数名。
[例]:
求五边形的面积
functionarea(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)、调用时,将每个实参传递给对应的形参
Programml_area(input,output);
var
l1,l2,l3,l4,l5,l6,l7,s:
real;
functionarea(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]某过程的形参表为(vara,b:
real;c,d:
integer;vare:
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,mDIV10,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]求程序输出的结果。
Programex(input,output);
var
x,y,z:
integer;
procedures(x:
integer;vary:
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.
输出结果:
163
[例3]:
求五个数中的最大值。
Programmax_in_5(input,output);
var
n1,n2,n3,n4,n5:
integer;
procedurelagest_in_three(a,b,c:
integer;vare:
integer)
begin
e:
=a;
ifb>ethen
e:
=b;
ifc>ethen
e:
=c;
end;
begin
write('……');
readln(n1,n2,n3,n4,n5);
lagest(n1,n2,n3,n1);
lagest(n1,n4,n5,n1);
write(n1);
end.
三、嵌套
[例]:
计算、
Programcmn(input,output);
functionfax(x:
integer):
integer:
var
i:
integer;
begin
fac:
=1;
fori:
=1toxdo
fac:
=fac*i;
end;
functionc(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)!
}
Programfac_n(input,output);
var
n:
integer;
functionfac(n:
integer):
integer;
begin
ifn=1thenfac:
=1
elsefac:
=n*fac(n-1);
end;
[例2]、用递归计算
1)、functionpower(a,b:
integer):
integer;
begin
ifb=1thenpower:
=a
elsepower:
=a*power(a,b-1);
end;
2)、procedurepower(a,b:
integer;varc:
integer);
begin
ifb=1thenc:
=a
elsepower(a,b-1,c);
c:
=a*c;
end;
[例3]、输入一串字符串(以‘.’结束)按逆顺输出
Programrevers(input,output);
procedurerever;
var
c:
char;
begin
read(c);
ifc<>'.'thenrever;
write(c);
end;
begin
rever;
end.
五、标识符的作用域
1、全局变量和局部变量
1)、全局变量:
在主程序中被说明,作用域:
整个程序;
2)、局部变量:
在子程序中被说明,作用域:
主程序及其下级的程序。
2、子程序(function、precedure)的作用域
一个子程序可以调用它的下一级了程序,或可以调用在它之前定义的同级子程序。
[例]写出程序运行的结果。
Programrange(input,output);
var
x,y:
integer;
procedurep1;
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.
结果为:
(xyz)
11
10210
12(error)
3、在子程序中被改变值的变量可以回传的两种方法:
a、变量参数procedure(var变量名);
b、在上一级程序定义了的,且在下一级程序未被重新定义的。
[注]如果主程序的变量在子程序被重新定义,在子程序中主程序的变量被稳藏,在主程序中子程序的变量无效。