logo资料库

PASCAL语言教程_完整版.pdf

第1页 / 共126页
第2页 / 共126页
第3页 / 共126页
第4页 / 共126页
第5页 / 共126页
第6页 / 共126页
第7页 / 共126页
第8页 / 共126页
资料共126页,剩余部分请下载后查看
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 1
第一章 简单程序 无论做任何事情,都要有一定的方式方法与处理步骤。计算机程序设计比日常生活中的 事务处理更具有严谨性、规范性、可行性。为了使计算机有效地解决某些问题,须将处理步 骤编排好,用计算机语言组成“序列”,让计算机自动识别并执行这个用计算机语言组成的 “序列”,完成预定的任务。将处理问题的步骤编排好,用计算机语言组成序列,也就是常 说的编写程序。在 Pascal 语言中,执行每条语句都是由计算机完成相应的操作。编写 Pascal 程序,是利用 Pascal 语句的功能来实现和达到预定的处理要求。“千里之行,始于足下”, 我们从简单程序学起,逐步了解和掌握怎样编写程序。 第一节 Pascal 程序结构和基本语句 在未系统学习 Pascal 语言之前,暂且绕过那些繁琐的语法规则细节,通过下面的简单例 题,可以速成掌握 Pascal 程序的基本组成和基本语句的用法,让初学者直接模仿学习编简 单程序。 [例 1.1]编程在屏幕上显示“Hello World!”。 Pascal 程序: Program ex11; Begin Writeln( ‘Hello World!’); ReadLn; End. 这个简单样例程序,希望大家的程序设计学习能有一个良好的开端。程序中的 Writeln 是一个输出语句,它能命令计算机在屏幕上输出相应的内容,而紧跟 Writeln 语句后是一对 圆括号,其中用单引号引起的部分将被原原本本地显示出来。 [例 1.2]已知一辆自行车的售价是 300 元,请编程计算 a 辆自行车的总价是多少? 解:若总售价用 m 来表示,则这个问题可分为以下几步处理: ①从键盘输入自行车的数目 a; ②用公式 m=300*a 计算总售价; ③输出计算结果。 Pascal 程序: Program Ex12; Var a,m : integer; { Begin Write( ‘a=’); ReadLn(a); M := 300*a; { { { { 程序首部} 说明部分} 语句部分} 输入自行车数目} 计算总售价} 2
{ { Writeln( ‘M=’,m); ReadLn; End. 此题程序结构完整,从中可看出一个 Pascal 程序由三部分组成: (1)程序首部 输出总售价} 等待输入回车键} 由保留字 Program 开头,后面跟一个程序名(如:Exl1);其格式为: Program 程序名; 程序名由用户自己取,它的第一个字符必须是英文字母,其后的字符只能是字母或数 字和下划线组成,程序名中不能出现运算符、标点符和空格。 (2)说明部分 程序中所用的常量、变量,或类型、及过程与自定义函数,需在使用之前预先说明, 定义数据的属性(类型)。[例 1.2] 程序中 Var S ,R,C: Real; 是变量说明,此处说明 S, R,C 三个变量均为实数类型变量。只有被说明为某一类型的变量,在程序中才能将与该变 量同类型的数值赋给该变量。变量说明的格式为: Var 变量表:类型; (3)语句部分 指由保留字 Begin ( 开始)至 End. ( 结尾)之间的语句系列,是解决问题的具体处理步 骤,也是程序的执行部分。 Pascal 程序不管是哪部分,每句末尾都必须有分号(;),但允许最接近 End 的那个语句 末尾的分号省略;程序结束的 End 末尾必须有圆点(. ),是整个程序的结束标志。 程序中花括号“{ }”之间的部分为注释部分。 Pascal 程序结构可归纳用如下的示意图来表示: Program 程序名; 程序首部 标号说明; (Label) 常量说明; (Const) 说明部分 类型说明; (Type) 变量说明; (Var) 过程或函数说明; Begin 程序体 (主程序) End. 图 1.1 Pascal 程序的结构 把处理问题的步骤编成能从上到下顺序执行的程序,是简单程序的基本特征。再来分析 语句系列; 语句部分 下面两道例题的 Pascal 程序结构和继续学习基本语句。 [例 1.3]编程计算半径为 R 的圆的面积和周长。 解:这是一个简单问题,按数学方法可分以下几步进行处理: ① 从键盘输入半径的值 R; { 要求告诉圆的半径 R } ② 用公式 S= πR2 计算圆面积; ③ 用公式 C=2 πR 计算圆周长; 3
{ 语句部分 } { 程序首部 } ④ 输出计算结果。 Pascal 程序: Program Ex13 ; Var R ,S,C: Real; { 说明部分 } Begin Write ('R=?') ; Readln(R) ; { 输入半径 } S:=Pi*R*R ; {圆面积公式 S=πR2} C:=2*Pi*R ; {圆周长公式 C=2πR} Writeln('S=' ,S); { 输出结果 } Writeln('C=' ,C); Readln {等待输入回车键} End. 程序中 Pi 是 Pascal 提供的标准函数,它返回圆周率的近似值:3.1415926…。 (:=)是赋值符号,赋值语句的格式为: 变量:=表达式; 赋值语句的作用是将:=右边表达式的值记录到左边的变量中。 Writeln 是输出语句,输出语句有三种格式: ① Write ( 输出项 1,输出项 2) ; {执行输出后光标不换行} ② Writeln ( 输出项 1,输出项 2) ; {执行输出后光标换到下一行} ③ Writeln {仅输出空白且光标换到下一行} Writeln 语句后面的圆括号以内部分均为输出项,可以是多项,各项间用逗号分隔; 对 单引号里的内容按照引号内的原样(字符)输出显示。如果输出项是表达式,则只输出表达式 的值,而不是表达式本身。 [例 1.4] 输出两个自然数相除的商和余数。 解:设被除数、除数、商和余数,分别为 A,B,C,D,均为变量,且都是整数类型。题 中未给出具体的自然数 A、B,可采用键盘输入方式。 ① 给出提示,从键盘输入 a, b; ② 显示两数相除的数学形式; ③ 求出 a 除以 b 的商 c; ④ 求出 a 除以 b 的余数 d; ⑤ 紧接等式后面输出显示商和余数。 Pascal 程序: Program Ex14 ; Var a,b,c,d : integer; Begin Write('INPUT A ,B:'); {给出提示信息} Readln(a ,b); {输入 a,b} Writeln ; {输出一空行} Write(a ,'/',b,'='); {输出等式之后不换行} c:=a div b ; {整除运算,取商的整数部分} 4
d:=a mod b ; {相除求余运算,取商的余数部分} Writeln(C ,'…',d); {输出后自动换行 } Readln { 等待输入回车键 } End. 执行本程序中第一个 Write 语句,输出其引号以内的一串提示信息,是给紧接着的输入 语句提供明确的提示(要求),有“一目了然,人机对话”之效果。 Readln 是一个特殊的输入语句,要求输入一个回车(换行)才能往下执行。 Readln 是输入语句,它的一般格式为: ① Read ( 变量 1,变量 2); ② Readln ( 变量 1,变量 2); ③ Readln 前两种格式均要从键盘给变量输入数据,输入时,所键入的数据之间以空格为分隔,以 回车为输入结束。若多输入了数据(即数据个数超过变量个数),Read 语句读完数据之后,能 让后续的读语句接着读取多下来的数据;而 Readln 语句对本行多输入的数据不能让后续语 句接着读取多下来的数据。为了防止多输入的数据影响下一个输入语句读取数据,建议尽量 使用 Readln 语句输入数据。第三种格式不需输入数据,只需按入一个回车键。 [例 1.5]自然数的立方可以表示为两个整数的平方之差,比如 43=102-62,请输出自然数 1996 的这种表示形式。(这里的 43 用自乘三次的形式 4*4*4 表示;102 也用自乘二次的形式 10*10 表示) 解:此题没有现成的计算公式能直接利用,但可以自行推出处理方法或构建适当的运算公 式,按着构想的处理方案编排出各步骤。 设这个自然数为 N,两个平方数分别为 X,Y, 将问题表示为求 N3=X2—Y2 ① 先找出 X 的值,仔细观察题中的示例,用数学方法归纳可得出 X=N*(N+1)/2;(构成 本题可用的计算公式) ② 再仔细观察,发现 Y 值比 X 小一个 N 值,即 Y=X —N; ③ 输出等式 N3=X2—Y2 或 N*N*N=X*X—Y*Y Pascal 程序: Program Ex15 ; Const N=1996 ; { 常量说明 } Var X ,Y: Longint; {变量说明,此题计算中的数值较大,用长整型 } Begin X:=N*(N+1) div 2 ; { div 是整除运算 } Y:=X-N ; Writeln(N,'*',N,'*', N,'=', X,'*', X,' —',Y,'*',Y); { 输出结果 } Readln End. 本程序中 N 是常量,X,Y 是变量,为长整数类型(Longint); 程序中的 div 是整除运 算,其结果只取商的整数部分; [例 1.6] 求一元二次方程 x2+3x+2=0 的两个实数根。 解:方程的系数是常量,分别用 a,b,c 表示,可运用数学上现成的求根公式求方程的根, 5
采取如下方法: ① 先求出 d=b2-4ac;(求根公式中需用开方运算的那部分) ② 再用求根公式算出 x1,x2 的值。(x1,x2 = ? ) ③ 输出 x1,x2. Pascal 程序: program Ex16 ; Const a=1 ; { 常量说明 } b=3 ; c=2 ; {a,b,c 表示方程系数} Var d : integer ; {d 为整型变量} X1 ,X2: Real; {X1,X2 为实型变量} Begin d:=b*b-4*a*c ; x1:=(-b+sqrt(d))/(2*a) ; {求方程的根} x2:=(-b-sqrt(d))/(2*a) ; Writeln('X1=' ,X1,' ':6,'X2=',X2);{输出结果} Readln {等待输入一个回车键} End. 本程序中的 a,b,c 均为常量;变量 d 是整数类型,而变量 x1,x2 则是实数类型,因 为运算式中的 Sqrt(d)开平方运算和(/)除法运算使结果为实数。Sqrt( ) 是开平方函数,是 Pascal 系统的一个标准函数。 习题 1.1 模仿例题编程 1. 加法计算器:编程由键盘输入两个整数 a 和 b,计算出它们的和并输出到屏幕上。 2. 某梯形的上底、下底和高分别为 8,12,9,求该梯形的面积。 ( 梯形面积公式为 S= 3. 求右图所示边长为 5.6 的正立方体表面积。 4. 已知图园柱体的高为 12,底面园的半径为 7,求园柱体表面积。 5. 计算某次考试语文、数学、英语和计算机等四科的总成绩与平均成绩。 (请用输入语句从键盘输入各科成绩分) ) 第二节 顺序结构程序与基本数据类型 前面的简单程序已体现出处理问题步骤、思路的顺序关系,这就是顺序结构程序。 [例 1.7]交换两个变量的值:由键盘输入两个正整数 A 和 B,编程交换这两个变量的 值。 解:交换两个变量的值,可以想象成交换两盒录音带(称为 A 和 B)的内容,可以按以 下步骤处理: 步骤①:拿一盒空白录音带 C 为过渡,先将 A 翻录至 C; 6
步骤②:再将 B 翻录至 A; 步骤③:最后将 C 翻录至 B。 这样操作,可达到题目要求。 Pascal 程序: Program Exam17; Var a,b,c : integer; Begin Write( ‘A,B=’); Readln(a,b); C:= A; A := B; B := C; Writeln(A,B); End. [例 1.8] 分钱游戏。甲、乙、丙三人共有 24 元钱,先由甲分钱给乙、丙两人,所分给的 数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。 经上述三次分钱之后,每个人的钱数恰好一样多。 求原先各人的钱数分别是多少? {等价于步骤 1} {等价于步骤 2} {等价于步骤 3} 解:设甲、乙、丙三人的钱数分别为 A,B,C。用倒推(逆序)算法, 从最后结果入手, 按反相顺序,分步骤推算出每次各人当时的钱数:(在每个步骤中,各人钱数分别存在 A、B、 C 中) 步骤①: A=8 B=8 C=8 { 这是最后结果的钱数,三人都一样多 } 步骤②: A=A/2 (=4) B=B/2 (=4) C=A+B+C(=16) { A ,B 未得到丙分给的钱时, 只有结果数的一半;C 应包含给 A,B 及本身数三者之和 } 步骤③: A=A/2 (=2) C=C/2 (=8) B=A+B+C(=14) {A ,C 未得到乙分给的钱时, 只有巳有数的一半;B 应包含给 A,C 及本身数三者之和 } 步骤④: B=B/2 (=7) C=C/2 (=4) A=A+B+C(=13) C 未得到甲分给的钱时,只有巳有数的一半;A 应包含给 B,C 及本身数三者之和 } 步骤⑤: 输出 A(=13)B(=7)C(=4){此时的 A,B,C 就是三人原先的钱数 } Pascal 程序: Program Exam18; Var a,b,c: integer; Begin a:=8 ; b:=8 ; c:=8 ; { 对应于步骤①} a:=a div 2; b:=b div 2 ; c:=a+b+c ; { 对应于步骤②} a:=a div 2 ; c:=c div 2 ; b:=a+b+c ; { 对应于步骤③} b:=b div 2 ; c:=c div 2 ; a:=a+b+c ; { 对应于步骤④} Writeln('a=' ,a,' ': 4 ,'b=',b,' ': 4 ,'c=',c) ; {输出} Readln End. 细心观察,会发现本程序语句的顺序很关键。此例用反推顺序(逆序),按步骤正确推算 出各变量的值。当然,有的问题可按正序步骤编程,这类程序都称为顺序程序。 本程序 Writeln 语句的输出项含有( ' ' : 4 ) ,这里的冒号用来指定该项显示所占宽度, 7
此处是输出 4 个空格即(空格项占 4 格)。 [例 1.9] 有鸡兔同笼,头 30,脚 90 ,究竟笼中的鸡和兔各有多少只? 解:设鸡为 J 只,兔为 T 只,头为 H,脚为 F,则: J+T=30 ① 2*J+4*T=90 ② 解此题暂不必采用数学上直接解方程的办法,可采用“假设条件与逻辑推理”的办法: 假设笼中 30 个头全都是兔,那么都按每头4只脚计算,总脚数为(4*H),与实际脚数 ( F ) 之差为(4*H—F),如果这个差=0,则笼中全是兔(即鸡为 0 只);如果这个差值 >0 ,说明 多计算了脚数,凡是鸡都多给算了两只脚,用它除以 2 就能得到鸡的只数,处理步骤为: ① J=(4*H —F)/2 {先用脚数差值除以 2 算出鸡的只数} ② T=H —J { 再用总头数减鸡数算出免的只数} 按此方法,这两步运算必须注意先后顺序才会符合运算逻辑。 Pascal 程序: Program Exam16; Const H=30; { 常量说明 } F=90 ; Var J,T: byte; {为字节类型的整数 } Begin J:=(4*H-F) div 2 ; {整除运算 } T:=H-J Writeln ('J=' ,J,' ': 6 ,'T= ',T ) ; Readln End. 本程序中 H,F 为常量,变量 J,T 为 byte 类型,属于整数类型。 Pascal 定义了五个标准整数类型,如下表所示: 类型 Shortint(短整型) Integer (整型) Longint(长整型) Byte (字节型) Word (字型) 0..65535 2 取值范围 -128..127 1 -32768..32767 2 占字节数 -2147483648..2147483647 4 0..255 1 格式 带符号 8 位 带符号 16 位 带符号 32 位 无符号 8 位 无符号 16 位 在前面程序中常用的数据类型除整数类型,还有实数类型。Pascal 还定义了五个标准实 数类型,列表所示如下: 类型 Real 2.9 Single 1.5 Double 5.0 Extended 1.9 Comp -2 取值范围 占字节数 ×10-39~1.7×1038 6 7~8 ×10-45~3.4×1038 4 11~12 ×10-324~1.7×10308 8 15~16 ×10-4951~1.1×104932 10 19~20 63+1~238-1 8 19~20 有效数字 位 位 位 位 位 在 Turbo Pascal 中实数的表示用科学记数法,可认为由三部分组成: 8
分享到:
收藏