一步一个脚印学PASCAL
http://www.mydrs.org 5/27/2001 大榕树
第一章、pascal介绍 </P><P>一、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。 注意:所起的文件名不能与保留字相同。</P><P> 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</P><P>二、程序结构 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除外)。 </P><P>第二章、顺序结构程序设计</P><P>一、标准数据类型 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</P><P>二、常量和变量的定义 常量的定义:CONST pi=3.14159; blank=' '; 变量的定义:VAR r,l,s:read; cl:char;</P><P>三、表达式及赋值语句 [例]:b²-4ac 写成:sqt(b)-4*a*c 赋值:<变量>:=<表达式></P><P>四、输入输出语句 1、输入语句:read(<变量表>);readln(<变量表>) 注:表达式里面变量与变量之间用逗号隔开; readln表示下一个语句将从下一行开始操作; 输入时,整型或实型用空格或回车隔开,字符型之间无需分隔,一个接一 个输入。 2、输出语句:write(<输出表>);writeln(<输出表>) 注:对real或integer限定场宽:write('a=',a:2:0) {a为real型}</P><P>第三章、选择结构程序设计</P><P>一、if 语句 格式:IF<条件> THEN<语句1> ESLE<语句2> 注:1、ELSE与最近的并且未被配对的ELSE配对; 2、复合,如果THEN或ELSE带有多个语句,则要用BEGIN——END括起来。</P><P>二、CASE语句 格式:CASE <表达式> OF <值表1>:<语句1> <值表2>:<语句2> …… <值表n>:<语句n> [ELSE<语句>] END 注:1、值表的三种表达方式:“1:”;“2,4,6:”;“10..100:” 2、CHAR,INTEGER,BOOLEAN有序</P><P>第四章、循环结构程序设计</P><P>一、FOR语句 格式:1、FOR <循环变量>:=<初值> TO <终值> DO <语句>; 2、FOR<循环变量>:=<终值> DOWNTO <初值> DO <语句>。 [例1]:输入10个数,求最大值、最小值、和、及平均值。</P><P>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.</P><P>[例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;</P><P>二、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.</P><P>三、REPEAT语句 格式:REPEAT <循环体> UNTIL</P><P>[例]:以字符(char)的形式读入一实数,以实形(real)输出该数。</P><P>第五章、函数与过程程序设计 一、函数(包括标准函数和自定义函数) 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.</P><P>二、过程 格式:PROCEDURE<过程名>(<形式参数表>) VAR <说明部分> BEGIN <过程体> END;</P><P>[例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)</P><P>[例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</P><P>[例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.</P><P>三、嵌套 [例]:计算 、 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.</P><P>四、递归 函数或过程调用它本身,称为递归。 [例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; </P><P>[例3]、输入一串字符串(以‘.’结束)按逆顺输出 program revers(input,output); procedure rever; var c:char; begin read(c); if c<>'.' then rever; write(c); end; begin rever; end.</P><P>五、标识符的作用域 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.</P><P>结果为: (x y z) 1 1 10 2 10 1 2 (error)</P><P>3、在子程序中被改变值的变量可以回传的两种方法: a、变量参数 procedure(var 变量名); b、在上一级程序定义了的,且在下一级程序未被重新定义的。 [注]如果主程序的变量在子程序被重新定义,在子程序中主程序的变量被稳藏,在主程序中子程序的变量无效。
|