PASCAL语言程序设计2_第1页
PASCAL语言程序设计2_第2页
PASCAL语言程序设计2_第3页
PASCAL语言程序设计2_第4页
PASCAL语言程序设计2_第5页
已阅读5页,还剩48页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/53目录第一部分PASCAL语言程序设计1第一章PASCAL语言基础1第一节程序的组成与上机调试运行2第二节常量、变量与数据类型3第三节表达式与标准函数6第四节赋值语句、输入与输出语句9习题12第二章程序的三种基本结构14第一节顺序结构14第二节选择结构14第三节循环结构16习题19第三章数组21第一节一维数组21第二节二维数组及应用24习题25第四章字符与字符串操作28第一节字符和字符数组28第二节字符串变量28第三节字符串应用举例30习题32第五章函数与过程34第一节自定义函数34第二节自定义过程37第四节递归41第五节递归与回溯44习题49第一部分PASCAL语言程序设计第一章PASCAL语言基础PASCAL语言是瑞士苏黎士工科大学的NIKLANSWIRTH(沃思)1971年发表的,是为了纪念17世纪法国著名哲学和数学研究者BLAISCPASCAL而将它命名为PASCAL程序设计语言。PASCAL语言是信息学奥赛中普遍使用的程序设计语言。2/53第一节程序的组成与上机调试运行一、程序的组成我们先看一道例题。例11输入两个整数A和B,计算A和B的和(AB)。【参考程序】PROGRAMA1INPUT,OUTPUT/程序首部VARA,B,CINTEGER/程序说明部分,A,B,C被说明为整型变量BEGIN/程序执行部分,下面是程序的内容WRITEA/在屏幕上输出一个字符串“A”,输出完后不换行READA/从键盘输入一个数值赋给变量AWRITEB/在屏幕上输出一个字符串“B”,输出完后不换行READB/从键盘输入一个数值赋给变量BCAB/计算AB的和,并将这个和赋值给变量CWRITELNA,B,C/输出ABC的等式,输出完后换行END/程序结束【样例输入】A10B30【样例输出】103040由上可以看出,一个PASCAL程序由以下三部分组成(1)由PROGRAM引导的一行是PASCAL程序的首部。程序首部指出了源程序的名称,是由用户自己给出的,该例子称为A1。程序名后用括号括住的两个参数INPUT与OUTPUT,通常表示程序运行中的标准输入和输出文件,程序首部以分号结束。(2)PASCAL程序的第二部分是说明部分。说明部分要求列出程序中引用的全部常量、变量、转移标号、类型、过程和函数的有关说明。若变量C在说明部分没有说明,后边的语句CAB在执行时;翻译软件便能指出其错误并提醒用户加以改正,程序中每个语句都以分号表示结束。(3)程序的第三个部分是用BEGIN和END括住的一串语句,称为程序的执行部分。有的书中将说明部分和执行部分合称为程序体。二、PASCAL语言编辑软件的基本操作下面我们以FREEPASCAL110系统为例来学习一下PASCAL语言编辑软件的使用。1FREEPASCAL的启动在运行程序目录下一般是CPPBINGO32V2运行启动程序FPEXE,即可启动系统。屏幕上出现如图11所示的集成环境。图112FREEPASCAL系统集成开发环境IDE简介最顶上一行为主菜单,中间蓝色框内为编辑窗口,在编辑窗口内可以进行程序的编辑,最底下一行为提示行,显示出系统中常用命令的快捷键,如将当前编辑窗口中文件存盘的命令快捷键为F2,打开磁盘文件命令F3,等等。3/533新建程序窗口按F10切换到主菜单,选择FILE菜单,执行其中NEW命令,就可建立一个新的程序窗口(默认文件名为NONAME00PAS或NONAME01PAS等)。4程序的输入、编辑与运行在当前程序窗口中,一行一行的输入程序。当程序输入完毕之后,一般要先按ALTF9(或执行COMPILE菜单中COMPILE命令)对程序进行编译。如果程序有语法错误,则会出现一个COMPILER窗口,提示你语句错误的坐标。若无语法错误,则窗口正中央会出现一个对话框,提示编译成功。接下来,我们可以运行程序了。程序的运行可以通过按ALTR打开RUN菜单中的RUN命令,或直接按快捷键CTRLF9,则可以在用户窗口中输出运行结果。通常在程序运行结束后系统回到PASCAL系统的集成环境,因此要查看运行结果,要按ALTF5将屏幕切换到用户屏幕。5程序的保存与打开当我们想把程序窗口中的程序存入磁盘时,可以通过按F2键或执行FILE菜单中的SAVE命令来保存程序。第一次保存文件时屏幕上会出现一个对话框要求输入文件名默认扩展名为PAS。当我们要将磁盘上的PASCAL程序打开(装入窗口)时,可按F3或执行FILE菜单中的OPEN命令来打开程序,此时系统也会弹出一个对话框要求输入要打开的文件名,或直接在文件对话框列表中选择所要打开的文件。第二节常量、变量与数据类型一、常量(1)常量在某个程序运行的整个过程中其值不能发生改变的量。(2)常量定义常量定义出现在说明部分。它的语法格式是CONST例如CONSTPI3141592/此种方式定义的常量在程序中不可以改变(3)常量定义部分必须以保留字CONST开头,可以包含一个或几个常量定义,而且每个常量均以分号结束。二、变量(1)变量定义在某个程序的运行过程中其值可以发生改变的量。它应具有以下三个要素变量名、变量类型和变量值。(2)变量说明变量说明出现在说明部分。它的语法格式是VAR(3)变量名每一个变量必须用一个合适的标识符来命名。标识符是用来标识处理对象(如常量、变量、类型、过程、函数、程序和文件等)的符号名称。标识符是编程者命名的,自由度很大。命名中应该注意遵循一定的规则,如必须以字母开头,后面可以跟字母、数字和连字符“_”,若有连字符“_”则必须位于标识符中间。如A,ROOT,TOT,T3,EXP_1都是合法的标识符,而3A,A,MY都不是合法的标识符。(4)变量的类型4/53在PASCAL程序执行的任一时刻,变量总有相应的值。由于变量是有类型的,所以整型变量对应整数值,实型变量对应实数值。在PASCAL语言中规定在程序中使用的变量必须先定义后使用。如果用到的变量没有定义就使用,程序编译时会出现“IDENTIFIERNOTFOUNDX”的错误信息。例12已知某圆的半径R1515,求该圆的面积S【分析】圆的面积S314圆的半径R圆的半径R【参考程序】PROGRAMT301CONSTPI314VARS,RREAL/定义两个实型变量S,RBEGINR1515SPIRRWRITELNS102/显示宽度是10,保留两位小数END【输出结果】4757三、数据类型PASCAL语言提供了丰富的数据类型,大致分为以下三类,如图12所示图12简单类型是指该类型不能再分解为其它类型,而结构类型是由简单类型所组成的,或者说结构类型是由简单类型所构造成的。1整型一个整型数据用来存放整数。FREEPASCAL支持七种预定义整型,它们是SHORTINT(短整型)、INTEGER(整型)、LONGINT(长整型)、BYTE(字节型)、WORD(字类型)、INT64和QWORD,每一种类型规定了相应的整数取值范围以及所占用的内存字节数。类型数值范围占字节数SHORTINT1281271BYTE02551WORD0655352INTEGER32768327672LONGINT214748364821474836474INT64922337203685477580892233720368547758078QWORD0184467440737095516158FREEPASCAL预定义了两个整型常量标识符MAXINT和MAXLONGINT,他们各表示确定的常数值,MAXINT为32767,MAXLONGINT为2147483647,他们的类型分别是INTEGER和LONGINT。5/532实型FREEPASCAL语言支持五种预定义实型,它们是REAL(基本实型)、SINGLE(单精度实型)、DOUBLE(双精度实型)、COMP()、EXTENDED(扩展实型),每一种类型规定了相应的实数取值范围、所占用的内存字节数以及它们所能达到的精度。类型数值范围占字节数有效位数REAL29E3917E3861112SINGLE15E4534E38478DOUBLE50E32417E30881516COMP装配实型2631263181920EXTENDED(扩展实型)34E493211E4932101920实型常量包括正实数、负实数和实数零。PASCAL中表示实型常量的形式有两种。十进制表示法这是人们日常使用的带小数点的表示方法,要求小数点前后必须有数字。如00、00、561、80、6050等都是实型常量,而0、55都不是合法的实数形式。科学记数法科学记数法是采用指数形式的表示方法,如125105可表示成125E05。在科学记数法中,字母“E”表示10这个“底数”,而E之前为一个十进制表示的小数,称为尾数,E之后必须为一个整数,称为“指数”。如123456E26、0268E5、1E5是合法形式,而34E12、2E5、E5、E、12E05都不是合法形式的实数。值得注意的是实数的运算比整数的运算速度慢且无法像整数那样精确表示,只能近似表示。3布尔型(BOOLEAN一个布尔型数据用来存放逻辑值(布尔值),布尔型的值只有两个FALSE(假值)和TRUE(真值)。4字符型CHAR字符型只允许单引号中有一个字符,否则就是字符串STRING。如A,Y,9,7。例13有如下程序,运行它,看有什么结果PROGRAMAAVARA,BINTEGERC,DREALM,NBOOLEANCHCHARBEGINA10B5WRITELNA,A,B,BCA/BWRITELNC,CCHTWRITELNCH,CHM56N107WRITELNM,M,N,NEND【输出结果】A10B5C2000000000000000E000CHTMFALSENTRUE例14编写程序,输出如下图形。6/53【参考程序】PROGRAMAABEGINWRITELNWRITELNWRITELNEND第三节表达式与标准函数一、算术运算符与算术表达式1算术运算符常用的有以下6个算术运算符加、减、乘、/实数除、DIV整除、MOD求余其中,/实数除得到结果为实型,如50/2025,4/220,DIV(求两个数相除后的整数部分),它要求除数和被除数均为整型,结果也为整型,如10DIV25,5DIV100,15DIV43,DIV运算只取商的整数部分,参与DIV运算的两个对象不能为实型。MOD求两个数相除后的余数部分也只能用于整数运算,结果为整数,例如10MOD42,17MOD41,4MOD134。2算术表达式在PASCAL语言中,算术表达式的意义为所有符合PASCAL语法规则的数值型运算对象(数值型常量、变量、函数)、运算符、圆括号所组成的有意义的式子。表达式的结果可按标准类型分成算术表达式(运算结果为整型/实型)及布尔表达式(运算结果为布尔型)。3关系运算符和关系表达式由一个关系运算符将两个类型相容且有序的表达式连结起来的式子,称之为关系表达式,其结果为布尔型(真TRUE或假FALSE)。这里用到的PASCAL语言中的关系运算符有大于等于大于等于不等于共六个。4布尔运算及布尔表达式1布尔常量和变量在PASCAL语言中,布尔运算又称为逻辑运算,布尔值也称为逻辑值,它有“真”与“假”两个,分别用“TRUE”与“FALSE”这两个布尔常量来表示的。用来存放逻辑值的变量称为布尔变量,它的作用就是存放一个布尔常量。当然,布尔变量也必须先定义后使用。例如VART,FBOOLEAN在这里,使用BOOLEAN这个标准类型标识符来定义T与F这两个布尔变量。2布尔运算布尔运算有三个运算符NOT(逻辑非)、AND(逻辑与)、OR(逻辑或)由一个布尔运算符将两个类型相容且有序的表达式连结起来的式子,称之为布尔表达式。在一个既包括有布尔运算符,又有关系运算符的表达式中,它们的运算次序为1)括号2)函数3)NOT(逻辑非)4)、/、DIV、MOD、AND7/535)、OR6)、3布尔型数据的输入与输出在PASCAL的程序中,只能通过赋值语句给布尔型变量赋值,不能用READ语句输入一个布尔常量,但可以用WRITE或WRITELN语句直接输出布尔变量和布尔常量的值。例15判断程序运算结果PROGRAMAAVARA,B,S,DINTEGERL,E,G,F,H,MBOOLEANBEGINA3B7SABDADIVBLABFEORGHEANDGMNOTHWRITES,S5WRITELND,D5WRITELNL,LWRITELNE,E,G,GWRITELNF,H,MEND【输出结果】S10D0LTRUEEFALSEGFALSEFALSEFALSETRUE二、标准函数PASCAL预先定义了很多种标准函数,其调用格式如下变量名函数名自变量参数;1算术函数算术函数可以直接参与算术运算,函数的自变量和函数的类型均为数值型。函数名称函数标识符自变量类型结果类型说明绝对值ABSX整型、实型同自变量求X的绝对值平方SQRX整型、实型同自变量求X的平方平方根SQRTX非负整型、非负实型非负实数求X的平方根指数EXPX整型、实型实型相当于EXPXEX底数为E自然对数LNX整型、实型实型求X的自然对数底数为E算术函数使用注意事项(1)绝对值函数ABSX与数学中的意义功能相同,如ABS7171,ABS1616(2)平方值函数SQRX即求X2值,如SQR525(3)在PASCAL语言中,若要计算YXN,可以用YEXPNLNX来表示。(4)平方根函数SQRTX与数学中的意义功能相同,运算时要求自变量X0。如果要计算的值,那只能借助其它方法了。如EXP1/3LNX。X3X(5)指数函数EXPX与对数函数LNX是一对逆函数。与数学中相应函数的区别在于它们都是以自然对数EE271828为底。例如EXP2即求E227182827182873890461反过来,LN738904612附对数的定义8/53假定A是一个不等于1的正实数即且A0,对于正实数B即B0,如果存在1A一个实数C,满足这样的关系式,那么我们说”C是以A为底,B的对数”。并以CB数学符号来表示此意义。注读作”以A为底,B的对数”,其中ALOGLOGB叫作的”底”,B叫作的”真数”ALA2转换函数转换函数的功能是可以根据需要将数据类型进行转换。函数名函数标识符自变量类型函数值类型说明截尾TRUNCX实型整型取X的整数部分舍入ROUNDX实型整型对X四舍五入后取它的整数部分序号ORDX整型、字符型、布尔型整型求X对应的序号字符CHRX整型字符型求X对应的字符转换函数使用注意事项(1)截尾函数TRUNCX可以将实数型自变量X的小数部分截去,函数值为整数。如TRUNC178的值为17,TRUNC641的值为6。(2)舍入函数ROUNDX是将实数型自变量X的小数部分四舍五入,取它的整数部分。如ROUND178的值为18,ROUND61的值为6。(3)当序号函数的自变量为字符时,函数值为该字符的ASC码,当自变量为整型数据时,则ORDX的值为自变量本身,当自变量为BOOLEAN时,PASCAL中规定FALSE的序号为0,TRUE的序号为1。如ORDA65,ORDA97,ORD048,ORD6868,ORDFALSE0,ORDTRUE1。序号函数ORDX与字符函数CHRX的功能相反,它们是一对逆函数。如CHRORDAA,ORDCHR9696。3顺序函数函数名称函数标识符自变量类型函数值类型说明前趋PREDX整型、字符型、布尔型整型、字符型、布尔型求X的前一个数据若X是第一项,则函数无意义后继SUCCX整型、字符型、布尔型整型、字符型、布尔型求X的后一个数据若X是最后一项,则函数无意义顺序函数使用注意事项(1)前趋函数PREDX和后继函数SUCCX是一对逆函数。如PREDSUCCXX,SUCCPREDXX。(2)顺序函数的自变量X必须是一个有顺序的数据类型,如实数型的数虽然能比较大小但无法确定X前一项和后一项到底是什么数,所以实型数没有前驱和后继。(3)当自变量X为数据第一项时,它没有前驱,如PREDFALSE无意义;当自变量X为最后一项时,它没有后继。如SUCCTRUE无意义。4逻辑判断函数函数名称函数标识自变量类函数值类型说明9/53符型奇函数ODDX整型布尔型判断X的奇偶性奇函数使用注意事项奇函数的值为BOOLEAN类型,即只存在“真”TRUE和“假”FALSE。如ODD5TRUE,ODD10FALSE第四节赋值语句、输入与输出语句一、赋值语句1格式变量表达式;2使用说明(1)该语句具有先计算后赋值的功能,即先计算出来表达式的值,然后将其值赋给左边的变量或函数标识符,注意一个赋值语句只能给一个变量赋值。(2)“”称为赋值号,要注意不能与关系运算符“”混淆,只有在赋值语句中才能使用赋值号,赋值号具有方向性,是将赋值号右边表达式的值计算出来,赋予赋值号左边的变量,所以赋值号的左边只能是变量,并且赋值号两边的类型应该具有赋值相容性,如整型的值可以赋值给实型变量,反之则不行,字符型可以赋值给字符串型变量,反之也不行。(3)被赋值的变量本身可以作为因子参与运算,如NN1,II1,SSX。例16写出执行下面的程序运行后,变量A、B、C的值。PROGRAMA16VARA,BINTEGERCREALBEGINA200BADIV10CAWRITELNA7,B7,C72END二、输入语句(读语句)1格式READ输入项;或READLN2使用说明(1)执行该语句时,从键盘上(或文件中)读入数据,将其值依次赋给输入项中的变量。注意输入的数据必须是常量,且输入的数据类型必须和变量一一对应。(2)输入项中的括号内应是一组变量,这里一组的含义是可以为一个,也可以是多个,若是多个时,各变量之间必须用逗号分隔,最后一个没有符号,他们必须在程序说明部分预先说明,他们可以是整型、实型或字符型等数据类型,但不能是布尔型,因为布尔型不可以直接读入。如READA,B,C,D;或READLNM,N,L;(3)程序运行后,执行到READ或READLN语句时,系统处于等待状态,等待用户从键盘上输入数据,且当输入项中的变量为多个时,要求输入的相应数据个数不能少于其变量的个数,当输入的数据个数少于变量个数时,系统仍处于等待状态,接着输入的数据无论是换行输入还是不换行输入均有效。注意输入数值(整型或实型)数据时,数据间用空格或回车键分隔,最后一定要有一个回车,表示输入结束;输入字符型数据时,数据间不能用空格分隔,可以连续输入(不用空格)或用回车键一个一个字符分隔输入。(4)READ与READLN的区别10/53READ语句是一个接一个地读数据,在执行完本READ语句读完本语句中变量所需的数据后,下一个读语句接着从该数据输入行中继续读数据,也就是说,不换行。READLN则不同,在读完本READLN语句中变量所需的数据后,自动换行,该数据行中剩余的数据多余无用,并且READLN可以不带参数表,即可以没有任何输入项,只是等待读入一个换行符回车,经常用于暂停程序的运行,直到输入一个回车。例17设I,J,K是整型变量,现需将30,20,10分别赋给这三个变量,要求写出对应于下列语句的所有可能的输入格式READI,J,K解所有可能输入格式如下(注其中用“”来表示空格,每一行后均有一个回车,以下均同)(1)302010(2)302010(3)302010(4)302010例18设A,B,C是字符型变量,现需将P,A,S分别赋给这三个变量,要求写出对应于下列语句所有可能的输入格式READA,B,C(1)PAS(2)PAS(3)PAS(4)PAS例19设A,B,C,I,K,J,L,M,N为整型变量,则下面语句的赋值情况是READLNA,B,CREADLNI,K,J,LREADLNM,N输入数据12345678901020读入结果为123(分别对应A,B,C,后面的4,5被忽略)6789(分别对应I,K,J,L,后面的0被忽略)1020(分别对应M,N)三、输出语句(写语句)1格式WRITE输出项或WRITELN2使用说明(1)执行该语句时,按指定的格式将输出项的内容输出。(2)输出项中括号内的项目内容可以是一组常量、变量、表达式或字符串,一组的含义是可以为一个,也可以是多个,若是多个时,各输出项之间必须用逗号分隔,最后一个没有符号。如WRITEAB,AB或WRITELN3,N,L(3)输出项中的各个不同项目其输出的结果分别是当输出项为常量时,直接输出该常量的值;当输出项为变量时,输出该变量存储单元内的内容,变量允许属于任何一种标准数据类型;当输出项为表达式时,则首先对表达式11/53进行计算,然后输出计算的结果;当输出项为字符串时,原样输出用单引号括起来的字符串中的内容。(4)WRITE语句与WRITELN语句的区别WRITE语句将其后括号中的表达式一个接一个输出后,没有换行。而WRITELN语句则在输出各个表达式的值后换行。例如以下两个程序段的输出分别为1WRITE1,2,3,4WRITE5,6输出为1234562WRITELN1,2,3,4WRITE5,6输出为123456例110请写出下面程序的输出结果。CONSTA20VARBINTEGERBEGINB60WRITELN100WRITELNBWRITELNABWRITELNAB,ABEND【输出结果】100/直接输出该常量的值60/输出该变量存储单元内的内容80/输出计算的结果AB80/原样输出字符串中的内容及输出AB表达式的结果4输出语句的输出格式在PASCAL语言中,我们将每一种类型的数据在输出时所占据的列数称为场宽,下表是PASCAL对各种数据定义的标准场宽(要注意各种计算机系统对标准场宽的约定不同)PASCAL对各种数据定义的标准场宽数据类型标准场宽实例输出结果整数实际整数长度WRITE(1234)1234实型REAL、SINGLE23WRITE3/74285714285714285E001布尔型4或5TFALSEWRITETFALSE字符型1WRITEAA12/53字符串型串长WRITEPASCALPASCAL在编程时,我们除了可以使用上表中的标准场宽,还可以根据实际需要自己来定义要输出数据的场宽,自定义场宽分为单场宽和双场宽。(1)单场宽格式XN,其中X表示要输出的项目,N表示输出X时所占的位数,应为正整数。如WRITELNPAS5表示项目字符串PAS的场宽为5。它主要用来输出整型、字符型、布尔型的数据。例111设M为整型数2009,CH为字符,F为布尔值FALSE,此时执行如下输出语句WRITELNM5WRITELNCH5WRITELNF5WRITELNPAS5则屏幕显示(2)双场宽格式XN1N2,双场宽是用来输出实型数据的。其中X表示要输出的项目,N1表示输出X时所占总位数,包括符号位、整数部分、小数点与小数部分,N2表示小数部分的位数,当N2小于实际小数位数时,要对舍去的小数位数进行四舍五入。当N2大于实际小数位数时,右边以零补齐。要注意的是,在数据不突破场宽限制时,一律按场宽定义输出,在数据突破了场宽限制时,则强行将场宽扩展到所需要的位数,所以有时输出限制仅有小数位N2时,一般设总场宽为0,即X0N2,如对X要求保留两位小数,写法为WRITELNX02例112写出以下程序的输出结果PROGRAMAAVARAINTEGERBREALCCHARDBOOLEANBEGINA1234B12346793CDFALSEWRITELNA,A5WRITELNB,B122WRITELNB02WRITELNC,C5WRITELND,D5WRITELNOK5END【输出结果】123412341234679300000000E003123468123468FALSEFALSE13/53OK习题11在屏幕上打印一行字符“THISISMYFIRSTPROGRAM“,请同学们将以下程序输入计算机内并运行。运行程序CTRLF9,查看程序运行ALTF5PROGRAMK101BEGINWRITELNTHISISMYFIRSTPROGRAMEND12编写一个减法程序,输入两个整数(B的值。【样例输入】129【样例输出】TRUE111有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,丙有13粒糖果。现在他们做一个游戏,从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做,问最后甲、乙、丙三人各有多少粒糖果112试编一程序,输入一梯形的上底A、下底B、高H,求该梯形的面积S。结果保留3位小数。【分析】梯形面积SABH/2,A,B,H,S均为实数。【样例输入】125928【样例输出】8680014/53113已知A1、A2和A3的布尔值分别是TRUE、FALSE、FALSE,计算下列表达式的值。(1)NOTA1ANDNOTA2(2)ALORA2ANDA3(3)NOTA1ORA2ANDA2ORA3114输入两个整数,将两个数交换值后输出。【样例输入】2690【样例输出】9026115输入一个字符,打印出它的前导值、后继值和序号。每一项中间隔一空格,最后无空格。【样例输入】D【样例输出】CE68116读入摄氏温度C,写程序将它转换成华氏温度F输出。已知F9/5C32。117输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的自然数。【样例输入】312【样例输出】21315/53第二章程序的三种基本结构第一节顺序结构若程序按照语句的书写先后顺序逐句执行,直到程序的结束,这种程序结构我们称为顺序结构。这是程序设计中最简单的一种结构。如程序中N个语句语句1;语句2;语句N;若运行时的顺序是语句1执行后执行语句2,语句2执行后执行语句3,直到语句N1执行后执行语句N。那么程序中语句1;语句N;便是一个顺序结构的部分,它是结构化程序设计的基础。注意每条语句以分号表示结束。第二节选择结构一、复合语句复合语句的一般形式是BEGIN语句1;语句2;语句NEND在这里,BEGIN与END起语句括号的作用,相当于使用了一个语句括号将若干语句括了起来,做一个语句处理。程序运行时,通常是按书写的顺序去执行复合语句内的各个语句。二、条件语句(IF语句)1格式IF语句有以下两种标准格式(1)IF条件表达式THEN语句;(2)IF条件表达式THEN语句1ELSE语句2;2功能(1)格式1的IF语句的执行过程是若条件关系式的条件为真,则执行THEN后面的语句,当条件不成立时,退出IF结构,去执行IF语句下面的语句。(2)格式2的IF语句的执行过程是若条件关系式的条件为真,则执行THEN后面的语句,否则执行ELSE后面的语句。要特别注意ELSE前面的语句1最后不能有分号,因为分号是两个语句之间的分隔符,而ELSE并非语句,如果在该处添了分号,则在编译的时候就会认为IF语句到此结束,而把ELSE当作另一句的开头,输出出错信息。例21输入两个整数A,B,将它们由小到大输出。【样例输入】5632【样例输出】3256【参考程序】PROGRAMAAVARA,B,TINTEGERBEGINREADA,BIFABTHEN/如果第一个数大于第二个数,则两个数互换BEGIN16/53TAABBT/两个数互换ENDWRITELNA,B/输出运算结果END例22输入一个三位数的整数,将数字位置重新排列,组成一个尽可能大的三位数。【样例输入】213【样例输出】321【分析】先用DIV、MOD结合分离出来整数的每一位数字,然后将这三位数字按照由大到小进行排序,然后把最大的作为百位数,次之作为十位数,最小的作为个位数即可。【参考程序】PROGRAMAAVART,A,B,C,NINTEGERBEGINREADNANDIV100BNDIV10MOD10CNMOD10IFA/可选项END2功能(1)先计算出测试表达式的值,注意这个测试表达式中不能含有TRUNC、ROUND函数,测试表达式的值不能是实数。(2)然后用测试表达式的值依次与各情况标号进行对照,当找到一个与测试表达式的值相匹配的情况标号,就去执行该CASE情况标号后面的语句块,然后跳到与CASE相对应的END后面的语句继续执行。(3)如果找不到与之匹配的情况标号(若有ELSE则执行它后面的语句),退出CASE语句,执行它后面的语句。例24打印某年某月有几天。【样例输入】20002【样例输出】29【参考程序】PROGRAMAAVARY,M,DINTEGERBEGINREADY,M/读入年和月CASEMOF1,3,5,7,8,10,12D314,6,9,11D302IFYMOD40ANDYMOD1000ORYMOD4000/判断闰年布尔表达式THEND29ELSED28ENDWRITELND/输出这个月的天数END第三节循环结构一、计数循环1其语句格式是1FOR控制变量初值TO终值DO一条语句2FOR控制变量初值DOWNTO终值DO一条语句其中FOR、TO、DOWNTO和DO是PASCAL语言保留字,一条语句可以是一条简单语句或一条复合语句,但只能是一条语句,它适合用于能事先确定循环次数的事件。2执行过程(1)先将初值赋给左边的变量(称为循环控制变量);(2)判断循环控制变量的值是否已“超过“递增是大于,递减是小于终值,如已超过,则跳到步骤(6);(3)如果未超过终值,则执行DO后面的那个语句(称为循环体);(4)循环变量递增(对TO)或递减(对DOWNTO;(5)返回步骤(2);(6)循环结束,执行FOR循环下面的一个语句。3注意事项18/53(1)FOR循环控制变量必须是顺序类型的变量,如整数,但不能是实数,也不能是8字节整型,如INT64、QWORD等。(2)FOR语句的循环体中不能修改循环控制变量,它将会自动增加或减少。(3)BREAK中断当前所在的循环。例25输入N0DOBEGINIFCHAORCHATHENSS1READCHENDWRITELNSEND20/53例210求输入的一个整数N00DOBEGINTNMOD10SSTNNDIV10/每次分离出N的个位数赋值给T,并将之累乘到S中,然后将个位数字去掉ENDWRITELNSEND例211求两个自然数M,N的最小公倍数。【样例输入】128【样例输出】24【参考程序】PROGRAMAAVARM,N,I,SLONGINTBEGINREADM,N/输入两个自然数M,NI1/让一个变量I呈自然数列增长,刚开始设为1SMI/S为M的倍数WHILESMODN0DO/若S又刚好是N的倍数,则S就是M,N的最小公倍数BEGINII1SMIENDWRITELNS/输出最小公倍数END习题21判断下面题目是否正确(1)复合语句与程序执行部分的“BEGINEND”意义相同。(2)布尔型数据是顺序型数据。(3)NOTFALSE的值是FALSE。(4)一个变量或常量不可以看成为一个表达式。22判断读入的整数A是奇数还是偶数,若是奇数,输出“JISHU”,否则输出“OUSHU”【样例输入】5【样例输出】JISHU23输入三个数,将它们按由大到小的顺序输出。【样例输入】12569【样例输出】5612924根据学生的成绩给予相应的等级,若成绩在90100之间输出A,在8089之间输出B,在6079之间输出C,60以下输出D。现在输入一个学生的成绩S(0X将TM1转1此种方法,首先是将要查找的数据项与数据表的中间项进行比较,若相等则表示已查到,结束查找过程,否则,继续往下进行,若中间项数据大于查找数据项,则可知要查找的数据在表的前半部,反之则在后半部。然后再选定相应的前(后)部的一半,重复上述过程。在查找的过程中,不断地将数据区域分半,使需查找的数据所在范围越来越小。由此可见,它要比顺序查找的效率高得多,是最常用的查找办法,适用于数据较多的情况下。例32先输入10个递增排列的数,然后输入一个数X,看它是否在这10个数中,若在,输出它的位置,否则输出NOTIN。【样例输入】/两行,第一行是10个数,第二行是要查找的数218232735394748556948【样例输出】/一行,查找的结果8程序一二分法查找,思考一下查找了多少次PROGRAMAAVARP,T,I,F,M,XINTEGERAARRAY110OFINTEGERBEGINFORI1TO10DO/输入10个递增的数据READAIREADX/输入待查找的数据XP1T10F0WHILEPAMTHENPM1/若XAM,则待查找的数据在后半部分。ELSETM1/若X0THENWRITELNMELSEWRITELNNOTINEND思考若在1000个数据中查找一个数,程序一和程序二分别最多查找多少次,可以确定该数据是否存在数据表中四、数组元素的移动与插入当一个数组建立好后,有时会根据问题的需要,移动一下各元素中的数据位置或在数组中插入一个数据。例33将A数组中从第M个元素起一直到最后的元素平移到数组的开头,并把A1到AM1中的元素向后顺移,如图所示。图31【样例输入】/两行,第一行是6个数,第二行是M的值1234563【样例输出】/一行,移动结果,两个数之间隔一空格,最后无空格345612【参考程序】PROGRAMAACONSTN6TYPEARRAYTYPEARRAY1NOFINTEGERVARAARRAYTYPEI,J,M,KINTEGERBEGINFORI1TONDOREADAI/读入N个数据MMAXINTWHILEMNORMAJANDJKTHENAJX/插入到数组的最后ELSEBEGINFORIKDOWNTOJDOAI1AI/移动数据元素,空出第J个位置AJX/插入X到数组第J个位置ENDFORI1TOKDOWRITEAI,/输出WRITELNAK1END第二节二维数组及应用一、二维数组的定义和一维数组一样,要在程序的说明部分的类型说明中对二维数组进行定义。它的一般形式为TYPE数组类型名ARRAY行下标范围,列下标范围OF数组元素基类型对二维数组的输入与输出也可用二重循环来实现输入FORI1TO5DOFORJ1TO4DOREADAI,J输出FORI1TO5DOBEGINFORJ1TO4DOWRITEAI,J,WRITELNEND从二维数组的定义可以看出,和一维数组相比较,二维数组在定义时一定要指定两个下标。行下标范围用来指定行下标的类型和它的取值范围,列下标范围用来指定列下标的类型和它的取值范围。二、二维数组元素的输入与输出例35输入5名学生4门功课的考试成绩,输出各人各科成绩及总分,成绩均为整数。【样例输入】/每行4个数据,数据间隔一空格2345678990877667907867458687987626/5367869091【样例输出】/共三行,每行5个数据,前4个是各科成绩,第5个是总成绩,数据间隔一空格,最后无空格。2345678922490877667320907867452808687987634767869091334【参考程序】PROGRAMAAVARI,JINTEGERAARRAY15,15OFINTEGERBEGINFORI1TO5DO/输入学生的原始成绩FORJ1TO4DOREADAI,JFORI1TO5DO/计算每个学生的总分,放入该行的第5个数据元素中BEGINAI,50FORJ1TO4DOAI,5AI,5AI,JENDFORI1TO5DO/输出结果BEGINFORJ1TO4DOWRITEAI,J,WRITELNAI,5ENDEND习题31按照顺序读入以下8个数据(每个数据DOBEGINNN1/统计读入字符的个数ANCH/将读入的字符赋给A数组READCHENDF0FORI1TONDO/判断是否是回文IFAIANI1THENBEGINF1BREAKEND/一旦出现首尾字符不相等,这个字符串就不是回文IFF0THENWRITELNYELSEWRITELNN/输出结果END第二节字符串变量FREEPASCAL字符串类型保留字STRING。定义格式为STRING30/53STRING括号内的N表示该字符串变量的最大长度,N的值需在1255之间,若省略N默认为255,在给字符串变量进行赋值操作或输出操作时,字符串的长度可以变化,可长可短,而不象数组那样必须按规定的长度输入数据或输出数据,更大长度的字符串用ANSISTRING来定义,它用法与STRING一样。常见的字符串函数函数意义使用方法CONCATS1,SN函数相当于”号连接N个字符串成为一个字符串,返回值是字符串,若连接后的字符串长度大于255,则出错STCONCATS1,S2,S3STS1S2S3STRI,S过程将一个整数或实数I转换成字符串SSTRI,SCOPYS,I,LEN函数在字符串S中从I位置开始取LEN个字符,若I超过串长,则返回一个空串,若I超出1255范围则出错STCOPYS,I,NLENGTHS函数求字符串S的长度ALENGTHSPOSST1,ST2函数求ST1字符串在ST2字符串中的开始位置,若没有,则返回值为0APOSST1,ST2DELETES,I,LEN过程在字符串S中从I位置开始删除LEN个字符,若IS串长度,则不删除任何字符;若I超出1255范围则出错;若ILENS长度,则仅删除串内长度DELETES,I,LENINSERTST1,ST,I过程将ST1插入到ST字符串第I个位置,若IST串的长度,则插入到ST字符串的最后面INSERTST1,ST,IVALST,R,C过程将字符串ST转换成与R同类型的数值,并将值赋予R,如果字符串中存在非数值型字符,则用C返回非数值型字符的位置,否则C的值为0VALST,R,C一、字符串变量的赋值字符串变量的赋值方法基本同一般变量,所不同的是赋值号右边的值需加一对单引号,如下面的例题便可以说明。例42判断下面程序的运行结果PROGRAMAAVARST1,ST2,ST3STRING15BEGINST1CHINAST2IAMACHINESEST3AMERICAWRITELNST1WRITELNST2WRITELNST1ANDST3END【输出结果】CHINAIAMACHINESECHINAANDAMERICA二、字符串的操作1字符串的输入和输出字符串是以回车作为结束标志,所以输入时必须用READLN,如READLNS;且每个READLN语句只能读入一个字符串,如READLNS1,S2是无法正确读入的,输出时直接输出就行,并且可以一次输出多个字符,如WRITELNS1,S2是可以正确输出的。31/532字符串可以和数组一样操作。如设ANABCDEG则A1EA3FWRITELNA或FORI1TOLENGTHADOWRITEAI都是合法的。3因为从键盘一次只能连续输入127个字符,所以较长字符串的输入一般都是采用文件输入的方式。4要严格区分数字字符、数字字符串与数字的不同,它们之间可以相互转化。如44;13261326;再如现设VARACHARIINTEGER若有A4IORDA48则WRITELNI这时输出I的值将会是数字4。5字符串大小的比较。123123的值为TRUE,1234512325的值为TRUE,123451234的值为TRUE,456DOBEGINIFCHAANDCH0THENWRITELNCH,ACHEND例45编写一个程序,统计从键盘输入的NDOBEGININCNWHILECHANDCHDOREADCHWHILECHDOREADCHENDWRITELNNEND习题41输入一串(0DO/用辗转相除判余法求最大公约数37/53BEGINABBRRAMODBENDGYBENDBEGINREADA,B,CKGYA,B/调用函数GY,求A,B的最大公约数KKGYK,C/调用函数GY,求K,C的最大公约数赋值为K,从而得到A,B,C三个数的最大公约数WRITELNKEND例54设计一个函数QSN,K,它能将自然数N的从右边开始的第K位上的数字取出来。例如QS13579,27QS2468,42调用此函数,求出3次输入后,得到的第K位上的数字之和。【样例输入】13375625345345346988093【样例输出】18【参考程序】PROGRAMAAVARN,K,I,SLONGINTFUNCTIONQSN,KLONGINTLONGINT/设定一个求从右边数第K位上数字的函数VARILONGINTBEGINFORI1TOK1DONNDIV10QSNMOD10ENDBEGINS0FORI1TO3DOBEGINREADN,KSSQSN,K/调用QS函数,并将求得的N右边第K位数字累加到S中ENDWRITELNSEND例55求出正整数NM之间的完全数(N0DOBEGINXYYZZXMODYENDZYENDBEGINREADLNA,BEEA,B,SWRITELNSEND通过上面的例题,我们可以看到过程与函数有下列主要区别(1)过程的首部与函数的首部不同。(2)函数通常是为了求一个函数值,而过程可以得到若干个运算结果,也可用来完成一系列的数据处理,或用来完成与计算无关的各种操作。(3)调用方式不同,函数的调用出现在表达式中,而过程调用是一个独立的语句。第三节参数和作用域一、局部量、全程量与作用域在子程序内部说明的变量,称之为局部变量。在主程序开头说明部分中加以定义与说明的量,称为全程量。在不同的说明语句部分所说明的变量,在程序中对此变量进行存取的适用范围是不同的,我们将其适用的范围称之为作用域。局部变量的作用域为所在子程序,由于形式参数只在所在子程序中有效,因此也属于局部变量。例510PROGRAMAAVARA,BINTEGERPROCEDUREADDCINTEGER/C为值形参、局部量,作用域在本程序,它的改变不会影响实在参数A的值BEGINCC10BB10/B为全程量,在过程中发生改变,退出后仍然是改变的WRITELNC,C,B,BENDBEGINA5B10ADDA/A为实在参数,它将值传送给值形参CWRITELNA,A,B,BEND【输出结果】C15B20A5B20在这里,A,B是全局量,C是局部量。二、值参数与变量参数41/53PASCAL在处理数据传送时有三种方法。一种是传名,一种是传值,第三种是传地址。传名就是通过全程量传递数据,变量在主程序中定义,在子程序中不被重新定义而被使用,那么它在主程序和子程序中就是同一个变量,所以在调用函数或过程时其值发生改变,返回主程序,它的值仍然是改变的。传值就是把一个调用语句中的实在参数的值,赋给对应的形式参数,一旦过程(或函数)执行完了,相应分配给形式参数的存储单元就被释放,其值也随之消失,相应实参的值并没有发生变化,也就是说,实在参数的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论