Pascal语言程序设计及算法基础(肖教宁).docx
《Pascal语言程序设计及算法基础(肖教宁).docx》由会员分享,可在线阅读,更多相关《Pascal语言程序设计及算法基础(肖教宁).docx(96页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、注:本教程授课时间为十八课时,学生上机练习时间为十八课间,共计三十六课时。可同时 对六十名学生授课。第一章简单程序2第一节Pasca!程序结构和基本语句2第二节顺序结构程序与基本数据类型7第二章分支程序10第一节条件语句与复合语句10第二节 情况语句与算术标准函数12第三章循环程序16第一节for循环16第二节 repeat循环23第三节While循环27第四章函数与过程33第一节函数33第二节自定义过程36第五章 Pascal的自定义数据类型41第一节数组与子界类型41第二节二维数组与枚举类型49第三节集合类型58第四节记录类型和文件类型63第五节指针类型与动态数据结构70第六章程序设计与基
2、本算法75第一节递推与递归算法75第二节回溯算法82第一章简单程序无论做任何事情,都要有一定的方式方法与处理步骤。计算机程序设计比日常生活中的 事务处理更具有严谨性、规范性、可行性。为了使计算机有效地解决某些问题,须将处理步 骤编排好,用计算机语言组成“序列”,让计算机自动识别并执行这个用计算机语言组成的 “序列”,完成预定的任务。将处理问题的步骤编排好,用计算机语言组成序列,也就是常 说的编写程序。在Pascal语言中,执行每条语句都是由计算机完成相应的操作。编写Pascal 程序,是利用Pascal语句的功能来实现和达到预定的处理要求。“千里之行,始于足下”, 我们从简单程序学起,逐步了解
3、和掌握怎样编写程序。第一节Pascal程序结构和基本语句在未系统学习Pasca!语言之前,暂且绕过那些繁琐的语法规则细节,通过下面的简单例 题,可以速成掌握Pascal程序的基本组成和基本语句的用法,让初学者直接模仿学习编简 单程序。例1.1编程在屏幕上显示“HelloWorld!”。Pasca! 程序:Program exll;BeginWritelMHelloWorkl!);ReadLn;End.这个简单样例程序,希望大家的程序设计学习能有一个良好的开端。程序中的Writein 是个输出语句,它能命令计算机在屏幕上输出相应的内容,而紧跟Writein语句后是对 圆括号,其中用单引号引起的部
4、分将被原原本本地显示出来。例1.2已知一辆自行车的售价是300元,请编程计算a辆自行车的总价是多少?解:若总售价用m来表示,则这个问题可分为以下儿步处理:从键盘输入自行车的数目a;用公式m=300*a计算总售价;输出计算结果。Pasca! 程序:Program Ex 12;Var a5m : integer;BeginWrite(ta=,);ReadLn(a);M := 300* a;程序首部说明部分(语句部分)输入自行车数目计算总售价Writeln(M=m);输出总售价ReadLn;等待输入回车键End.此题程序结构完整,从中可看出个Pasca!程序由三部分组成:(1)程序首部由保留字Pro
5、gram开头,后面跟个程序名(如:Exll);其格式为:Program 程序名;_程序名由用户自己取,它的第一个字符必须是英文字母,其后的字符只能是字母或数 字和下划线组成,程序名中不能出现运算符、标点符和空格。(2)说明部分程序中所用的常量、变量,或类型、及过程与自定义函数,需在使用之前预先说明, 定义数据的属性(类型)。例1.2程序中VarS, R, C: Real,是变量说明,此处说明S, R,C三个变量均为实数类型变量。只有被说明为某类型的变量,在程序中才能将与该变 量同类型的数值赋给该变量。变量说明的格式为:Var变量表:类型;(3)语句部分指由保留字Begin (开始)至End.(
6、结尾)之间的语句系列,是解决问题的具体处理步 骤,也是程序的执行部分。Pascal程序不管是哪部分,每句末尾都必须有分号(;),但允许最接近End的那个语句 末尾的分号省略:程序结束的End末尾必须有圆点(.),是整个程序的结束标志。程序中花括号“之间的部分为注释部分。Pascal程序结构可归纳用如下的示意图来表示:Program 程予名:标号说明:(Label) 常量说明:(Const) 类型说明:(Type) 变量说明:(Var) 过程或函数说明:Begin语句系列:End.图1.1 Pascal程序的结构说明部分程序体(主程序)语句部分程序首部把处理问题的步骤编成能从上到下顺序执行的程序
7、,是简单程序的基本特征。再来分析 下面两道例题的Pasca!程序结构和继续学习基本语句。例1.3编程计算半径为R的圆的面积和周长。解:这是个简单问题,按数学方法可分以下几步进行处理:从键盘输入半径的值R:要求告诉圆的半径R用公式S=nR2计算圆面积;计算圆周长;Pasca! 程序:Program Exl3;Var R, S C: Real;程序首部BeginWrite (R二?); Readln(R); S:=Pi*R*R;C:=2*Pi*R;WritelnCS=, S); WritelnCC士,C); Readln说明部分语句部分输入半径)(圆面积公式S= n R2 圆周长公式C=2R) 输
8、出结果(等待输入回车键用公式C=2n R 输出计算结果。End.程序中Pi是Pascal提供的标准函数,它返回圆周率的近似值:3.1415926。(:=)是赋值符号,赋值语句的格式为:变量:=表达式:赋值语句的作用是将:=右边表达式的值记录到左边的变量中。Writein是输出语句,输出语句有三种格式:Write (输出项1,输出项2) ;执行输出后光标不换行Writein (输出项!,输出项2) ;执行输出后光标换到下一行WriteinI仅输出空白且光标换到下一行Writein语句后面的圆括号以内部分均为输出项,可以是多项,各项间用逗号分隔;对 单引号里的内容按照引号内的原样(字符)输出显示。
9、如果输出项是表达式,则只输出表达式 的值,而不是表达式本身。例1.4输出两个自然数相除的商和余数。解:设被除数、除数、商和余数,分别为A, B, C, D,均为变量,且都是整数类型。题 中未给出具体的自然数A、B,可采用键盘输入方式。 给出提示,从键盘输入a, b;显示两数相除的数学形式;求出a除以b的商c;求出a除以b的余数d;紧接等式后面输出显示商和余数。Pasca! 程序:Program Exl4:Var a,b,c,d : integer;BeginWrite(lNPUTA, B:);给出提示信息Readln(a,Writein;Write(a,,b,=)c:=a div b;d:=a
10、 mod b:Writeln(C,d);Readln输入a, b)输出一空行输出等式之后不换行整除运算,取商的整数部分相除求余运算,取商的余数部分输出后自动换行)等待输入回车键End.执行本程序中第一个Write语句,输出其引号以内的串提示信息,是给紧接着的输入 语句提供明确的提示(要求),有“一目了然,人机对话”之效果。Readln是一个特殊的输入语句,要求输入一个回车(换行)才能往下执行。Readln是输入语句,它的般格式为:Read (变量1,变量2);Readln (变量1,变量2); Readln前两种格式均要从键盘给变量输入数据,输入时,所键入的数据之间以空格为分隔,以 回车为输入
11、结束。若多输入了数据(即数据个数超过变量个数),Read语句读完数据之后,能 让后续的读语句接着读取多下来的数据;而Readln语句对本行多输入的数据不能让后续语 句接着读取多下来的数据。为了防止多输入的数据影响下个输入语句读取数据,建议尽量 使用Readln语句输入数据。第三种格式不需输入数据,只需按入一个回车键。例1.5自然数的立方可以表示为两个整数的平方之差,比如43=12一62,请输出自然数1996 的这种表示形式。(这里的用臼乘二次的形式4*4*4表示;IO也用自乘二次的形式11 表示)解:此题没有现成的计算公式能直接利用,但可以自行推出处理方法或构建适当的运算公 式,按着构想的处理
12、方案编排出各步骤。设这个自然数为N,两个平方数分别为X, Y,将问题表示为求N3=X2-Y2先找出X的值,仔细观察题中的示例,用数学方法归纳可得出X=N*(N+l)/2;(构成 本题可用的计算公式) 再仔细观察,发现丫值比X小一个N值,即Y=XN;输出等式 N3=X2Y2 或 N*N*N=X*XY*丫Pasca! 程序:Program Ex 15;Const N=1996;常量说明Var X, Y: Longint;变量说明,此题计算中的数值较大,用长整型BeginX:=N*(N+l)div2; div 是整除运算Y:=X-N;Writeln(N,*,N,*, N;=, X;*, X;,Y,*
13、,Y);输出结果)End.本程序中N是常量,X, Y是变量,为长整数类型(Longint);程序中的div是整除运 算,其结果只取商的整数部分: 例1.6求一元二次方程x2+3x+2=0的两个实数根。解:方程的系数是常量,分别用a, b, c表示,可运用数学上现成的求根公式求方程的根, 采取如下方法:先求出d=b24ac;(求根公式中需用开方运算的那部分)再用求根公式算出xl, x2的值。(xl, x2 = ?)输出xl, x2.Pasca! 程序:program Exl6;Const a= 1 ;b=3;c=2;Var d : integer;XI, X2: Real;Begind:=b*b
14、-4*a*c;xl:=(-b+sqrt(d)/(2*a);x2:=(-b-sqrt(d)/(2*a); WritelnCXl=, XI, 1 f:6,ReadlnX2=,常量说明a, b, c表示方程系数)d为整型变量)XI, X2为实型变量)求方程的根X2); 输出结果等待输入个回车键2.3.4.求右图所示边长为5.6的正立方体表面积。已知图园柱体的高为12,底面园的半径为7,End.本程序中的a, b, c均为常量;变量d是整数类型,而变量xl, x2则是实数类型,因 为运算式中的Sqn(d)开平方运算和(7)除法运算使结果为实数。Sqrt()是开平方函数,是 Pascal系统的个标准函数
15、。习题1.1 模仿例题编程1.加法计算器:编程由键盘输入两个整数a和b,计算出它们的和并输出到屏幕上。某梯形的上底、下底和高分别为8, 12, 9,求该梯形的面积。 (梯形面积公式为S=(上底+下底)x髙5.计算某次考试语文、数学、英语和计算机等四科的总成绩与平均成绩。 (请用输入语句从键盘输入各科成绩分)第二节顺序结构程序与基本数据类型前面的简单程序已体现出处理问题步骤、思路的顺序关系,这就是顺序结构程序。例1.7交换两个变量的值:由健盘输入两个正整数A和B,编程交换这两个变量的 值。解:交换两个变量的值,可以想象成交换两盒录音带(称为A和B)的内容,可以按以 下步骤处理:步骤:拿一盒空白录
16、音带C为过渡,先将A翻录至C;步骤:再将B翻录至A;步骤:最后将C翻录至B。这样操作,可达到题目要求。Pasca! 程序:Program Examl7;Var a,b,c : integer;BeginWrite(tA,B=,);Readln(a,b);C:=A;等价于步骤1A:=B;等价于步骤2B:=C;等价于步骤3)Writeln(A,B);End.例1.8分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的 数与各人已有数相同;接着由乙分给甲、丙,分法同前:再由丙分钱给甲、乙,分法亦同前。 经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少?解:设甲
17、、乙、丙三人的钱数分别为A, B, C。用倒推(逆序)算法,从最后结果入手, 按反相顺序,分步骤推算出每次各人当时的钱数:(在每个步骤中,各人钱数分别存在A、B、 C中)步骤:A=8B=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(=
18、13)C未得到甲分给的钱时,只有巳有数的一半;A应包含给B, C及本身数三者之和 步骤:输出A (=13) B (=7) C (=4) 此时的A, B, C就是三人原先的钱数 Pasca! 程序:Program Examl8;Var a, b, c: integer;Begina: =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=,
19、c) ; 输出)ReadlnEnd.细心观察,会发现本程序语句的顺序很关键。此例用反推顺序(逆序),按步骤正确推算 出各变量的值。当然,有的问题可按正序步骤编程,这类程序都称为顺序程序。本程序Writein语句的输出项含有(4),这里的冒号用来指定该项显示所占宽度, 此处是输出4个空格即(空格项占4格)。例1.9有鸡兔同笼,头30,脚90,究竟笼中的鸡和兔各有多少只?解:设鸡为J只,兔为T只,头为H,脚为F,贝:J+T=302*J+4*T=90解此题暂不必采用数学上直接解方程的办法,可采用“假设条件与逻辑推理”的办法:假设笼中30个头全都是兔,那么都按每头4只脚计算,总脚数为(4*H),与实际
20、脚数(F) 之差为(4*HF),如果这个差=0,则笼中全是兔(即鸡为0只);如果这个差值0,说明 多计算了脚数,凡是鸡都多给算了两只脚,用它除以2就能得到鸡的只数,处理步骤为:J=(4*HF)/2先用脚数差值除以2算出鸡的只数)T=H-J再用总头数减鸡数算出免的只数按此方法,这两步运算必须注意先后顺序会符合运算逻辑。Pasca! 程序:Program Examl6;Const H=30;常量说明F=90;VarJ, T: byte:为字节类型的整数BeginJ:=(4*H-F) div 2;整除运算T:=H-JWritein (7=, J, 6, T=, T);ReadlnEnd.本程序中H,
21、 F为常量,变量J, T为byte类型,属于整数类型。Pascal定义了五个标准整数类型,如下表所示:类型取值范围占字节数格式Shortint (短整型)-128.1271带符号8位Integer(整型)-32768.327672带符号16位Longint (长整型)-2147483648.21474836474带符号32位Byte (字节型)0.2551无符号8位Word(字型)0.655352无符号16位在前面程序中常用的数据类型除整数类型,还有实数类型。Pasca!还定义了五个标准实 数类型,列表所示如下:类型取值范围占字节数有效数字Real2.9X10-391.7X 1038678位S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Pascal 语言程序设计 算法 基础 肖教宁
限制150内