




已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PASCAL程序设计基础,柴沟中学 鹿咏梅,一、 PASCAL语言基础知识,二、 结构化程序设计,三、 数组与字符串,四、 函数与过程,五、 递归,一、PASCAL程序的基本结构,Program area; Const pi=3.1416; Var r:integer; s:real; Begin writeln(enter r=); readln(r); s:=pi*r*r; write(s=,s) End.,程序首部,说明部分,执行部分,Program 程序名;,Const 常量说明; Type 类型说明; Var 变量说明; Function 函数说明; Procedure 过程说明;,Begin 语句1; 语句2; End.,例:已知圆的半径r,编程求圆的面积s.,Program,Const,Var,Begin,End.,第一节 PASCAL语言基础知识,二、PASCAL字符与符号,1标识符 (1) 标识符的定义:标识符就是以字母开头的字母数字序列,有效长度为63个字符,并且大小写等效。可以用来标示常量、变量、程序、函数等。,二、PASCAL字符与符号,(2) 标识符的分类: a.保留字(关键字) 所谓保留字是指在Pascal语言中具有特定的含义,标准Pascal语言中的保留字一共有35个. PROGRAM, BEGIN, END, CASE, FUNTION, PROCEDURE, ARRAY, AND,CONST,DIV,DO,DOWNTO,ELSE,FILE,FOR,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,PACKED,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH,二、PASCAL字符与符号,b.标准标识符:指Pascal语言预先定义的标识符,具有特殊含义。 标准常量 False Maxint True 标准类型 Boolean Char Real Integer 标准函数 Abs Arctan Chr Cos Eof Eoln Exp Ln Odd Ord Pred Round Sin Sqr Sqrt Succ Trunc 标准过程 Dispose Get New Pack Page Put Read Readln Reset Rewrite Unpack Write Writeln 标准文件 Input Output,二、PASCAL字符与符号,c用户自定义标识符:由你自己根据需要来定义。 选用的标识符不能与保留字和标准标识符相同。 在定义标识符时可以用的字符: AZ;az;09;+,-,*,/,=,=,(,),:=,;,.,:, 注:Pasca语言除了能使用以上规定的基本符号外,不得使用任何其它符号。,三、PASCAL数据类型,数据的一个重要特征就是它的类型,数据类型确定了数据的构成和可进行的运算。Pascal语言是一种强类型语言,不同类型间不能任意转换,不同类型的变量一般不允许作混合运算。程序中出现的所有常量、变量和用户自定义的数据必须预先说明后才能使用。,三、PASCAL数据类型,Pascal数据类型,简单类型,构造类型,指针类型,三、PASCAL数据类型,1.整型,类型 数值范围 shortint (短整型) -128128 integer(整型) -3276832767 longint(长整型) -21474836482147483647 byte(字节型) 0255 word(字类型) 065535,三、PASCAL数据类型,2.实型,类型 数值范围 real (基本实型) 2.9e-391.7e38 single (单精度实型) 1.5e-453.4e38 double(双精度实型) 5.0e-3241.7e308,三、PASCAL数据类型,3.布尔型,boolean,false,true,0,1,逻辑真,逻辑假,三、PASCAL数据类型,4.字符型,char,字符型的值必须用单引号括起来,字母作为字符型的值时,大小写是不等价的,并且字符型只允许单引号中有一个字符,否则就是字符串。,例:var c:char; c:=a,四、常量与变量,1.常量 (1)常量:在某个程序的整个过程中其值不变的量。 (2)常量定义:常量定义出现在说明部分。语法格式: const 常量标识符1=常量值1; . 常量标识符n=常量值n; 常量标识符的类型由定义它的常量的类型决定。,Const pi=3.1416; a=10; c=c; t=true;,四、常量与变量,2.变量 (1)变量:在某个程序的运行过程中其值可以发生改变的量 (2)变量说明:变量说明出现在说明部分。语法格式: var 变量标识符列表:类型; . 变量标识符列表:类型;,var a,b,c:integer; m,n:real ;,五、运算符和表达式,1.运算符 a.算术运算符 运算符 运算 运算对象 结果类型 + 加 整型、实型 只要有一个运算对象是实型,结果就 - 减 整型、实型 是实型,如果全部的运算对象都是整 * 乘 整型、实型 型并且运算不是除法,则结果为整型, / 除 整型、实型 若运算是除法,则结果是实型。 div 整除 整型 整型 mod 取余 整型 整型,5 div 3=1 5 mod 3=2,五、运算符和表达式,b.逻辑运算符 运算符 运算 运算对象 结果类型 not 逻辑非 布尔型 布尔型 and 逻辑与 布尔型 布尔型 or 逻辑或 布尔型 布尔型 xor 逻辑异或 布尔型 布尔型, not (非) 条件为True时,其结果值为False;否则为True;(取反)not(34) and (与) 两条件都为True时,其结果值为True;否则为False; or (或) 两条件中只要有一个为True ;其结果值为True;否则为False; xor (异或) 两条件的逻辑值不相同时,其结果值为True;否则为False;,五、运算符和表达式,c.关系运算符 运算符 运算 运算对象 结果类型 = 等于 简单类型 布尔型 不等于 简单类型 布尔型 大于 简单类型 布尔型 = 大于等于 简单类型 布尔型,运算符优先级:not*,/,div,mod,and xor,+,-,or in,=,=,=,五、运算符和表达式,2.表达式,(1)通过运算符把常量、变量、函数调用结合起来组成的式子。,pi*r*r Sum+2 (xy) and (z=y),五、运算符和表达式,(2)数学上的表达式与pascal语言表达式的区别 数学表达式 PASCAL表达式 注意 2a 2*a *号不能省略 ab a/b 除号的写法 ab ab 不等号的写法 ab a=b 小于等于号的写法,五、运算符和表达式,Pascal中的逻辑运算:,五、运算符和表达式,第二节 结构化程序设计,pascal程序的三种基本结构,顺序结构,分支结构,循环结构,(一)、什么是顺序结构: 【例1】:键盘输入两个变量的值,交换值后输出。 方法:间接交换法 算法分析:(“自顶向下,逐步求精”的编程思想) s1:通过键盘给a,b两个变量赋值; s2:交换a,b的值; s2-1:引入中间变量c; s2-2:在c中存放的a值; s2-3:在a中存放的b值; s2-4:在b中存放的c值; s3:输出变量a,b的值。 程序代码: program ex1; var a,b,c:integer; begin write(please input a,b:); read(a,b); writeln(a=,a,b=,b); c:=a; a:=b; b:=c; writeln(a=,a,b=,b) end.,一 . 顺序结构程序设计,Pascal 语言的语句分为简单语句(也称基本语句)和复合语句(也称构造语句),(二):几个简单语句: 1赋值语句: 格式:变量标识符:=表达式; 功能:计算和赋值双重功能: 【例2】写出程序执行后,变量的值。 程序代码: program ex2; var a,b:integer; c:real; ch:char; bool:boolean; begin a:=3; b:=a; b:=a+1; a:=a+1; c:=a+b; ch:=h; bool:=true; bool:=not bool; end. 说明:1)“:=”赋值号不同于“=”号,具有方向性,具有计算功能。 2)赋值号两边的类型应该相同。 3)一个赋值语句只能给一个变量赋值,变量可以进行多次赋值。 4)被赋值的变量可以作为因子参与运算。,2输入语句(read,readln): 格式:read(变量名表); readln read(a1,a2,a3); 等价于 read(a1);read(a2);read(a3); readln(a1,a2,a3); 等价于 read(a1);read(a2);read(a3);readln; 功能:通过键盘,给指定的变量赋值。 【例3】:写出程序运行后,变量的值。 程序代码: program ex3; var a,b,c:integer; i,j,k:real; ch1,ch2,ch3:char; begin read(a,b,c); readln(i,j,k); read(ch1,ch2,ch3); writeln(a=,a,b=,b,c=,c); writeln(i=,i, j=,j,k=,k); writeln(ch1=,ch1,ch2=,ch2,ch3=,ch3); end. 程序运行后,输入数据: 1 2 3 4 5 6.1 7 8 9 0 dos,执行readln后多余的数据将被忽略;执行read后多余的数据要么被忽略,要么被下一个read或readln语句所读入。,3输出语句(write,writeln): 格式:write(输出项); writeln; 功能:按指定的格式将输出项的内容输出。 【例4】:写出程序运行后的结果。 程序代码: program ex4; const a=10; b=20; begin writeln(50); writeln(a); writeln(a+b); writeln(a+b=,a+b) end. 说明:1)输出项的内容可以是一项,也可以是若干项,各项之间用逗号分隔。 2)当输出项为常量,直接输出常量的值;当输出项为变量时,输出该变量存储单元内的内容,变量允许属于任何一种标准数据类型;当输出项为表达式时,先计算后输出;当输出项为字符串时,原样输出单引号括起来的内容。,50 10 30 a+b=30,1、定义:复合语句是由若干条语句组成的语句序列。 形式: begin 语句1; 语句2; 语句n end; 用保留字begin和end括起来,构成一条逻辑上的语句,语法上充当一条语句。,(三):复合语句:,二 . 选择结构程序设计,1if 语句: 格式: (1) if 条件 then 语句 (2) if 条件 then 语句1 else 语句2 (3)if 语句嵌套 if 条件1 then 语句11 else if 条件2 then 语句21 else 语句22 ;,例:计算下列函数 y=,Program p; Var x,y:real; begin read(x); if x0 then y=1 else y=0; writeln(y=,y); end. 输入:5 输出:,0 (x=0),1 (x0),-1 (x0),2case 语句:分情况语句(多分支语句) 格式:case 表达式 of 常数表1:语句1; 常数表2:语句2; 常数表n:语句n; else 语句n+1 end; 功能:先计算表达式的值,然后将表达式的值依次与各常数表进行对照,当找到一个与表达式的值相匹配的常数表时,就去执行该CASE常数表后面的语句。 说明:1)end 与case 对应 2)表达式的类型通常是整型、字符型 3)常量表是常量,其类型与表达式的类型要一致。常量表中的常量不能重复。,通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。 因此,重复语句是由循环体及重复终止条件两部分组成。,FOR循环,当循环while,直到repeat循环,一、循环结构的三种形式:,三 . 循环结构程序设计,(一)for循环语句,1for语句:(“计数循环”):就是将规定循环体重复执行的次数。 格式:for 控制变量:=初值 to 终值 do 循环体语句; for 控制变量:=初值 downto 终值 do 循环体语句; 2、for语句执行过程 先将初值赋给左边的变量(称为循环控制变量); 判断循环控制变量的值是否已“超过”终值,如已超过,则跳到步骤; 如果末超过终值,则执行do后面的那个语句(称为循环体); 循环变量递增(对to)或递减(对downt o); 返回步骤; 循环结束,执行循环下面的一个语句。 3、说明: 1) 初值和终值可以是表达式,控制变量和初值、终值的类型相同,且必须是整型、布尔型和字符型等顺序类型,不能为实型。 2)递增按succ函数规律变化,递减按pred函数规律变化,整型按数值大小变化,如果为字符型量,按ASCII码表的顺序计算。 3)初值和终值在循环之前计算,重复过程中,其值不受影响;不得在循环语句中对控制变量进行赋值。 4)当初值超过终值,不执行循环,循环次数为零。,例:计算1+2+3+100之和,var i,s:integer; begin s:=0; for i:=1 to 100 do s:=s+i; writeln(s); end.,循环体:重复执行,初值,i:循环控制变量,终值,(二)while语句: 对于for循环有时也称为计数循环。适合用于事先知道循环次数. 当循环次数未知,只能根据某一条件来决定是否进行循环时,用while 语句实现循环要更方便。 (“当型循环”):当条件满足时反复执行循环体。 格式:while 布尔表达式 do 语句; 执行过程: while语句的执行过程为: 判断布尔表达式的值,如果其值为真,执行步骤2,否则执行步骤4; 执行循环体语句(do后面的语句); 返回步骤1; 结束循环,执行while的下一个语句。 说明: 1)为了使while循环能正常终止,布尔表达式中的变量必须在循环体中的某语句中有所改变,即有可能使布尔表达式的值为假,使循环结束,否则将出现死循环。 2)循环体中的语句一般是多条语句,用begin和end使其成为一条复合语句。,引例: 求恰好使s=1+1/2+1/3+1/n的值大于10时n的值。,var s : real; n : integer;n分母 begin s:=0; n:=0; while s=10 do当s的值还未超过10时 begin n:=n+1;分母1 s:=s+1/n;将下一项值累加到s end; writeln(n);输出结果 end.,repeat语句:(“直到型循环”):反复执行循环体直到条件满足为止。 格式:repeat 语句1; 语句2; 语句3; 语句n until 布尔表达式; 执行过程:先执行指定的语句序列,然后判断表达式。,(三) repeat语句:(“直到型循环”),例】:输入若干个字符,它的终止符是#,计算输入的字符中a(A)出现的次数。,program ex7; var ch:char; i:integer; begin i:=0; repeat read(ch); if (ch=a) or (ch=A) then i:=i+1; until ch=#; writeln(i=,i) end.,三种循环语句的相同点与不同点,数 组,一、为什么要使用数组:,例1 输入50个学生的某门课程的成绩,打印出低于平均分的同学号数与成绩。 分析:在解决这个问题时,虽然可以通过读入一个数就累加一个数的办法来求学生的总分,进而求出平均分。但因为只有读入最后一个学生的分数以后才能求得平均分,且要打印出低于平均分的同学,故必须把50个学生的成绩都保留下来, 然后逐个和平均分比较,把高于平均分的成绩打印出来。如果,用简单变量a1,a2,,a50存放这些数据,可想而知程序要很长且繁。 要想如数学中使用下标变量ai形式表示这50个数,则可以引入下标变量ai。这样问题的程序可写为:,第三节 数组与字符串,tot:=0;tot表示总分 for i:=1 to 50 do 循环读入每一个学生的成绩,并累加它到总分 begin read(ai); tot:=tot+ai; end; ave:=tot/50;计算平均分 for i:=1 to 50 do if aiave then writeln(No.,i, ,ai);如果第i个同学成绩小于平均分,则将输出 而要在程序中使用下标变量,则必须先说明这些下标变量的整体数组,即数组是若干个同名(如上面的下标变量的名字都为a)下标变量的集合。,二、一维数组 当数组中每个元素只带有一个下标时,我们称这样的数组为一维数组。 1、一维数组类型的定义,一维数组类型的一般格式: array下标1下标2 of ; 我们可以说,数组是由固定数量的相同类型的元素组成的。 如:type arraytype=array18of integer; var a1,a2:arraytype; 或var a1,a2:array18of integer;,一维数组应用示例,例 输入50个数,要求程序按输入时的逆序把这50个数打印出来。也就是说,请你按输入相反顺序打印这50个数。 分析:我们可定义一个数组a用以存放输入的50个数, 然后将数组a内容逆序输出。 源程序如下: program ex5_1; type arr=array150of integer; 说明一数组类型arr var a:arr;i:integer; begin writeln(Enter 50 integer:); for i:=1 to 50 do read(ai);从键盘上输入50个整数 readln; for i:=50 downto 1 do 逆序输出这50个数 write(ai:10); end.,二维数组,数组类型的定义中有两个下标类型,二维数组类型的定义:,type intarr=array 14 of integer; arr=array 15 of intarr; var a:arr; 变量a是一个二维的数组变量,它有5个分量,分别用a1, a2, a3, a4, a5表示,每个分量相当于一个一维的数组变量(有4个整型分量),通过下标区分: a1,1, a1,2, a1,3, a1,4 a2,1, a2,2, a2,3, a2,4 a3,1, a3,2, a3,3, a3,4 a4,1, a4,2, a4,3, a4,4 a5,1, a5,2, a5,3, a5,4,type arr=array 15 of array 14 of integer; var a:arr; 等价的定义方式: type arr=array 15,14 of integer; var a:arr; 或var a:array 15,14 of integer,a1,1 a1,2 a1,3 a1,4 a2,1 a2,2 a2,3 a2,4 a3,1 a3,2 a3,3 a3,4 a4,1 a4,2 a4,3 a4,4 a5,1 a5,2 a5,3 a5,4,二维数组应用举例:,例: 输入4名学生数学、物理、英语、化学、pascal五门课的考试成绩,求出每名学生的平均分,打印出表格。 分析:用二维数组a存放所给数据,第一下标表示学生的学号, 第二个下标表示该学生某科成绩,如ai,1、ai,2、ai,3、ai,4、ai,5分别存放第i号学生数学、物理、英语、化学、pascal 五门课的考试成绩,由于要求每个学生的总分和平均分, 所以第二下标可多出两列,分别存放每个学生5门成绩和总分、平均分。,源程序如下: program ex5_4; var a:array14,17of real; i,j:integer; begin fillchar(a,sizeof(a),0); 函数fillchar用以将a中所有元素置为0 writeln(Enter 4 students score); for i:=1 to 4 do begin for j:=1 to 5 do 读入每个人5科成绩 begin read(ai,j); 读每科成绩时同时统计总分 ai,6:=ai,6+ai,j; end; readln; ai,7:=ai,6/5;求平均分 end; 输出成绩表 writeln( No. Mat. Phy. Eng. Che. Pas. Tot. Ave.); for i:=1 to 4 do begin write(i:2, ); for j:=1 to 7 do write(ai,j:9:2); writeln; end; end.,字符串,字符串有常量形式和变量形式。 把按一定顺序排列的字符数据叫做字符串,表示方法是将字符放入单引号中,字符串个数叫做字符串的长度。 字符串变量可以用串类型标识符 stringn来表示。N取值在1255之间。省略为255。 定义格式 : type 字符串类型名=string 最大长度; 定义字符串变量格式是: Var 字符串变量名:字符串类型名; 也可以直接定义字符串变量,其格式为: Var 变量名: string最大长度; 或 变量名:string;,字符串之间的运算: 对字符串可以整体输入或输出,如:read(x);write(y); 允许对串变量进行赋值,如:X:=abc; y:=x。 可以对字符串进行连接运算,使用+进行连接。如:ho+me结果是:home。 字符串之间可以进行关系运算: 、 、 =、 。 比较方法按ASCII码一个字符一个字符比较。,字符串函数,(1)字符串测长函数 格式:length(s) 功能:求字符串S的长度,结果为整型。 (2)求子串函数 格式:copy (s,n,1); 功能:在S串的第N位开始截取1位字符串。 (3) 查找子串函数 格式:pos(b,s); 功能:求子串b在s中出现的起始位置,结果为整型,若未找到显示0。 (4)插入过程 格式: insert (s1,s2,i); 功能:将s1插入 s2中的第i个字符位置,若结果超出s2的最大长度,则超出的部分被截掉。 (5)删除过程 格式:delete (s,I,n); 功能:删除s中第i个字符位置开始的n 个字符。 (6)数值转换为字符串过程 格式:str(v,s); 功能:将数值V转换成字符串,存放在字符串变量s中。 (7)字符串转换为数值过程 格式:val(s,v,c); 功能:将数字串s转换成数值v,变量C记录检测出错的第一个字符的位置,当未出错时,C为0。,一、过程和函数统称子程序。,子程序的执行过程,第四节 函数与过程,函数,(1)标准函数: 我们已经接触过一些Free Pascal提供一些内部标准函数,供编程时调用,象求|X|可调用ABS(X),求可调用SQRT(49)等等。实际上,这些函数是一些包含在Free Pascal系统中供用户调用的程序模块,分别命名为:ABS,SQRT等。因而,只要在程序中遵照一定的调用规则,写出某一函数名以及此函数所需的参数,系统就会自调用这些程序模块,求得运算结果。如:ABS(X) SQRT(12+X)等等。 (2)自定义函数 系统提供的这些内部标准函数,虽然使用起来十分方便,但其中种类和数量毕竟有限,不可能包含用户的所有需要。在实际问题中,经常会遇到诸如求N!这一类的运算,系统中则没有提供相应的函数可供调用。为此,Free Pascal允许用户自行定义一些函数,我们称之为自定义函数。这种自定义函数一经定义,就可象内部函数一样,通过函数名调用它。但要注意:这些函数必须在程序中定义,也只能在本程序中使用。,函数定义及调用 一、Pascal标准函数: abs(x)、sqr(x)、等 二、用户自定义函数: 函数定义的格式: function ():;函数首部 begin ; ; ; :=; end;,函数体,函数说明,注: 1)函数首部以关键字function开头。 2)括号内为形式参数表,即形参表。 3)函数的类型也就是函数值的类型。 4)函数的执行部分以begin开头,以end结束(end后有一个分号)。在执行部分,至少要有一条将函数值传给函数名的赋值语句,即: :=; 这样就由函数名将求得的函数值带回调用该函数的程序中。,【例】 求3!+5!+7!的值 分析:可以先编写一个求n!的函数fac。 Program exp7_1 ; 程序首部 Var s,: real ; x :integer ; function fac(n:integer): real ; 函数首部函数值的类型是实型 var 局部变量说明 k,t:integer; begin t:=1; for k:=2 to n do t:=t*k; fac:=t; 将结果赋值给函数 end; begin 主程序调用 s:=fac(3) + fac(5) +fac(7) ; writeln( s =,s) end.,函数的调用: 可以在任何与函数值类型兼容的表达式中调用函数,或者说,函数调用只能出现在允许表达式出现的地方,或作为表达式的一个因子。函数调用方式与标准函数的调用方式相同。,函数调用的一般格式: 函数名(实在参数表),说明: 实在参数简称实参。实参的个数必须与函数说明中形参的个数一致,实参的类型与形参的类型应当一一对应。 调用函数时,一般的,实参必须有确定的值。 函数调用的步骤为:计算实参的值,“赋给”对应的形参; 函数的定义是静态的,若定义后未被调用,则该函数永远不会被执行。 调用的自定义函数应在调用之前已定义过。 自定义函数中的形参,因不是实际存在的变量,故又称为虚拟变量,它们并不占用内存单元,只有在调用函数时,才临时开辟相应的内存单元,存放实在参数的值。实在参数表是一些由逗号分隔的参数,它们是在调用函数时所用的自变量。只有在调用函数时,才将实在参数的值传送到形参的临时内存单元中去。可见,形参实质上是实参的一个“替身”。,【例】:计算右图五边形的面积。 program ex3; var b1,b2,b3,b4,b5,b6,b7,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 writeln(input b1-b7:); readln(b1,b2,b3,b4,b5,b6,b7); s:=area(b1,b5,b6)+area(b2,b6,b7)+area(b3,b4,b7); writeln(s=,s:10:3); end.,b7,b4,b3,b2,b1,b5,b6,过程定义及调用,一、标准过程: read、readln、write、writeln等 二、用户自定义过程: 过程定义的格式: procedure ();过程首部 begin ; ; 过程体 ; end;,说明: 过程首部以关键字procedure开头。 过程名是用户自定义的标识符,只用来标识一个过程,不能代表任何数据,因此不能说明“过程的类型”。 形参表的一般格式形式如下: var 变量名表:类型;var 变量名表:类型。其中带var的称为变量形参,不带var的称为值形参。 在过程体内使用的有关常量、变量等必须在过程体的说明部分内加以说明或定义。 与函数体不同的是:函数体的执行部分至少有一个语句给函数名赋值,而过程体的执行部分不能给过程名赋值,因为过程名不能代表任何数据。,三、过程调用: 【例】:计算五边形的面积。 program ex3_1; var b1,b2,b3,b4,b5,b6,b7,s,sum:real; procedure area(a,b,c:real;var s:real); var p:real; begin p:=(a+b+c)/2; s:=sqrt(p*(p-a)*(p-b)*(p-c); end;,begin writeln(input b1-b7:); readln(b1,b2,b3,b4,b5,b6,b7); sum:=0; area(b1,b5,b6,s); sum:=sum+s; area(b2,b6,b7,s); sum:=sum+s; area(b3,b4,b7,s); sum:=sum+s; writeln(s=,s:10:3); end.,过程,主程序,过程调用,形式参数表,过程的调用 过程调用是通过一条独立的过程调用语句来实现的,它与函数调用完全不同。过程调用与调与标准过程(如write,read等)的方式相同。调用的一般格式为: 过程名 或 过程名(实在参数表),说明: 实参的个数、类型必须与形参一一对应。 对应于值形参的实参可以是表达式,对应于变量形参的实参只能是变量。 过程调用的步骤为:计算实参的值;将值或变量的“地址”传送给对应的形参;执行过程体;返回调用处。,1函数往往只为求一个函数值; 过程一般会被设计成求若干个运算结果,完成一系 列的数据处理,或与计算无关的各种操作。 2函数有类型,最终要将函数值传送给函数名; 过程无类型,不能给过程名赋值。 3调用方式不同。 函数的调用出现在表达式中; 过程的调用是由独立的过程调用语句实现的。 4返回值的方法不同。 函数值是通过函数名传回调用程序; 过程则是通过参数将运算的结果传给调用程序。,四、过程与函数的主要区别:,变量及其作用域 一、变量的类型: 全程变量和局部变量,1)、全程变量和它的作用域 全程变量是指在程序开头的说明部分定义和说明的量。 全程变量的作用域分为两种情况: (1)在全程变量和局部变量不同名时,其作用域是整个程序。 (2)在全程变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域。 2)、局部变量和它的作用域 凡是在子程序内部使用的变量,必须在子程序中加入说明。这种在子程序内部说明的变量称为局部变量。局部变量的作用域是其所在的子程序。形式参数也只能在子程序中有效,因此也属于局部变量。 局部变量的作用域分为两种情况: (1)当外层过程的局部变量名和嵌套过程中的局部变量不同名时,外层过程的局部变量作用域包含嵌套过程。 (2)当外层过程的局部变量名和嵌套过程内的局部变量名同名时,外层过程的局部变量作用域不包含此过程。,【例5】:全程变量的作用域。 program ex5; var m:integer; procedure test1; begin m:=100; end; begin m:=5; writeln(before the test1 call,m is:,m); test1; writeln(after the test1 call,m is:,m); end. 运行结果: before the test1 call,m is:5 after the test1 call,m is:100,【例6】:比较全程变量与局部变量的作用域。 program ex6; var m:integer; procedure test2; var m:integer; begin m:=100; end; begin m:=5; writeln(before the test2 call,m is:,m); test2; writeln(after the test2 call,m is:,m); end. 运行结果: before the test1 call,m is:5 after the test1 call,m is:5,参数的传递,一、参数的类型: 1形参和实参: 函数调用和过程调用的一般步骤: 注意:由于形参类型不同,其在函数和过程调用中所起的作用也不同。 形参的类型可分为:值形参、变量形参、函数形参、过程形参。 实参也对应分为:值实参、变量实参、函数实参、过程实参。,2、值参和变参,(1)值参:在函数或过程定义中,没有加VAR 说明的参数,在调用函数或过程时,调用程序将实在参数的值直接传递给形参,起着赋值作用。 (2)变参:在函数或过程定义中,加有VAR 说明的参数,在调用函数或过程时,调用程序将实在参数的变量地址传递给形变参,因此当过程或函数处理中,改变形参变量的值,则实在参数的变量值也随之改变。(共享同一个存储单元) 例:procedure area(a,b,c:real;var s:real);,3值参和变参例题: 值形参:function fac(x:integer):integer; 【例7】:值参数分析 program ex7; var a:integer; procedure sum(b:integer); begin b:=b+10; writeln(b=,b); end; begin a:=10; sum(a); writeln(a=,a); end. 运行结果: b=20 a=10,变量形参:procedure area(a,b,c:real;var s:real;) 几点说明: 1.函数不允许用变量形参;过程如需向调用程序返回值时,应采用变量形参。 2.变量形参要求它的实参和它是同一类型的变量,而不能是表达式。 3.在过程执行时,遇到对变量形参的引用或赋值,就是对相应参数的引用或赋值。 4.对变量形参的任何操作就是对实参本身的操作。,【例8】:变量参数分析 program ex8; var a:integer; procedure sum(var b:integer); begin b:=b+10; writeln(b=,b); end; begin a:=10;sum(a); writeln(a=,a); end. 运行结果: b=20 a=20,小结:值参和变参 值形参传值:调用时可用表达式代替形参,不改变实在参数的值。 变量形参传地址:调用时必须用变量代替形参变量,改变实在参数的值。,例:请看下列程序的运行结果。 program li3_10; var a,b,c:integer; procedure sub(x,y:integer;var z:integer); begin x:=x+1;y:=y+1;z:=x+y; writeln(sub:x=,x:2,y=,y:2,z=,z:2); end; begin a:=1;b:=4;c:=9; writeln(main:a=,a:2,b=,b:2,c=,c); sub(a,b,c);,writeln(main:a=,a:2,b=,b:2,c=,c); sub(c+5,b*b,a); writeln(main:a=,a:2,b=,b:2,c=,c); readln; end. 运行结果: main:a1 b4 c9 sub:x2 y5 z7 main:a1 b4 c7 sub:x13 y17 z30 main:a30 b4 c7,1递归的定义: Pascal语言中,如果在一个函数、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省济宁金乡县联考2026届数学八上期末统考模拟试题含解析
- 云南省涧南彝族自治县2026届数学九年级第一学期期末检测试题含解析
- 2025【合同范本】抵押借款合同样本
- 江西省南康区2026届数学七上期末统考试题含解析
- 幼儿园科学实验活动的开展与指导
- 邮储银行双鸭山市尖山区2025秋招笔试言语理解题专练及答案
- 邮储银行周口市鹿邑县2025秋招笔试管理营销专练及答案
- 2025汽车维修技师劳动合同
- 邮储银行北京市通州区2025秋招英文结构化面试题库含答案
- 邮储银行广安市邻水县2025秋招笔试英语阅读选词题专练30题及答案
- 甲状腺结节术后护理
- 水泥标准培训课件
- 2025秋二年级上册语文上课课件 5 去外婆家
- 《植物组织培养》课件 项目3 无菌操作技术
- 2025届广东省广州市高三4月二模生物试题(原卷版+解析版)
- 《白银投资深度解析》课件
- 道德与法治课件《我们神圣的国土》课件(34张)
- 计算与人工智能概论(湖南大学)知到智慧树章节答案
- GB/T 44625-2024动态响应同步调相机技术要求
- 25《王戎不取道旁李》 教学设计
- 2024年咨询工程师继续教育城市轨道交通工程可行性研究报告编制方法考试答案
评论
0/150
提交评论