pascal语法讲义-第五讲
- 格式:pdf
- 大小:478.31 KB
- 文档页数:27
Pascal语言语法1. 简介Pascal是由Niklaus Wirth于1968年发明的一种程序设计语言。
它是一种结构化的高级编程语言,特别适用于教育和科学计算领域。
Pascal语言语法严谨而清晰,在许多大学的计算机科学课程中被用于教授基本的编程概念。
2. 变量和数据类型在Pascal中,变量必须在使用之前先声明。
可以使用var关键字声明一个或多个变量。
例如:varx, y, z: integer;name: string;rate: real;对于变量的声明,你需要指定变量的名称和数据类型。
Pascal支持多种数据类型,包括整数(integer)、实数(real)、字符(char)、字符串(string)等。
3. 控制结构Pascal语言支持常见的控制结构,如条件语句和循环语句。
3.1 条件语句条件语句用于根据不同的条件执行不同的代码块。
Pascal中的条件语句有if-then和if-then-else两种形式。
例如,下面是一个使用if-then-else语句的示例:if x > 0thenwriteln('x is positive')else if x < 0thenwriteln('x is negative')elsewriteln('x is zero');3.2 循环语句循环语句用于重复执行一段代码块,直到某个条件不再满足。
Pascal中的循环语句有while、repeat和for三种形式。
下面是一个使用while循环的示例,计算从1加到n的和:varn, sum, i: integer;sum := 0;i := 1;while i <= n dobeginsum := sum + i;i := i + 1;end;writeln('Sum = ', sum);4. 过程和函数Pascal中的过程和函数用于封装一段可重复使用的代码。
Pascal基础教程目录第一课初识PASCAL语言 (1)第二课赋值语句与简单的输出语句 (5)第三课带格式的输出语句输入语句 (12)第四课简单的分支结构程序设计 (19)第五课if嵌套与case语句 (23)第六课for循环 (29)第七课while循环与repeat-until循环 (30)第八课一维数组 (35)第九课多维数组 (39)第十课字符数组与字符串 (45)第十一课枚举、子界、集合及记录类型 (51)第十二课过程与函数 (66)第十三课动态数据类型(指针类型) (76)第十四课文件 (89)附录一Pascal中的字符串函数和数学函数 (111)附录二关于fillchar的使用和讨论 (116)附录三程序的调试技巧 (117)附录四Pascal的多种退出语句用法 (123)第一课初识Pascal语言信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题的能力。
选手首先应针对竞赛中题目的要求构建数学模型,进而构造出计算机可以接受的算法,之后要写出高级语言程序,上机调试通过。
程序设计是信息学奥林匹克竞赛的基本功,在青少年朋友参与竞赛活动的第一步必须掌握一门高级语言及其程序设计方法。
一、Pascal语言概述PASCAL语言也是一种算法语言,它是瑞士苏黎世联邦工业大学的N.沃思(Niklaus Wirth)教授于1968年设计完成的,1971年正式发表。
1975年,对PASCAL语言进行了修改,作为"标准PASCAL语言"。
PASCAL语言是在ALGOL60的基础上发展而成的。
它是一种结构化的程序设计语言,可以用来编写应用程序。
它又是一种系统程序设计语言,可以用来编写顺序型的系统软件(如编译程序)。
它的功能强、编译程序简单,是70年代影响最大一种算法语言。
二、Pascal语言的特点从使用者的角度来看,PASCAL语言有以下几个主要的特点:⒈它是结构化的语言。
第一章 PASCAL 基础一、PASCAL 介绍PASCAL 语言是由瑞士的沃斯教授于1971年提出来的,它的命名是为了纪念法国数学家Pascal 。
1、语言的特点:(1)它是世界上第一个结构化程序设计语言。
结构化:主张在程序中去掉goto 语句,所有的程序都由三种基本结构(顺序结构,选择结构、循环结构)组成,后来有人把函数和过程作为第四种基本结构。
(2)功能强、应用广广泛用于编写各种系统软件和应用软件。
(3)编译和运行效率高。
去掉了一些影响效率的因素。
(例如去掉了乘幂运算、字符串运算,去掉了动态数组等。
)使pascal 语言编译和运行效率都较高。
(4)可移植性、易推广。
用pascal 语言写的源程序可以在各种具有pascal 编译的机器上运行。
2、基本符号:(1)大小写英文字母:A ,B ,C ,D ,E ,F ,G ,H ,I ,J ,K ,L ,M ,N ,O ,P ,Q ,R ,S ,T ,U ,V ,W ,X ,Y ,Za ,b ,c ,d ,e ,f ,g ,h ,i ,j ,k ,l ,m ,n ,o ,p ,q ,r ,s ,t ,u ,v ,w ,x ,y ,z(2)数字:0,1,2,3,4,5,6,7,8,9(3)其它符号:+,-,*,/,=,<>,<=,>=,<,>,(,),[,] ,{,},: =,,,;,·,:,′,↑ 注意:pascal 语言除了能使用以上规定的基本符号外,不得使用任何其他符号。
例如:Ω,,,,πγβα等都不得到pascal 语言中使用。
3、保留字:在pascal语言中,有些具有特定的含义。
用户必须了解其含义,以便正确的使用,否则会造成错误。
这些具有特定含义的词被称为保留字。
保留字一共有35个,它们是:AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE,END,FILE,FOR,FUNCTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,RACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,V AR,WHILE,WITH保留字不得另作它用。
Pascal 教程目录第一章简单程序 (2)第一节Pascal 程序结构和基本语句 (2)第二节顺序结构程序与基本数据类型 (6)第二章分支程序 (10)第一节条件语句与复合语句 (10)第二节情况语句与算术标准函数 (12)第三章循环程序 (16)第一节for 循环 (16)第二节repeat 循环 (22)第三节While 循环 (27)第四章函数与过程 (32)第一节函数 (32)第二节自定义过程 (35)第五章Pascal的自定义数据类型 (40)第一节数组与子界类型 (40)第二节二维数组与枚举类型 (48)第三节集合类型 (56)第四节记录类型和文件类型 (60)第五节指针类型与动态数据结构 (67)第六章程序设计与基本算法 (73)第一节递推与递归算法 (73)第二节回溯算法 (80)第七章数据结构及其应用 (86)第一节线性表 (86)第二节队列 (90)第三节栈 (93)第四节数组 (97)第八章搜索 (100)第一节深度优先搜索 (100)第二节广度优先搜索 (111)第九章其他常用知识和算法 (115)第一节图论及其基本算法 (115)第二节动态规划 (122)第一章简单程序无论做任何事情,都要有一定的方式方法与处理步骤。
计算机程序设计比日常生活中的事务处理更具有严谨性、规范性、可行性。
为了使计算机有效地解决某些问题,须将处理步骤编排好,用计算机语言组成“序列”,让计算机自动识别并执行这个用计算机语言组成的“序列”,完成预定的任务。
将处理问题的步骤编排好,用计算机语言组成序列,也就是常说的编写程序。
在Pascal语言中,执行每条语句都是由计算机完成相应的操作。
编写Pascal 程序,是利用Pascal语句的功能来实现和达到预定的处理要求。
“千里之行,始于足下”,我们从简单程序学起,逐步了解和掌握怎样编写程序。
第一节Pascal 程序结构和基本语句在未系统学习Pascal语言之前,暂且绕过那些繁琐的语法规则细节,通过下面的简单例题,可以速成掌握Pascal程序的基本组成和基本语句的用法,让初学者直接模仿学习编简单程序。
第一章、初识PASCAL1.1程序框架一个完全的PASCAL程序结构框架如下:PROGRAM程序名(程序参数表);CONST常量声明;TYPE类型声明;VAR变量声明;FUNCTION函数名(参数表):函数类型;函数声明;PROCEDURE过程名(参数表);过程声明;BEGIN程序主体;END.1.2变量定义一、变量定义方法VAR变量名1:变量类型1;变量名2:变量类型2;变量名3,变量名4:变量类型3;二、变量命名规则1、首字符必须是英文2、只能由英文、数字和下划线组成。
三、变量类型常用的几个变量类型如下表:1类型名含义取值范围占字节数shortint短整型-128~1271 integer algf.-32768~327672longint real single double 长整型实数单精度双精度-231~231-12.9_10-39~1.7_10381.5_10-45~3.4_10385.0_10-324~1.7_103084648extended char 扩展实数1.9_10-4951~1.1_104932AHLW.单个ASCII字符101string字符串最多255个字符字符个数boolean布尔型True,False11.3输入输出语句一、输出语句格式Writeln(项目1,项目2,……,项目n);{输出内容后换行}Write(项目1,项目2,……,项目n);{输出内容后不换行}二、输入语句格式Read(变量1,变量2,……,变量n);{从键盘输入n个数据,以空格格开}Readln(变量1,变量2,……,变量n);{从键盘输入n个数据,以空格格开,读完后换行}三、赋值语句用法2变量名:=表达式;{把右边表达式的值计算出来,结果赋给左边的变量}举例:a:=3;a:=a+1;s:=(a+b)*(c+d);1.4文件输入输出方法一、装配文件assign(input,’文件路径’);{文件路径一般为相对路径,相对程序的工作目录} reset(input);assign(output,’文件路径’);rewrite(output);二、输入输出方法read(x);write(x);三、关闭文件close(input);close(output);{输出文件必须关闭,否则可能不能正确保存}1.5运算符优先级共四级(同一级优先级相同,按照从左到右的顺序执行)一、单目运算符:(最高优先级)@取变量或函数的地址(返回一个指针)not逻辑取反或按位取反3二、乘除及按位运算符*相乘或集合交集/浮点相除div整数相除mod取模(整数相除的余数)as程序运行阶段类型转换(RTTI运算符)and逻辑或按位求和shl按位左移shr按位右移三、加减运算符+相加、集合并集、字符串连接或指针增加一个偏移量-相减、集合差集或指针减少一个偏移量or逻辑或按位或运算xor逻辑或按位异或运算四、关系及比较运算符(最低优先级)=判断是否相等<>判断是否不相等<判断是否小于>判断是否大于<=判断是否小于或等于,或是否是一个集合的子集>=判断是否大于或等于,或是否是一个集合的父集in判断是否是集合成员is判断对象是否类型兼容(又一个RTTI运算符)4第二章、程序的基本控制结构2.1顺序结构一、顺序结构的程序按照书写顺序依次执行begin语句1;语句2;end;二、实例输入两个整数x,y,计算x,y的差并输出。
第五讲 循环结构的程序设计一、循环结构循环结构(Cycle Structure)可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构。
循环结构可以看成是一个条件判断语句和一个向回转向语句的组合。
另外,循环结构的两个要素:循环体和循环终止条件,循环结构在程序框图中是利用判断框来表示,判断框内写上条件,两个出口分别对应着条件成立和条件不成立时所执行的不同指令,其中一个要指向循环体,然后再从循环体回到判断框的入口处。
一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。
循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。
下面是最常见的循环结构的流程图。
循环终止条件循环体TF下图为循环结构的两种N-S 图:在Pascal 中,被推荐的循环一共有三种:计数型循环(for 循环)、当型循环(while 循环)、直到型循环(repeat-until 循环)。
二、for 循环(计数型循环)for 循环一共有三种常见类型:for-to-do 循环、for-downto-do 循环、for-in-do 循环。
(1)for-to-do 循环(递增型计数循环)基本语法:for <循环控制变量>:=<初值> to <终值> do 循环体语句;例如:for i:=1 to 100 do writeln(i); //输出1..100内所有的整数 Turbo Pascal 和Free Pascal 下执行过程可以这样理解:如果所需要的循环体语句不止一句的话,可以选择使用复合语句。
在for-to-do语句的使用中,需要注意以下几点:1)其中初值和终值可以是表达式,控制变量与初值、终值的类型相同,且必须是顺序类型,不能是实型、字符串、数组等非顺序类型。
2)对于控制变量的递增规律是:按照succ函数(后继函数)规律变化。
备注:○1s ucc(i)=i+1; //i∈longint且i<maxlongint○2s ucc(ch)=chr(succ(ord(ch))); //ch∈char且ord(ch)<255 ○3s ucc(false)=true;3)初值与终值在循环开始之前计算,再重复执行过程中,其值不受影响。
例如:i:=5;for i:=1 to i+1 do write(i,' ');结果是“1 2 3 4 5 6 ”。
4)循环控制变量再循环过程中建议不要进行操作,在循环过程中对于控制变量的更改在各个不同的编译器中的支持是不同的,例如在Turbo Pascal 7和较早版本的Free Pascal中是支持在循环过程中对于控制变量的更改的,而在较新的Free Pascal的版本中就不再支持。
同样的,也不要将循环控制变量在循环体内部作为子程序的变参使用。
5)当初值超过终值时,不执行循环,即循环的次数为0。
6)当初值不超过终值时,循环的次数为ord(<终值>)-ord(<初值>)+1 例题1.3.3.2.1:顺序输出26个英文字母的大写。
法一:program p1_3_3_2_1_1(input,output);var ch:char;beginfor ch:='A' to 'Z' dowrite(ch);readln();end.其中,循环变量为一字符型变量ch。
法二:program p1_3_3_2_1_2(input,output);var i:byte;beginfor i:=1 to 26 dowrite(chr(i+64));readln();end.其中,循环变量为一字节型变量i。
例题1.3.3.2.2:输入一个自然数n(n∈integer且n>0),输出该自然数的全部约数之和。
program p1_3_3_2_2_1(input,output);var i,n,sum:longint;beginreadln(n);sum:=0;for i:=1 to n doif n mod i = 0 theninc(sum,i);writeln(sum);readln();end.思考:若a|i,则必有a|(a/i),只要考虑a=i2这一特殊情况,即可以将程序的时间复杂度由O(n)降为O(nn12)。
program p1_3_3_2_2_2(input,output);var i,n,sum:longint;beginreadln(n);sum:=0;i:=0;for i:=1 to trunc(sqrt(n)) doif n mod i = 0 thenbegininc(sum,i);inc(sum,n div i);end;if n=sqr(trunc(sqrt(n))) then dec(sum,trunc(sqrt(n)));//如果是完全平方数就把多计算一次的平方根减掉writeln(sum);readln();end.(2)for-downto-do循环(递减型计数循环)基本语法:for <循环控制变量>:=<初值> downto <终值> do 循环体语句;例如:for i:=100 downto 1 do writeln(i);//倒序输出1..100内所有的整数Turbo Pascal和Free Pascal下执行过程可以这样理解:在for-downto-do语句的使用中,所需要注意的几个要点与for-to-do语句基本相同:1)其中初值和终值可以是表达式,控制变量与初值、终值的类型相同,且必须是顺序类型。
2)对于控制变量的递增规律是:按照pred函数(前驱函数)规律变化。
备注:○1p red(i)=i-1; //i∈longint且i>-maxlongint-1○2p red(ch)=chr(pred(ord(ch))); //ch∈char且ord(i)>0○3p red(true)=false;3)初值与终值在循环开始之前计算,再重复执行过程中,其值不受影响。
4)循环控制变量再循环过程中建议不要进行操作,在循环过程中对于控制变量的更改在各个不同的编译器中的支持是不同的,例如在Turbo Pascal 7和较早版本的Free Pascal中是支持在循环过程中对于控制变量的更改的,而在较新的Free Pascal的版本中就不再支持。
同样的,也不要将循环控制变量在循环体内部作为子程序的变参使用。
5)当初值小于终值时,不执行循环,即循环的次数为0。
6)当初值大于等于终值时,循环的次数为ord(<初值>)-ord(<终值>)+17)理论上,for-to-do与for-downto-do可以互换(3)for-in-do循环for-in-do语句的语法来自Borland Delphi。
Turbo Pascal7.0并不支持该语法,但较新的Free Pascal版本支持。
for...in语句用于对一个容器(container)中的所有元素(element)进行逐一的遍历。
其具体语法为:for 元素变量 in 容器 do 循环语句;有关for-in-do语法的具体应用,我们将在1.4的学习中详细为大家介绍。
(4)for循环的嵌套与实际运用在某一循环语句的循环体中出现了循环语句,我们就称之为循环的嵌套。
例题1.3.3.2.3:输出100~999中的全部水仙花数。
备注:三位数水仙花数的定义如下:若一三位数a*100+b*10+c (a ≠0且a,b,c∈{x∈N|x<10})符合aa∗100+bb∗10+cc=aa3+bb3+cc3,则称该三位数为水仙花数。
program p1_3_3_2_3(input,output);var a,b,c,m:longint;beginfor a:=1 to 9 dofor b:=0 to 9 dofor c:=0 to 9 dobeginm:=a*a*a+b*b*b+c*c*c;if m=a*100+b*10+c thenwriteln(m);end;readln();end.在这里,我们使用了一个三重循环。
当然,本题也可以使用一个一重循环来,大家可以自己试试看,并且,分析一下哪一种方法更好。
例题1.3.3.2.4:编程打印如下图形。
program p1_3_3_2_4(input,output);var i,j:longint;beginfor i:=6 downto 1 dobeginfor j:=1 to 6-i do write(' ');for j:=2*i-1 downto 1 dowrite('#');writeln();end;readln();end.运用for语句可以打印各种各样的东西,我们将运用for循环语句打印图形的这一类程序统称为for循环打印。
例题1.3.3.2.5:警察查一个杀人犯。
A说,是B杀的;B说:不是我;C说:是A杀的。
已知有且只有一个人说了谎,且说谎者即为杀人犯。
问人是谁杀的。
program p1_3_3_2_5 (input,output);var a,b,c:boolean;beginfor a:=false to true dofor b:=false to true dofor c:=false to true doif ord(a)+ord(b)+ord(c)=2 thenif ord(not(b))+ord(b)+ord(not(a))=2 thenif not(a) then writeln('a')else if not(b) then writeln('b')else writeln('c');readln();end.三、while循环(当型循环)计数型循环仅适用于循环次数是确定的情况,然而,如果循环次数不确定,又应该如何解决呢?这个时候,我们就需要使用当型循环或直到型循环。
当型循环语句(while语句)是这样描述循环的:当循环控制条件成立时,重复执行指定的语句。
格式:while 循环控制条件 do 循环体语句;while语句的执行过程是:先求循环控制条件这一布尔表达式的值,当其值为真时,重复执行循环体语句,当其值为假时,终止循环。
为了防止出现死循环(在编程中,一个无法靠自身的控制终止的循环称为“死循环”),在循环体语句中必须出现能够更改循环控制条件的语句,并且能够在一定条件下使循环控制条件为假。