
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第二节动态规1221第一章简单程序无论做任何事情,都要有一定的形式技巧与处理方法。计算机程序设计比日常生活中的事务处理更具备细致性、规范性、可行性。
为了使计算机有效地缓解这些难题,须将处理步骤编排好,用计算机语言构成“序列”,让计算机自动识别并执行这个用计算机语言构成的“序列”,完成预定的任务。将处理难题的方法编排好,用计算机语言构成序列,也就是常说的编写程序。在Pascal语言中,执行每条语句都是由计算机完成相应的操作。编写Pascal程序,是运用Pascal语句的功能来推动和超过预定的处理规定。“千里之行,始于足下”,我们从简单程序学起,逐步认识和把握怎编写程序。第一节Pascal程序结构和基本语句在未系统学习Pascal语言之前,暂且绕过这些琐碎的词汇规则细节,通过以下的简洁例题,可以速成掌握Pascal程序的基本构成和基本句式的用法,让初学者直接模仿学习编简单程序。[例1.1]编程在屏幕上显示“HelloWorld!”。Pascal程序:Programex11;BeginWriteln(HelloWorld!’);ReadLn;End.这个简单示例程序,希望你们的程序设计学习能有一个良好的开端。程序中的Writeln是一个输出语句,它能命令计算机在屏幕上输出相应的内容,而紧跟Writeln语句后是一对圆括号,其中用单引号引起的个别将被原本身本地显示出来。
[例1.2]已知一辆自行车的价格是300元,请编程计算a辆自行车的单价是多少?解:若总售价用m来表示,则这个问题可分为下列几步处理:①从键盘输入自行车的数a;②用公式m=300*a计算总价格;③输出计算结果。Pascal程序:ProgramEx12;{程序首部}Vara,m:integer;{说明部分}Begin{语句部分}Write(a=’);ReadLn(a);{输入自行车数}M:=300*a;{计算总售价}2Writeln(M=’,m);{输出总售价}ReadLn;{等待输入回车键}End.此题程序结构完整,从中可看出一个Pascal程序由三部分构成:(1)程序首部由保留字Program开头,后面跟一个程序名(如:Exl1);其格式为:Program程序名;程序名由用户自己取,它的第一个字符需要是中文字母,其后的字符只能是字母或数字和下线构成,程序名中不能出现运算、标点和括号。(2)表明部分程序中所用的常量、变量,或类别、及过程与自定义变量,需在使用之前预先表明,定义数据的属性(类别)。[例1.2]程序中VarS,R,C:Real;是变量说明,此处表明S,R,C三个函数均为整数类型数组。
只有被表明为某一类别的变量,在程序中能够将与该变量同种类的数值赋给该函数。变量说明的格式为:Var变量表:类型;(3)短语部分指由保留字Begin(开始)至End.(结尾)之间的短语系列,是缓解问题的详细处理步骤,也是程序的执行个别。Pascal程序不管是哪部分,每句末尾都需要有分号(;),但允许最接近End的哪个语句末尾的分号省略;程序结束的End末尾需要有圆点(.),是整个程序的结束标志。程序中花括号“{}”之间的个别为注解部分。Pascal程序结构可归纳用如下的来表示:Program程序名;程序首部标号说明;(Label)常量说明;(Const)表明部分类型说明;(Type)变量说明;(Var)过程或变量说明;Begin程序体(主程序)语句系列;语句部分End.图1.1Pascal程序的结构把处理难题的方法编成能从上到下排序执行的程序,是简单程序的基本特点。再来分析以下两道例题的Pascal程序结构和再次学习基本语句。[例1.3]编程计算长度为R的圆的面积和周长。解:这是一个简单问题,按数学方式可分下列几步进行处理:①从键盘输入半径的值R;{要求告诉圆的半径R}②用推导S=πR2计算圆面积;③用公式C=2πR计算圆周长;3④输出计算结果。

Pascal程序:ProgramEx13;{程序首部}VarR,S,C:Real;{说明部分}Begin{语句部分}Write('R=?');Readln(R);{输入半径}2S:=Pi*R*R;{圆面积公式S=πR}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程序:ProgramEx14;Vara,b,c,d:integer;BeginWrite('INPUTA,B:');{给出提示信息}Readln(a,b);{输入a,b}Writeln;{输出一空行}Write(a,'/',b,'=');{输出等式之后不换行}c:=adivb;{整除运算,取商的小数部分}4d:=amodb;{相除求余运算,取商的余数部分}Writeln(C,'…',d);{输出后手动换行}Readln{等待输入回车键}End.执行本程序中第一个Write语句,输出其引号以内的一串提示信息,是给紧接着的输入语句提供明确的提醒(规定),有“一了然,人机对话”之效果。
Readln是一个特殊的输入词语,要求输入一个回车(换行)能够往下执行。Readln是输入词语,它的通常格式为:①Read(变量1,变量2);②Readln(变量1,变量2);③Readln前两种格式均要从键盘给变量输入数据,输入时,所键入的数据之间以括号为分隔,以回车为输入结束。若多输入了数据(即数据个数达到变量个数),Read语句读完数据然后,能让后续的读句子接着读取多出来的数据;而Readln语句对本行多输入的数据不能让后续语句接着读取多出来的数据。为了避免多输入的数据影响下一个输入词语读取数据,建议尽量使用Readln语句输入数据。第三种格式不需输入数据,只需按入一个回车键。322[例1.5]自然数的立方可以表示为两个整数的平方之差,比如4=10-6pascal语言视频教程,请输出自然数199632的这些表示方式。(此处的4用自乘三次的方式4*4*4表示;10也用自乘二次的方式10*10表示)解:此题没有现成的推导公式能直接运用,但可以自行打造处理方式或建立适度的运算公式,按着思考的处理方案编排出各方法。322设这个自然数为N,两个平方数分别为X,Y,将问题表示为求N=X—Y①先找出X的值,仔细观察题中的样例,用物理方式推导可得出X=N*(N+1)/2;(构成本题可用的推导公式)②再认真观察,发现Y值比X小一个N值,即Y=X—N;322③输出等式N=X—Y或N*N*N=X*X—Y*YPascal程序:ProgramEx15;ConstN=1996;{常量说明}VarX,Y:Longint;{变量说明,此题计算中的数值较大,用长整型}BeginX:=N*(N+1)div2;{div是整除运算}Y:=X-N;Writeln(N,'*',N,'*',N,'=',X,'*',X,'—',Y,'*',Y);{输出结果}ReadlnEnd.本程序中N是常量,X,Y是函数,为长整数类型(Longint);程序中的div是整除运算,其结果只取商的整数部分;2[例1.6]求一元二次方程x+3x+2=0的两个实数根。
解:方程的常数是常量,分别用a,b,c表示,可利用物理上现成的求根公式求函数的根,5采取如下方式:2①先求出d=b-4ac;(求根公式中需用开方运算的那部分)②再用求根公式算出x1,x2的值。(x1,x2=?)③输出x1,x2.Pascal程序:programEx16;Consta=1;{常量说明}b=3;c=2;{a,b,c表示函数系数}Vard:integer;{d为整型数组}X1,X2:Real;{X1,X2为实型变量}Begind:=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程序:ProgramExam17;Vara,b,c:integer;BeginWrite(A,B=’);Readln(a,b);C:=A;{等价于步骤1}A:=B;{等价于步骤2}B:=C;{等价于步骤3}Writeln(A,B);End.[例1.8]分钱游戏。
甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙三人,所分给的数与各人已有数同样;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数正好一样多。求原来各人的钱数分别是多少?解:设甲、乙、丙三人的钱数分别为A,B,C。用倒推(逆序)算法,从最终结果入手,按反相顺序,分方法计算出每天各人后来的钱数:(在每位步骤中,各人钱数分别存在A、B、C中)步骤①:A=8B=8C=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程序:ProgramExam18;Vara,b,c:integer;Begina:=8;b:=8;c:=8;{对应于步骤①}a:=adiv2;b:=bdiv2;c:=a+b+c;{对应于步骤②}a:=adiv2;c:=cdiv2;b:=a+b+c;{对应于步骤③}b:=bdiv2;c:=cdiv2;a:=a+b+c;{对应于步骤④}Writeln('a=',a,'':4,'b=',b,'':4,'c=',c);{输出}ReadlnEnd.细心观察,会看到本程序语句的排序很关键。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-134607-1.html
估计都敢骑他头上