pasal语言基础_第1页
pasal语言基础_第2页
pasal语言基础_第3页
pasal语言基础_第4页
pasal语言基础_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

初识PASCAL,BY:AIR_ZWQQ:215353868,程序结构框架,PROGRAM程序名(程序参数表);CONST常量声明;TYPE类型声明;VAR变量声明;FUNCTION函数名(参数表):函数类型;函数声明;PROCEDURE过程名(参数表);过程声明;BEGIN程序主体;END.,变量定义,一、变量定义方法VAR变量名1:变量类型1;变量名2:变量类型2;变量名3,变量名4:变量类型3;二、变量命名规则1、首字符必须是英文2、只能由英文、数字和下划线组成。三、变量类型常用的几个变量类型如下表:,输入输出语句格式,一、输出语句格式Writeln(项目1,项目2,项目n);输出内容后换行Write(项目1,项目2,项目n);输出内容后不换行二、输入语句格式Read(变量1,变量2,变量n);从键盘输入n个数据,以空格格开Readln(变量1,变量2,变量n);从键盘输入n个数据,以空格格开,读完后换行三、赋值语句用法变量名:表达式;把右边表达式的值计算出来,结果赋给左边的变量举例:a:=3;a:=a+1;s:=(a+b)*(c+d);,文件输入输出方法,一、装配文件assign(input,文件路径);文件路径一般为相对路径,相对程序的工作目录reset(input);assign(output,文件路径);rewrite(output);二、输入输出方法read(x);write(x);三、关闭文件close(input);close(output);输出文件必须关闭,否则可能不能正确保存,运算符优先级,共四级(同一级优先级相同,按照从左到右的顺序执行)一、单目运算符:(最高优先级)取变量或函数的地址(返回一个指针)not逻辑取反或按位取反二、乘除及按位运算符*相乘或集合交集/浮点相除div整数相除mod取模(整数相除的余数)as程序运行阶段类型转换(RTTI运算符)and逻辑或按位求和shl按位左移shr按位右移三、加减运算符+相加、集合并集、字符串连接或指针增加一个偏移量-相减、集合差集或指针减少一个偏移量or逻辑或按位或运算xor逻辑或按位异或运算四、关系及比较运算符(最低优先级)=判断是否相等判断是否不相等判断是否大于=判断是否大于或等于,或是否是一个集合的父集in判断是否是集合成员is判断对象是否类型兼容(又一个RTTI运算符),程序的基本控制结构,顺序结构,一、顺序结构的程序按照书写顺序依次执行begin语句1;语句2;end;二、实例输入两个整数x,y,计算x,y的差并输出。Programexample;varx,y,s:integer;beginread(x,y);s:=x-y;writeln(s);end.,分支结构,一、分支结构又叫选择结构或条件结构If条件then语句1注意这里不可以加分号,因为IF语句到这里没有结束,后面还有ELSE语句else语句2;二、没有ELSE的IF语句If条件then语句1;三、实例输入3个整数,输出最大的数。Programbijiao;vara,b,c,max:integer;beginreadln(a,b,c);ifa=bthenmax:=aelsemax:=b;ifcmaxthenmax:=c;writeln(max);end.四、IF语句的嵌套If条件ThenBeginIf条件Then语句1Else语句2;EndElseBeginIf条件Then语句3Else语句4;End;,循环结构,一、For循环For循环变量:=初值to终值do循环体;若循环体有多条语句,则必须用beginend复合语句括起来。【典型例题1】计算s=1+2+3+.+n,n由键盘输入。Programexample;vars,i,n:integer;beginreadln(n);s:=0;Fori:=1tondos:=s+i;writeln(s);end.【典型例题2】从键盘输入一个数,判断它是不是素数。PROGRAMsushu;VARa,i:integer;flag:boolean;BEGINreadln(a);flag:=true;FORi:=2totrunc(sqrt(a)doIFamodi=0THENBEGINflag:=false;BREAK;END;IFflagTHENwriteln(Y)ELSEwriteln(N);END.,循环结构,二、While循环While条件Do循环体;同样,若循环体有多条语句,则必须用beginend复合语句括起来。【典型例题】求最大公约数programHCF;vara,b,r:integer;beginr:=amodb;whiler0dobegina:=b;b:=r;r:=amodb;end;writeln(b);end.三、Repeat循环Repeat循环体;Until条件;即使循环体有多条语句,也不必用beginend复合语句。【典型例题】求自然对数e的近似值,直到最后一项小于10-5为止。programe1;vari:integer;e,s,t:real;begine:=1;t:=1;i:=1;repeatt:=t*i;e:=e+1/t;i:=i+1;until1/tajthenk:=j;ifkithenbegintemp:=ai;ai:=ak;ak:=temp;end;end;end;Begin主程序开始randomize;x:=random(100);fori:=1tondobeginwhilefind(x)dox:=random(100);ai:=x;end;writea;调用输出数组过程selectsort;调用选择排序过程writea;调用输出数组过程end.,递归,【典型例题1】求阶乘n!求n!我们可以使用For循环来做,这里我们换一个思路,使用递归的方法来做。看下面的数学递推表达式。,我们可以看出为求n!,必先求出(n-1)!,同理,要求出(n-1)!,必先求出(n-2)!,则如此递推下去,最终当n=0时我们就可以马上得出结果1,然后我们从1开始再逐步返回到n来求出n!Programjiecheng;Varn:integer;Functionjc(n:integer):longint;BeginIfn=0Thenjc=1Elsejc=n*jc(n-1)End;Beginmainreadln(n);writeln(jc(n);End.,递归,【典型例题2】汉诺塔问题有三根柱A、B、C,在柱A上有N块盘片,所有盘片都是大的在下面,小片能放在大片上面。现要将A上的N块盘片移到C柱上,每次只能移动一片,而且在同一根柱子上必须保持上面的盘片比下面的盘片小,输入任意的N,输出移动方法。(注意:这是一个古老的传说,传说是如果把64个盘子由A柱移到了C柱的话,那么世界末日就到了,事实上如果要把64个盘子从A柱移到C柱的话,即使用计算机运算,也要计算数亿年,所以这个预言未必不是真实。)【分析】我们可以这样考虑,当n=1时,我们只要直接将A柱的盘子移到C柱,当n1时,我们可以先把n-1个盘子由A柱通过C柱移到B柱,此时就可以把A柱剩下的最后一个盘子直接移到C柱,这样接下来只要把n-1个盘子通过A柱移到C柱即可,如果就构成了递归的思路,我们可以定义个移动过程mov(n,a,b,c)表示将n个盘子从a通过b移到c【程序】Programhannuota;Varn:integer;Proceduremove(n,a,b,c:integer);beginifn=1thenwriteln(a,-,c)elsebeginmove(n-1,a,c,b);把n-1个盘子从a柱经由c柱移到b柱writeln(a,-,c);把剩下的第n个盘子直接移到c柱move(n-1,b,a,c);把在b柱上的n-1个盘子经由a柱移到c柱end;end;Beginreadln(n);move(n,1,2,3);End.【典型例题3】求公约数问题利用递归函数的方法求a,b的公约数。Programgongyueshu;Vara,b:longint;Functionhcf(a,b:longint):longint;Beginifamodb=0thenhcf:=belsehcf:=hcf(b,amodb);End;Beginmainreadln(a,b);writeln(hcf=,hcf(a,b);End.,数组,数组定义,一、数组定义方法VAR数组名:Array下标起点.下标终点Of数组元素类型;例如:定义一个存储10个整数的数组aa:array1.10ofinteger;赋值方法:a1:=0;定义数组后计算机会在系统内存内划出一块连续的区域供存放数组元素,数组输入输出,一、键盘输入数据存入数组过程PROCEDUREreada;VARi:INTEGER;BEGINFORi:=1TOnDOREAD(ai);END;二、随机产生n个数据存入数组过程PROCEDURErandoma(max:integer;);VARi:INTEGER;BEGINRANDOMIZE;FORi:=1TOnDOai:=RANDOM(max);END;三、输出数组过程PROCEDUREwritea;VARi:INTEGER;BEGINFORi:=1TOnDOWRITE(ai,);WRITELN;END;,数组基本操作,一、自定义查找函数,在数组中查找x,若有返回x的下标,若无则返回0。FUNCTIONfind(x:INTEGER):INTEGER;VARi:INTEGER;BEGINfind:=0;FORi:=1TOnDOIFai=xTHENBEGINfind:=i;break;END;END;二、在数组的p位置插入一个元素xPROCEDUREinserta(p,x:INTEGER);VARi:INTEGER;BEGINFORi:=nDOWNTOpDOai+1:=ai;ap:=x;n:=n+1;END;注意:因为要插入一个元素,所以首先必须保证数组有空余的单元,否则会出现下标越界错误。三、从数组中把下标为p的元素删除掉PROCEDUREdeletea(p:INTEGER);VARi:INTEGER;BEGINFORi:=pTOn-1DOai:=ai+1;n:=n-1;END;,约瑟夫问题,编号为1,2,.,n的n个人按照顺时针方向围坐一圈。从第一个人开始顺时针方向自1开始报数,报到m时停止报数。报m的人出列,从他在顺时针方向的下一个人开始重新报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。其中n,m由键盘输入。【思路1】利用数组存放n个人,数组下标等于他的编号,然后模拟报数过程,报到m时输出该位置的人编号,然后该位置的值清0,继续报数并判断是否为0,是0则跳过。直到n个人全部出列为止。【参考程序】Programyueshefu;Vara:array1.100ofinteger;n,m,i,j,p:integer;Beginwrite(Inputn,m:);readln(n,m);fori:=1tondoai:=i;p:=1;p用于记录报数的位置fori:=1tondobeginj:=0;j用于记录报到的人数whilej0thenj:=j+1;ifp=nthenp:=1elsep:=p+1;处理边界情况end;ifp1thenbeginwrite(ap-1,);ap-1:=0;end处理边界情况elsebeginwrite(an,);an:=0;end;end;end.,自定义数据类型,枚举类型,TYPE枚举类型标识符=(枚举值1,枚举值2,枚举值3,);VAR枚举类型变量表:枚举类型标识符;【实例】TYPEweekday=(Sun,Mon,Tue,Wed,Thu,Fri,sat);month=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,oct,nov,dec);VARd:weekday;m:month,子界类型,TYPE子界类型标识符=常量1.常量2;VAR子界类型变量表:子界类型标识符;【实例】TYPEage=0.100;letter=a.z;VARa:age;l:letter,集合类型,TYPE集合类型标识符=SETOF基类型;VAR集合类型变量表:集合类型标识符;【实例】TYPEdigit=Setof0.10;VARa,b:digit;Begina:=1,3,5,7,9;b:=0,2,4,6,8;End.【集合运算】1.空集合:2.集合并交差并:用+表示,例如1,3,4+1,2,4=1,2,3,4交:用*表示,例如1,3,4*1,2,4=1,4差:用-表示,例如1,3,4-1,2,4=33.关系运算:集合可以进行,等运算,规则是元素多的大于元素少的。4.包含判断:IN,例如1in1,3,4是True;2in1,3,4是False。5.集合运算中元素的次序是不重要的。,记录类型,TYPE记录类型标识符=RECORD域标识符表:类型;域标识符表:类型;End;VAR记录类型变量表:记录类型标识符;【实例】一个学生包括学号、姓名、性别、年龄、成绩五个域。TYPEstudent=RECORDnum:integer;name:string;sex:(male,female);age:0.100;score:real;END;VARs:student;a:array1.100

温馨提示

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

评论

0/150

提交评论