ASCAL程序基础课件

上传人:文**** 文档编号:240744220 上传时间:2024-05-04 格式:PPT 页数:78 大小:351KB
返回 下载 相关 举报
ASCAL程序基础课件_第1页
第1页 / 共78页
ASCAL程序基础课件_第2页
第2页 / 共78页
ASCAL程序基础课件_第3页
第3页 / 共78页
点击查看更多>>
资源描述
PASCALPASCAL程序设计基础程序设计基础柴沟中学柴沟中学 鹿咏梅鹿咏梅1.一、一、PASCAL语言基础知识语言基础知识二、二、结构化程序设计结构化程序设计三、三、数组与字符串数组与字符串四、四、函数与过程函数与过程五、五、递归递归2.一、一、PASCAL程序的基本结构程序的基本结构Program area;Program area;ConstConst pi=3.1416;pi=3.1416;VarVar r:integer;r:integer;s:real;s:real;BeginBegin writeln(enter r=);writeln(enter r=);readln(r);readln(r);s:=pi*r*r;s:=pi*r*r;write(s=,s)write(s=,s)End.End.程序首部程序首部说明部分说明部分执行部分执行部分Program Program 程序名;程序名;Const Const 常量说明;常量说明;Type Type 类型说明;类型说明;Var Var 变量说明;变量说明;Function Function 函数说明;函数说明;Procedure Procedure 过程说明;过程说明;BeginBegin 语句语句1 1;语句语句2 2;End.End.例:已知圆的半径例:已知圆的半径r r,编程求圆的面积,编程求圆的面积s.s.ProgramProgramConstConstVarVarBeginBeginEnd.End.第一节第一节PASCAL语言基础知识语言基础知识3.二、二、PASCAL字符与符号字符与符号1 1标识符标识符(1)(1)标识符的定义:标识符就是以标识符的定义:标识符就是以字母开头的字母数字序列,有效长度为字母开头的字母数字序列,有效长度为6363个字符,并且个字符,并且大小写等效大小写等效。可以用来。可以用来标示常量、变量、程序、函数等。标示常量、变量、程序、函数等。4.二、二、PASCAL字符与符号字符与符号(2)(2)标识符的分类:标识符的分类:a.a.保留字保留字(关键字关键字)所谓保留字是指在所谓保留字是指在PascalPascal语言中具有特定的语言中具有特定的含义,标准含义,标准PascalPascal语言中的保留字一共有语言中的保留字一共有3535个个.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,WITH5.二、二、PASCAL字符与符号字符与符号b.标准标识符:指标准标识符:指Pascal语言预先定义的标识符,具有特殊含义。语言预先定义的标识符,具有特殊含义。标准常量标准常量FalseMaxintTrue标准类型标准类型BooleanCharRealInteger标准函数标准函数AbsArctanChrCosEofEolnExpLnOddOrdPredRoundSinSqrSqrtSuccTrunc标准过程标准过程DisposeGetNewPackPagePutReadReadlnResetRewriteUnpackWriteWriteln标准文件标准文件InputOutput6.二、二、PASCAL字符与符号字符与符号cc用户自定义标识符:由你自己根据需要来定义。用户自定义标识符:由你自己根据需要来定义。选用的标识符不能与保留字和标准标识符相同。选用的标识符不能与保留字和标准标识符相同。在定义标识符时可以用的字符:在定义标识符时可以用的字符:AZAZ;azaz;0909;+,-,*,/,=,=,(,),:=:=,;,;,.,:,:,.,注:Pasca语言除了能使用以上规定的基本符号外,不得使用任何其它符号。7.三、三、PASCAL数据类型数据类型数据的一个重要特征就是它的类型,数据类型数据的一个重要特征就是它的类型,数据类型确定了数据的构成和可进行的运算。确定了数据的构成和可进行的运算。PascalPascal语语言是一种强类型语言,言是一种强类型语言,不同类型间不能任意转不同类型间不能任意转换,不同类型的变量一般不允许作混合运算。换,不同类型的变量一般不允许作混合运算。程序中出现的所有常量、变量和用户自定义的程序中出现的所有常量、变量和用户自定义的数据必须预先说明后才能使用。数据必须预先说明后才能使用。8.三、三、PASCAL数据类型数据类型PascalPascal数据类型数据类型 简单类型简单类型构造类型构造类型指针类型指针类型 9.三、三、PASCAL数据类型数据类型1.1.整型整型 类型类型数值范围数值范围shortint(短整型)-128.128integer(整型)-32768.32767longint(长整型)-2147483648.2147483647byte(字节型)0.255word(字类型)0.6553510.三、三、PASCAL数据类型数据类型2.实型实型类型类型数值范围数值范围real(基本实型)2.9e-39.1.7e38single(单精度实型)1.5e-45.3.4e38double(双精度实型)5.0e-324.1.7e30811.三、三、PASCAL数据类型数据类型3.3.布尔型布尔型 booleanfalsetrue01逻辑真逻辑真逻辑假逻辑假12.三、三、PASCAL数据类型数据类型4.字符型字符型char字符型的值必须用字符型的值必须用单引号括起来单引号括起来,字字母作为字符型的值时,大小写是不等母作为字符型的值时,大小写是不等价的,价的,并且字符型只允许单引号中有并且字符型只允许单引号中有一个字符,否则就是字符串。一个字符,否则就是字符串。例:例:var var c:char;c:char;c:=a c:=a13.四、常量与变量四、常量与变量1.1.常量常量(1)(1)常量:在某个程序的整个过程中其值不变的量。常量:在某个程序的整个过程中其值不变的量。(2)(2)常量定义:常量定义出现在说明部分。语法格式:常量定义:常量定义出现在说明部分。语法格式:constconst常量标识符常量标识符1=1=常量值常量值1;1;.常量标识符常量标识符n=n=常量值常量值n;n;常量标识符的类型由定义它的常量的类型决定。常量标识符的类型由定义它的常量的类型决定。ConstConst pi=3.1416;pi=3.1416;a=10;a=10;c=c;c=c;t=true;t=true;14.四、常量与变量四、常量与变量2.2.变量变量(1)(1)变量:在某个程序的运行过程中变量:在某个程序的运行过程中其值可以发生改变的量其值可以发生改变的量(2)(2)变量说明:变量说明出现在说明部分。语法格式:变量说明:变量说明出现在说明部分。语法格式:varvar变量标识符列表变量标识符列表:类型类型;.变量标识符列表变量标识符列表:类型类型;varvara,b,c:integera,b,c:integer;m,n:real m,n:real;15.五、运算符和表达式五、运算符和表达式1.运算符运算符a.算术运算符算术运算符运算符运算运算对象结果类型运算符运算运算对象结果类型+加加整型、实型只要有一个运算对象是实型,结果就整型、实型只要有一个运算对象是实型,结果就-减减整型、实型是实型,如果全部的运算对象都是整整型、实型是实型,如果全部的运算对象都是整*乘乘整型、实型型并且运算不是除法,则结果为整型,整型、实型型并且运算不是除法,则结果为整型,/除除整型、实型若运算是除法,则结果是实型。整型、实型若运算是除法,则结果是实型。div整除整除整型整型整型整型mod取余取余整型整型整型整型5div3=15mod3=216.五、运算符和表达式五、运算符和表达式b.逻辑运算符逻辑运算符运算符运算符运算运算运算对象运算对象结果类型结果类型not逻辑非布尔型布尔型逻辑非布尔型布尔型and逻辑与布尔型布尔型逻辑与布尔型布尔型or逻辑或布尔型布尔型逻辑或布尔型布尔型xor逻辑异或逻辑异或布尔型布尔型布尔型布尔型not(非)条件为True时,其结果值为False;否则为True;(取反)not(34)and(与)两条件都为True时,其结果值为True;否则为False;or(或)两条件中只要有一个为True;其结果值为True;否则为False;xor(异或)两条件的逻辑值不相同时,其结果值为True;否则为False;17.五、运算符和表达式五、运算符和表达式c.关系运算符关系运算符运算符运算符运算运算运算对象运算对象结果类型结果类型=等于简单类型布尔型等于简单类型布尔型不等于不等于简单类型布尔型简单类型布尔型大于简单类型布尔型大于简单类型布尔型=大于等于大于等于简单类型布尔型简单类型布尔型运算符优先级运算符优先级:not*,/,div,mod,andxor,+,-,orin,=,=,=18.五、运算符和表达式五、运算符和表达式2.表达式表达式(1)通过运算符把常量、变量、函数调用)通过运算符把常量、变量、函数调用结合起来组成的式子。结合起来组成的式子。pi*r*rpi*r*rSum+2Sum+2(xy)and(z=y)(xy)and(z=y)19.五、运算符和表达式五、运算符和表达式(2)数学上的表达式与)数学上的表达式与pascal语言表达式的区别语言表达式的区别数学表达式数学表达式PASCAL表达式表达式注意注意2a2*a*号不能省略号不能省略aba/b除号的写法除号的写法abab不等号的写法不等号的写法aba=b小于等于号的写法小于等于号的写法20.五、运算符和表达式五、运算符和表达式TrueTrueandandTrueTrue=TrueTrueTrueTrueFalsFalse eFalseFalseFalsFalse eTrueTrueFalseFalseFalsFalse eFalsFalse eFalseFalsePascal中的逻辑运算:中的逻辑运算:21.五、运算符和表达式五、运算符和表达式TrueTrueororTrueTrue=TrueTrueTrueTrueFalseFalseTrueTrueFalseFalseTrueTrueTrueTrueFalseFalseFalseFalseFalseFalse22.第二节结构化程序设计pascal程序的三种基本结构顺序结构顺序结构分支结构分支结构循环结构循环结构23.(一一)、什么是顺序结构:、什么是顺序结构:【例【例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的值。的值。程序代码:程序代码:programex1;vara,b,c:integer;beginwrite(pleaseinputa,b:);read(a,b);writeln(a=,a,b=,b);c:=a;a:=b;b:=c;writeln(a=,a,b=,b)end.一一 .顺顺序序结结构构程程序序设设计计Pascal 语言的语句分为简单语句(也称基本语句)和复合语句(也称构造语句)24.o(二二):几个简单语句:几个简单语句:o1赋值语句:赋值语句:o格式:变量标识符:格式:变量标识符:=表达式;表达式;o功能:计算和赋值双重功能:功能:计算和赋值双重功能:o【例2】写出程序执行后,变量的值。o程序代码:oprogramex2;ovaroa,b:integer;oc:real;och:char;obool:boolean;obeginoa:=3;ob:=a;ob:=a+1;oa:=a+1;oc:=a+b;och:=h;obool:=true;obool:=notbool;oend.o说明:1)“:=”赋值号不同于“=”号,具有方向性,具有计算功能。o2)赋值号两边的类型应该相同。o3)一个赋值语句只能给一个变量赋值,变量可以进行多次赋值。o4)被赋值的变量可以作为因子参与运算。25.2输入语句(输入语句(read,readln):格式:格式:read(变量名表变量名表);readlnread(a1,a2,a3);等价于等价于read(a1);read(a2);read(a3);readln(a1,a2,a3);等价于等价于read(a1);read(a2);read(a3);readln;功能:通过键盘,给指定的变量赋值。功能:通过键盘,给指定的变量赋值。【例3】:写出程序运行后,变量的值。程序代码:programex3;vara,b,c:integer;i,j,k:real;ch1,ch2,ch3:char;beginread(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.程序运行后,输入数据:123456.17890dos执行readln后多余的数据将被忽略;执行read后多余的数据要么被忽略,要么被下一个read或readln语句所读入。26.o3输出语句(输出语句(write,writeln):):o格式:格式:write(输出项);(输出项);owriteln;o功能:按指定的格式将输出项的内容输出。功能:按指定的格式将输出项的内容输出。o【例【例4】:写出程序运行后的结果。】:写出程序运行后的结果。o程序代码:oprogramex4;oconstoa=10;ob=20;obeginowriteln(50);owriteln(a);owriteln(a+b);owriteln(a+b=,a+b)oend.o说明:1)输出项的内容可以是一项,也可以是若干项,各项之间用逗号分隔。o2)当输出项为常量,直接输出常量的值;当输出项为变量时,输出该变量存储单元内的内容,变量允许属于任何一种标准数据类型;当输出项为表达式时,先计算后输出;当输出项为字符串时,原样输出单引号括起来的内容。501030a+b=3027.1、定义:复合语句是由若干条语句组成的语句序列。形式:begin语句1;语句2;语句nend;用保留字begin和end括起来,构成一条逻辑上的语句,语法上充当一条语句。(三三):复合语句:复合语句:28.二二.选选择择结结构构程程序序设设计计1if语句:语句:格式:(1)if条件then语句(2)if条件then语句1else语句2(3)if语句嵌套if条件1then语句11elseif条件2then语句21else语句22;29.例:计算下列函数y=Programp;Varx,y:real;beginread(x);ifx0theny=1elsey=0;writeln(y=,y);end.输入:5输出:0(x=0)1(x0)-1(x0)30.2case语句:分情况语句(多分支语句)格式:case表达式of常数表1:语句1;常数表2:语句2;常数表n:语句n;else语句n+1end;功能:先计算表达式的值,然后将表达式的值依次与各常数表进行对照,当找到一个与表达式的值相匹配的常数表时,就去执行该CASE常数表后面的语句。说明:1)end与case对应2)表达式的类型通常是整型、字符型3)常量表是常量,其类型与表达式的类型要一致。常量表中的常量不能重复。31.通常将一组重复执行的语句称为循环体,而控通常将一组重复执行的语句称为循环体,而控制重复执行或终止执行由重复终止条件决定。制重复执行或终止执行由重复终止条件决定。因此,重复语句是由循环体及重复终止条件两部因此,重复语句是由循环体及重复终止条件两部分组成。分组成。FOR循环循环当循环当循环while直到直到repeat循环循环一、循环结构的三种形式:三三.循循环环结结构构程程序序设设计计32.(一)for循环语句1 1forfor语句:(语句:(“计数循环计数循环”):就是将规定循环体重复执行的次数。):就是将规定循环体重复执行的次数。格式:格式:for for 控制变量:控制变量:=初值初值 to to 终值终值 do do 循环体语句;循环体语句;for for 控制变量:控制变量:=初值初值 downto downto 终值终值 do do 循环体语句;循环体语句;2、for语句执行过程语句执行过程 先将初值赋给左边的变量(称为循环控制变量);先将初值赋给左边的变量(称为循环控制变量);判断循环控制变量的值是否已判断循环控制变量的值是否已“超过超过”终值,如已超过,则跳到步骤终值,如已超过,则跳到步骤;如果末超过终值,则执行如果末超过终值,则执行dodo后面的那个语句(称为循环体);后面的那个语句(称为循环体);循环变量递增(对循环变量递增(对toto)或递减(对)或递减(对downt o)downt o);返回步骤返回步骤;循环结束,执行循环下面的一个语句。循环结束,执行循环下面的一个语句。3 3、说明:、说明:1)1)初值和终值可以是表达式,控制变量和初值、终值的类型相同,且必须是整型、布初值和终值可以是表达式,控制变量和初值、终值的类型相同,且必须是整型、布尔型和字符型等顺序类型,不能为实型。尔型和字符型等顺序类型,不能为实型。2 2)递增按)递增按succsucc函数规律变化,递减按函数规律变化,递减按predpred函数规律变化,整型按数值大小变化,如果函数规律变化,整型按数值大小变化,如果为字符型量,按为字符型量,按ASCIIASCII码表的顺序计算。码表的顺序计算。3 3)初值和终值在循环之前计算,重复过程中,其值不受影响;不得在循环语句中对控)初值和终值在循环之前计算,重复过程中,其值不受影响;不得在循环语句中对控制变量进行赋值。制变量进行赋值。4 4)当初值超过终值,不执行循环,循环次数为零。)当初值超过终值,不执行循环,循环次数为零。33.例:计算1+2+3+100之和vari,s:integer;begins:=0;fori:=1to100dos:=s+i;writeln(s);end.循环体:重复执行循环体:重复执行初值初值i:循环控制变量循环控制变量终值终值34.(二)(二)while语句:语句:对于对于for循环有时也称为计数循环。循环有时也称为计数循环。适合用于事先知道循环次数适合用于事先知道循环次数.当循环次数未知,只能根据某一条件来决定是否进行循环时,用当循环次数未知,只能根据某一条件来决定是否进行循环时,用while语句实现循环要更方便。语句实现循环要更方便。(“当型循环当型循环”):当条件满足时反复执行循环体。):当条件满足时反复执行循环体。格式:格式:while布尔表达式布尔表达式do语句语句;执行过程:执行过程:while语句的执行过程为:语句的执行过程为:判断布尔表达式的值判断布尔表达式的值,如果其值为真如果其值为真,执行步骤执行步骤2,否则执行步骤否则执行步骤4;执行循环体语句执行循环体语句(do后面的语句后面的语句);返回步骤返回步骤1;结束循环结束循环,执行执行while的下一个语句。的下一个语句。说明:说明:1)为了使)为了使while循环能正常终止,循环能正常终止,布尔表达式中的变量必须在循环体中的某布尔表达式中的变量必须在循环体中的某语句中有所改变,即有可能使布尔表达式的值为假,语句中有所改变,即有可能使布尔表达式的值为假,使循环结束,否则将出使循环结束,否则将出现死循环。现死循环。2)循环体中的语句一般是多条语句,用)循环体中的语句一般是多条语句,用begin和和end使其成为一条复合语句。使其成为一条复合语句。35.引例:引例:求恰好使求恰好使s=1+1/2+1/3+1/n的值大于的值大于10时时n的值。的值。vars:real;n:integer;n分母分母begins:=0;n:=0;whiles=10do当当s的值还未超过的值还未超过10时时beginn:=n+1;分母分母1s:=s+1/n;将下一项值累加到将下一项值累加到send;writeln(n);输出结果输出结果end.36.repeat语句:(“直到型循环”):反复执行循环体直到条件满足为止。格式:repeat语句1;语句2;语句3;语句nuntil布尔表达式;执行过程:先执行指定的语句序列,然后判断表达式。(三)repeat语句:(“直到型循环”)37.例】:输入若干个字符,它的终止符是#,计算输入的字符中a(A)出现的次数。programex7;varch:char;i:integer;begini:=0;repeatread(ch);if(ch=a)or(ch=A)theni:=i+1;untilch=#;writeln(i=,i)end.38.三种循环语句的相同点与不同点FORWHILEREPEAT语句格式句格式FOR:=TO DO WHILE DOREPEATUNTIL 循循环变量量赋值布布尔尔表达式表达式无循无循环变量量循循环次数次数确定,由初确定,由初值和和终值决定决定不确定,由循不确定,由循环体前的布体前的布尔尔表表达式决定,当达式决定,当值为“假假”时,结束循束循环。可能一次循可能一次循环也没有也没有不确定,由循不确定,由循环体后的布体后的布尔尔表达式决定,当表达式决定,当值为“真真”时结束循束循环。至少有一次循至少有一次循环循循环体体多多语句句时,需用,需用BEGIN和和END多多语句句时,需用,需用BEGIN和和END多多语句句时,不需用,不需用BEGIN和和END39.数组一、为什么要使用数组:例例1输入50个学生的某门课程的成绩,打印出低于平均分的同学号数与成绩。分析:在解决这个问题时,虽然可以通过读入一个数就累加一个数的办法来求学生的总分,进而求出平均分。但因为只有读入最后一个学生的分数以后才能求得平均分,且要打印出低于平均分的同学,故必须把50个学生的成绩都保留下来,然后逐个和平均分比较,把高于平均分的成绩打印出来。如果,用简单变量a1,a2,,a50存放这些数据,可想而知程序要很长且繁。要想如数学中使用下标变量ai形式表示这50个数,则可以引入下标变量ai。这样问题的程序可写为:第三节 数组与字符串40.tot:=0;tottot:=0;tot表示总分表示总分 for i:=1 to 50 do for i:=1 to 50 do 循环读入每一个学生的成循环读入每一个学生的成绩,并累加它到总分绩,并累加它到总分beginbeginread(ai);read(ai);tot:=tot+ai;tot:=tot+ai;end;end;ave:=tot/50;ave:=tot/50;计算平均分计算平均分for i:=1 to 50 dofor i:=1 to 50 doif aiave then writeln(No.,i,if aiave then writeln(No.,i,ai);,ai);如果第如果第i i个同学成绩小于平均分,则将输出个同学成绩小于平均分,则将输出而要在程序中使用下标变量,则必须先说明这些而要在程序中使用下标变量,则必须先说明这些下标变量的整体下标变量的整体数组,即数组,即数组是若干个同名数组是若干个同名(如上(如上面的下标变量的名字都为面的下标变量的名字都为a a)下标变量的集合下标变量的集合。41.二、一维数组二、一维数组当数组中每个元素只带有一个下标时,我们称这样的数组为一维数组。1、一维数组类型的定义、一维数组类型的定义一维数组类型的一般格式:array下标1.下标2of;o我们可以说,数组是由固定数量的相同类型的元素组成的。如:typearraytype=array1.8ofinteger;vara1,a2:arraytype;或vara1,a2:array1.8ofinteger;42.一维数组应用示例例例输入50个数,要求程序按输入时的逆序把这50个数打印出来。也就是说,请你按输入相反顺序打印这50个数。分析:我们可定义一个数组a用以存放输入的50个数,然后将数组a内容逆序输出。源程序如下:programex5_1;typearr=array1.50ofinteger;说明一数组类型arrvara:arr;i:integer;beginwriteln(Enter50integer:);fori:=1to50doread(ai);从键盘上输入50个整数readln;fori:=50downto1do逆序输出这50个数write(ai:10);end.43.二维数组o数组类型的定义中有两个下标类型二维数组类型的定义:ntype intarr=array 1.4 of integer;arr=array 1.5 of intarr;nvar a:arr;n变量a是一个二维的数组变量,它有5个分量,分别用a1,a2,a3,a4,a5表示,每个分量相当于一个一维的数组变量(有4个整型分量),通过下标区分:a1,1,a1,2,a1,3,a1,4 a2,1,a2,2,a2,3,a2,4a3,1,a3,2,a3,3,a3,4 a4,1,a4,2,a4,3,a4,4a5,1,a5,2,a5,3,a5,444.otypearr=array1.5ofarray1.4ofinteger;vara:arr;等价的定义方式:otypearr=array1.5,1.4ofinteger;vara:arr;或vara:array1.5,1.4ofintegera1,1 a1,2 a1,3 a1,4 a2,1 a2,2 a2,3 a2,4a3,1 a3,2 a3,3 a3,4 a4,1 a4,2 a4,3 a4,4a5,1 a5,2 a5,3 a5,445.二维数组应用举例:例:例:输入输入4名学生数学、物理、英语、化学、名学生数学、物理、英语、化学、pascal五门课五门课的考试成绩,求出每名学生的平均分,打印出表格。的考试成绩,求出每名学生的平均分,打印出表格。分析:用二维数组分析:用二维数组a存放所给数据存放所给数据,第一下标表示学生第一下标表示学生的学号的学号,第二个下标表示该学生某科成绩,如第二个下标表示该学生某科成绩,如ai,1、ai,2、ai,3、ai,4、ai,5分别存放第分别存放第i号学生数学、物号学生数学、物理、英语、化学、理、英语、化学、pascal五门课的考试成绩五门课的考试成绩,由于要求每由于要求每个学生的总分和平均分,个学生的总分和平均分,所以第二下标可多出两列,分所以第二下标可多出两列,分别存放每个学生别存放每个学生5门成绩和总分、平均分。门成绩和总分、平均分。46.源程序如下:program ex5_4;var a:array1.4,1.7of real;i,j:integer;beginfillchar(a,sizeof(a),0);函数fillchar用以将a中所有元素置为0writeln(Enter 4 students score);for i:=1 to 4 do beginfor 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 beginwrite(i:2,);for j:=1 to 7 do write(ai,j:9:2);writeln;end;end.47.字符串字符串有常量形式和变量形式。字符串有常量形式和变量形式。把按一定顺序排列的字符数据叫做字符串,把按一定顺序排列的字符数据叫做字符串,表示方法是将字符放入单引号中表示方法是将字符放入单引号中,字符,字符串个数叫做字符串的长度。串个数叫做字符串的长度。字符串变量可以用串类型标识符字符串变量可以用串类型标识符stringn来表示。来表示。N取值在取值在1255之间。省略为之间。省略为255。定义格式定义格式:type字符串类型名字符串类型名=string最大长度最大长度;定义字符串变量格式是:定义字符串变量格式是:Var字符串变量名:字符串类型名;字符串变量名:字符串类型名;也可以直接定义字符串变量,其格式为:也可以直接定义字符串变量,其格式为:Var变量名:变量名:string最大长度最大长度;或或变量名:变量名:string;字符串之间的运算:字符串之间的运算:对字符串可以整体输入或输出,如:对字符串可以整体输入或输出,如:read(x);write(y);允许对串变量进行赋值,如:允许对串变量进行赋值,如:X:=abc;y:=x。可以对字符串进行连接运算,使用可以对字符串进行连接运算,使用+进行连接。如:进行连接。如:ho+me结果是:结果是:home。字符串之间可以进行关系运算:字符串之间可以进行关系运算:、=、=、=、。比较方法按比较方法按ASCII码一个字符一个字码一个字符一个字符比较。符比较。48.字符串函数(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。49.一、过程和函数统称子程序。子程序的执行过程第四节第四节 函数与过程函数与过程50.函数(1)标准函数:)标准函数:我们已经接触过一些我们已经接触过一些FreePascal提供一些内部标准函数,供编程时调用,提供一些内部标准函数,供编程时调用,象求象求|X|可调用可调用ABS(X),求可调用),求可调用SQRT(49)等等。实际上,这些函数是一等等。实际上,这些函数是一些包含在些包含在FreePascal系统中供用户调用的程序模块,分别命名为:系统中供用户调用的程序模块,分别命名为:ABS,SQRT等。因而,只要在程序中遵照一定的调用规则,写出某一函数等。因而,只要在程序中遵照一定的调用规则,写出某一函数名以及此函数所需的参数,系统就会自调用这些程序模块,求得运算结果。名以及此函数所需的参数,系统就会自调用这些程序模块,求得运算结果。如:如:ABS(X)SQRT(12+X)等等。等等。(2)自定义函数)自定义函数系统提供的这些内部标准函数,虽然使用起来十分方便,但其中种类和数系统提供的这些内部标准函数,虽然使用起来十分方便,但其中种类和数量毕竟有限,不可能包含用户的所有需要。在实际问题中,经常会遇到诸如量毕竟有限,不可能包含用户的所有需要。在实际问题中,经常会遇到诸如求求N!这一类的运算,系统中则没有提供相应的函数可供调用。为此,!这一类的运算,系统中则没有提供相应的函数可供调用。为此,FreePascal允许用户自行定义一些函数,我们称之为自定义函数。这种自定义函允许用户自行定义一些函数,我们称之为自定义函数。这种自定义函数一经定义,就可象内部函数一样,通过函数名调用它。但要注意:这些函数一经定义,就可象内部函数一样,通过函数名调用它。但要注意:这些函数必须在程序中定义,也只能在本程序中使用。数必须在程序中定义,也只能在本程序中使用。51.函数定义及调用函数定义及调用一、Pascal标准函数:abs(x)、sqr(x)、等二、用户自定义函数:函数定义的格式:function():;函数首部函数首部begin;:=;end;函数体函数体52.函数说明函数说明注:1)函数首部以关键字function开头。2)括号内为形式参数表,即形参表。3)函数的类型也就是函数值的类型。4)函数的执行部分以begin开头,以end结束(end后有一个分号)。在执行部分,至少要有一条将函数值传给函数名的赋值语句,即::=;这样就由函数名将求得的函数值带回调用该函数的程序中。53.【例】求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.54.函数的调用函数的调用:可以在任何与函数值类型兼容的表达式中调用可以在任何与函数值类型兼容的表达式中调用函数,或者说,函数调用只能出现在允许表达式函数,或者说,函数调用只能出现在允许表达式出现的地方,或作为表达式的一个因子。出现的地方,或作为表达式的一个因子。函数调函数调用方式与标准函数的调用方式相同。用方式与标准函数的调用方式相同。函数调用的一般格式:函数调用的一般格式:函数名(实在参数表)函数名(实在参数表)说明:说明:实在参数简称实在参数简称实参实参。实参的个数必须与函数说明中形参的个数一致,实。实参的个数必须与函数说明中形参的个数一致,实参的类型与形参的类型应当一一对应。参的类型与形参的类型应当一一对应。调用函数时,一般的,实参必须有确定的值。调用函数时,一般的,实参必须有确定的值。函数调用的步骤为:函数调用的步骤为:计算实参的值,计算实参的值,“赋给赋给”对应的形参对应的形参;函数的定义是静态的,若定义后未被调用,则该函数永远不会被执行。函数的定义是静态的,若定义后未被调用,则该函数永远不会被执行。调用的自定义函数应在调用之前已定义过。调用的自定义函数应在调用之前已定义过。自定义函数中的形参,因不是实际存在的变量,故又称为虚拟变量,它自定义函数中的形参,因不是实际存在的变量,故又称为虚拟变量,它们并不占用内存单元,只有在调用函数时,才临时开辟相应的内存单元,们并不占用内存单元,只有在调用函数时,才临时开辟相应的内存单元,存放实在参数的值。实在参数表是一些由逗号分隔的参数,它们是在存放实在参数的值。实在参数表是一些由逗号分隔的参数,它们是在调用函数时所用的自变量。只有在调用函数时,才将实在参数的值传送到调用函数时所用的自变量。只有在调用函数时,才将实在参数的值传送到形参的临时内存单元中去。可见,形参实质上是实参的一个形参的临时内存单元中去。可见,形参实质上是实参的一个“替身替身”。55.【例】:计算右图五边形的面积。【例】:计算右图五边形的面积。programex3;varb1,b2,b3,b4,b5,b6,b7,s:real;functionarea(a,b,c:real):real;varp:real;beginp:=(a+b+c)/2;area:=sqrt(p*(p-a)*(p-b)*(p-c);end;beginwriteln(inputb1-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.b7b4b3b2b1b5b656.过程定义及调用一、标准过程:read、readln、write、writeln等二、用户自定义过程:过程定义的格式:procedure();过程首部begin;过程体;end;57.说明说明:过程首部以关键字过程首部以关键字procedure开头。开头。过程名是用户自定义的标识符,只用来标识一个过程,不过程名是用户自定义的标识符,只用来标识一个过程,不能代表任何数据,因此不能说明能代表任何数据,因此不能说明“过程的类型过程的类型”。形参表的一般格式形式如下:形参表的一般格式形式如下:var变量名表:类型;变量名表:类型;var变量名表:类型。其中带变量名表:类型。其中带var的称为变量形参,不带的称为变量形参,不带var的称为值形参。的称为值形参。在过程体内使用的有关常量、变量等必须在过程体的说明在过程体内使用的有关常量、变量等必须在过程体的说明部分内加以说明或定义。部分内加以说明或定义。与函数体不同的是:函数体的执行部分至少有一个语句给与函数体不同的是:函数体的执行部分至少有一个语句给函数名赋值,而过程体的执行部分不能给过程名赋值,因为函数名赋值,而过程体的执行部分不能给过程名赋值,因为过程名不能代表任何数据。过程名不能代表任何数据。58.三、过程调用:三、过程调用:【例】:计算五边形的面积。programex3_1;varb1,b2,b3,b4,b5,b6,b7,s,sum:real;procedurearea(a,b,c:real;vars:real);varp:real;beginp:=(a+b+c)/2;s:=sqrt(p*(p-a)*(p-b)*(p-c);end;beginwriteln(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.过程过程主程序主程序过程过程调用调用形式参数表形式参数表59.过程的调用过程的调用过程调用是通过一条过程调用是通过一条独立的过程调用语句独立的过程调用语句来实现的,它与函数调来实现的,它与函数调用完全不同。过程调用与调与标准过程(如用完全不同。过程调用与调与标准过程(如write,read等)的方式相等)的方式相同。调用的一般格式为:同。调用的一般格式为:过程名过程名或或过程名(实在参数表)过程名(实在参数表)说明说明:实参的实参的个数、类型个数、类型必须与形参一一必须与形参一一对应对应。对应于值形参的实参可以是表达式,对应于变量形参的实参只能是变对应于值形参的实参可以是表达式,对应于变量形参的实参只能是变量。量。过程调用的步骤为:计算实参的值;将值或变量的过程调用的步骤为:计算实参的值;将值或变量的“地址地址”传送给对应传送给对应的形参;执行过程体;返回调用处。的形参;执行过程体;返回调用处。60.1函数往往只为求一个函数值;过程一般会被设计成求若干个运算结果,完成一系列的数据处理,或与计算无关的各种操作。2函数有类型,最终要将函数值传送给函数名;过程无类型,不能给过程名赋值。3调用方式不同。函数的调用出现在表达式中;过程的调用是由独立的过程调用语句实现的。4返回值的方法不同。函数值是通过函数名传回调用程序;过程则是通过参数将运算的结果传给调用程序。四、过程与函数的主要区别:四、过程与函数的主要区别:61.变量及其作用域变量及其作用域一、变量的类型:一、变量的类型:全程变量和局部变量全程变量和局部变量1)、全程变量和它的作用域)、全程变量和它的作用域全程变量是指在程序开头的说明部分定义和说明的量全程变量是指在程序开头的说明部分定义和说明的量。全程变量的作用域分为两种情况:全程变量的作用域分为两种情况:(1)在全程变量和局部变量不同名时,其作用域是整个程序。在全程变量和局部变量不同名时,其作用域是整个程序。(2)在全程变量和局部变量同名时,全局变量的作用域不包含同在全程变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域。名局部变量的作用域。2)、局部变量和它的作用域)、局部变量和它的作用域凡是在子程序内部使用的变量,必须在子程序中加入说明。凡是在子程序内部使用的变量,必须在子程序中加入说明。这种在子这种在子程序内部说明的变量称为局部变量。程序内部说明的变量称为局部变量。局部变量的作用域是其所在的子局部变量的作用域是其所在的子程序。程序。形式参数也只能在子程序中有效,因此也属于局部变量。形式参数也只能在子程序中有效,因此也属于局部变量。局部变量的作用域分为两种情况:局部变量的作用域分为两种情况:(1)当外层过程的局部变量名和嵌套过程中的局部变量不同名时,当外层过程的局部变量名和嵌套过程中的局部变量不同名时,外层过程的局部变量作用域包含嵌套过程。外层过程的局部变量作用域包含嵌套过程。(2)当外层过程的局部变量名和嵌套过程内的局部变量名同名时,当外层过程的局部变量名和嵌套过程内的局部变量名同名时,外层过程的局部变量作用域不包含此过程。外层过程的局部变量作用域不包含此过程。62.【例5】:全程变量的作用域。programex5;varm:integer;proceduretest1;beginm:=100;end;beginm:=5;writeln(beforethetest1call,mis:,m);test1;writeln(afterthetest1call,mis:,m);end.运行结果:beforethetest1call,mis:5afterthetest1call,mis:10063.【例6】:比较全程变量与局部变量的作用域。programex6;varm:integer;proceduretest2;varm:integer;beginm:=100;end;beginm:=5;writeln(beforethetest2call,mis:,m);test2;writeln(afterthetest2call,mis:,m);end.运行结果:beforethetest1call,mis:5afterthetest1call,mis:564.参数的传递参数的传递一、参数的类型:1形参和实参:形参和实参:函数调用和过程调用的一般步骤:注意:由于形参类型不同,其在函数和过程调用中所起的作用也不同。形参的类型可分为:值形参、变量形参、函数形参、过程形参。实参也对应分为:值实参、变量实参、函数实参、过程实参。实参和形参结合 执行函数体或过程体 返回调用处继续执行65.2、值参和变参(1)值参:在函数或过程定义中,没有加VAR说明的参数,在调用函数或过程时,调用程序将实在参数的值直接传递给形参,起着赋值作用。(2)变参:在函数或过程定义中,加有VAR说明的参数,在调用函数或过程时,调用程序将实在参数的变量地址传递给形变参,因此当过程或函数处理中,改变形参变量的值,则实在参数的变量值也随之改变。(共享同一个存储单元)例:procedurearea(a,b,c:real;vars:real);66.3值参和变参例题:值形参:functionfac(x:integer):integer;【例7】:值参数分析programex7;vara:integer;proceduresum(b:integer);beginb:=b+10;writeln(b=,b);end;begina:=10;sum(a);writeln(a=,a);end.运行结果:b=20a=1067.变量形参:procedurearea(a,b,c:real;vars:real;)几点说明:1.函数不允许用变量形参;过程如需向调用程序返回值时,应采用变量形参。2.变量形参要求它的实参和它是同一类型的变量,而不能是表达式。3.在过程执行时,遇到对变量形参的引用或赋值,就是对相应参数的引用或赋值。4.对变量形参的任何操作就是对实参本身的操作。68.【例8】:变量参数分析programex8;vara:integer;proceduresum(varb:integer);beginb:=b+10;writeln(b=,b);end;begina:=10;sum(a);writeln(a=,a);end.运行结果:b=20a=2069.o小结:值参和变参o值形参传值:调用时可用表达式代替形参,不改变实在参数的值。o变量形参传地址:调用时必须用变量代替形参变量,改变实在参数的值。例:请看下列程序的运行结果。programli3_10;vara,b,c:integer;proceduresub(x,y:integer;varz:integer);beginx:=x+1;y:=y+1;z:=x+y;writeln(sub:x=,x:2,y=,y:2,z=,z:2);end;begina:=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:a1b4c9sub:x2y5z7main:a1b4c7sub:x13y17z30main:a30b4c770.1递归的定义:Pascal语言中,如果在一个函数、过程等的定义或说明内部又直接或间接地出现有对自身的引用,则称它们是递归的或者是递归定义的。例如:在数学上,所有偶数的集合可递归地定义为:0是一个偶数;一个偶数和2的和是一个偶数。可见,仅需两句话就能定义一个由无穷多个元素组成的集合。2递归的实现:通过函数或过程的调用来实现。函数或过程直接调用其自身,称为直接递归;函数或过程间接调用其自身,称为间接递归。第五节第五节 程序的递归调用程序的递归调用71.3例题:【例】:用递归计算n!n!可以由下列公式表示:programex15;varn:integer;s:integer;functionfac(a:integer):integer;beginifa=0thenfac:=1elsefac:=a*fac(a-1);end;beginreadln(n);s:=fac(n);writeln(n,!=,s)end.输入:5输出:n!1 n=0n(n-1)!n072.主程序主程序fac(5)5*fac(4)4*fac(3)3*fac(2)2*fac(1)1*fac(0)111262412073.递归结构的优点:结构清晰、容易阅读和理解,递归结构的缺点:需要保留每次递归调用时的参数,和局部变量,占用内存大,耗费机时多,程序运行的效率较低,递归算法的实用情况:符合递归的描述:1.需要解决的问题可以化为子问题求解,而子问题求解的方
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!