一个完全的PASCAL程序结构框架如下

上传人:无*** 文档编号:161622286 上传时间:2022-10-14 格式:DOC 页数:17 大小:91.50KB
收藏 版权申诉 举报 下载
一个完全的PASCAL程序结构框架如下_第1页
第1页 / 共17页
一个完全的PASCAL程序结构框架如下_第2页
第2页 / 共17页
一个完全的PASCAL程序结构框架如下_第3页
第3页 / 共17页
资源描述:

《一个完全的PASCAL程序结构框架如下》由会员分享,可在线阅读,更多相关《一个完全的PASCAL程序结构框架如下(17页珍藏版)》请在装配图网上搜索。

1、一个完全的PASCAL程序结构框架如下: PROGRAM 程序名(程序参数表);CONST 常量声明;TYPE 类型声明;VAR 变量声明;FUNCTION 函数名(参数表):函数类型; 函数声明;PROCEDURE 过程名(参数表); 过程声明;BEGIN 程序主体;END. 一、变量定义方法VAR 变量名1:变量类型1; 变量名2:变量类型2; 变量名3,变量名4:变量类型3;二、变量命名规则 1、首字符必须是英文 2、只能由英文、数字和下划线组成。 三、变量类型 常用的几个变量类型如下表:类型名含义取值范围占字节数shortint短整型-1281271integer整型-32768327

2、672longint长整型-231231-14real实数2.910-391.710386single单精度1.510-453.410384double双精度5.010-3241.7103088extended扩展实数1.910-49511.110493210char字符单个ASCII字符1string字符串最多255个字符字符个数boolean布尔型True, False1一、输出语句格式 Writeln(项目1,项目2,项目n); 输出内容后换行 Write(项目1,项目2 ,项目n); 输出内容后不换行二、输入语句格式Read(变量1,变量2,变量n); 从键盘输入n个数据,以空格格开R

3、eadln(变量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); 输出文件必须关闭,否则可能不能正确保存共

4、四级(同一级优先级相同,按照从左到右的顺序执行) 一、单目运算符:(最高优先级) 取变量或函数的地址(返回一个指针) not 逻辑取反或按位取反 二、乘除及按位运算符 * 相乘或集合交集 / 浮点相除 div 整数相除 mod 取模 (整数相除的余数) as 程序运行阶段类型转换 (RTTI运算符) and 逻辑或按位求和 shl 按位左移 shr 按位右移 三、加减运算符 + 相加、集合并集、字符串连接或指针增加一个偏移量 - 相减、集合差集或指针减少一个偏移量 or 逻辑或按位或运算 xor 逻辑或按位异或运算 四、关系及比较运算符(最低优先级) = 判断是否相等 判断是否不相等 判断是否

5、大于 = 判断是否大于或等于,或是否是一个集合的父集 in 判断是否是集合成员 is 判断对象是否类型兼容 (又一个RTTI运算符)程序的基本控制结构一、顺序结构的程序按照书写顺序依次执行begin 语句1; 语句2;end;二、实例输入两个整数x,y,计算x,y的差并输出。Program example;var x,y,s:integer;begin read(x,y); s:=x-y; writeln(s);end.一、分支结构又叫选择结构或条件结构If 条件 then 语句1 注意这里不可以加分号,因为IF语句到这里没有结束,后面还有ELSE语句 else 语句2;二、没有ELSE的IF

6、语句If 条件 then 语句1; 三、实例输入3个整数,输出最大的数。Program bijiao;var a,b,c,max:integer;begin readln(a,b,c); if a=b then max:=a else max:=b; if cmax then max:=c; writeln(max);end. 四、IF 语句的嵌套If 条件 Then Begin If 条件 Then 语句1 Else 语句2; End Else Begin If 条件 Then 语句3 Else 语句4; End;一、For循环 For 循环变量:=初值 to 终值 do 循环体; 若循环体

7、有多条语句,则必须用beginend复合语句括起来。【典型例题1】计算s=1+2+3+.+n,n由键盘输入。Program example;var s,i,n:integer;begin readln(n); s:=0; For i:=1 to n do s:=s+i; writeln(s);end. 【典型例题2】从键盘输入一个数,判断它是不是素数。PROGRAM sushu;VAR a,i:integer; flag:boolean;BEGIN readln(a); flag:=true; FOR i:=2 to trunc(sqrt(a) do IF a mod i=0 THEN BEG

8、IN flag:=false;BREAK;END; IF flag THEN writeln(Y) ELSE writeln(N);END. 二、While循环 While 条件 Do 循环体; 同样,若循环体有多条语句,则必须用beginend复合语句括起来。【典型例题】求最大公约数program HCF;var a,b,r:integer;begin r:=a mod b; while r0 do begin a:=b; b:=r; r:=a mod b; end;writeln(b);end. 三、Repeat循环 Repeat 循环体; Until 条件; 即使循环体有多条语句,也不必

9、用beginend复合语句。【典型例题】求自然对数e的近似值,直到最后一项小于10-5为止。 program e1;var i:integer; e,s,t:real;begin e:=1; t:=1; i:=1; repeat t:=t*i; e:=e+1/t; i:=i+1; until 1/taj then k:=j; if ki then begin temp:=ai;ai:=ak;ak:=temp;end; end; end;Begin 主程序开始 randomize; x:=random(100); for i:=1 to n do begin while find(x) do x

10、:=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!【演示课件】请用右键目标另存为命令保存下来再观看Program jiecheng;Var n:integer;Fun

11、ction jc(n:integer):longint; Begin If n = 0 Then jc = 1 Else jc = n * jc(n - 1) End;Beginmain readln(n); writeln(jc(n);End.【典型例题2】汉诺塔问题 有三根柱A、B、C,在柱A上有N块盘片,所有盘片都是大的在下面,小片能放在大片上面。现要将A上的N块盘片移到C柱上,每次只能移动一片,而且在同一根柱子上必须保持上面的盘片比下面的盘片小,输入任意的N,输出移动方法。 (注意:这是一个古老的传说,传说是如果把64个盘子由A柱移到了C柱的话,那么世界末日就到了,事实上如果要把64个

12、盘子从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【程序】Program hannuota;Var n:integer;Procedure move(n,a,b,c:integer); begin if n=1 then writel

13、n(a,-,c) else begin move(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;Begin readln(n); move(n,1,2,3);End.【典型例题3】求公约数问题 利用递归函数的方法求a,b的公约数。Program gongyueshu;Var a,b:longint;Function hcf(a,b:longint):longint; Begin if a mod b=0 then hcf:

14、=b else hcf:=hcf(b,a mod b); End;Beginmain readln(a,b); writeln(hcf=,hcf(a,b);End.数组一、数组定义方法VAR 数组名:Array下标起点.下标终点 Of 数组元素类型;例如:定义一个存储10个整数的数组a a:array1.10 of integer;赋值方法:a1:=0;定义数组后计算机会在系统内存内划出一块连续的区域供存放数组元素一、键盘输入数据存入数组过程PROCEDURE reada; VAR i:INTEGER; BEGIN FOR i:= 1 TO n DO READ(ai); END;二、随机产生n

15、个数据存入数组过程PROCEDURE randoma(max:integer;);VAR i:INTEGER;BEGIN RANDOMIZE; FOR i:= 1 TO n DO ai:=RANDOM(max); END;三、输出数组过程PROCEDURE writea; VAR i:INTEGER; BEGIN FOR i:=1 TO n DO WRITE(ai, ); WRITELN; END;一、自定义查找函数,在数组中查找x,若有返回x的下标, 若无则返回0。FUNCTION find(x:INTEGER):INTEGER; VAR i:INTEGER; BEGIN find:=0;

16、FOR i:=1 TO n DO IF ai=x THEN BEGIN find:=i;break;END; END;二、在数组的p位置插入一个元素xPROCEDURE inserta(p,x:INTEGER); VAR i:INTEGER; BEGIN FOR i:= n DOWNTO p DO ai+1:=ai; ap:=x; n:=n+1; END;注意:因为要插入一个元素,所以首先必须保证数组有空余的单元,否则会出现下标越界错误。三、从数组中把下标为p的元素删除掉PROCEDURE deletea(p:INTEGER); VAR i:INTEGER; BEGIN FOR i:=p TO

17、 n-1 DO ai:=ai+1; n:=n-1; END;约瑟夫问题】编号为1,2,.,n的n个人按照顺时针方向围坐一圈。从第一个人开始顺时针方向自1开始报数,报到m时停止报数。报m 的人出列,从他在顺时针方向的下一个人开始重新报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。其中n,m由键盘输入。【思路1】 利用数组存放n个人,数组下标等于他的编号,然后模拟报数过程,报到m时输出该位置的人编号,然后该位置的值清0,继续报数并判断是否为0,是0则跳过。直到n个人全部出列为止。【参考程序】Program yueshefu;Var a:array1.100 of integer

18、; n,m,i,j,p:integer;Begin write(Input n,m:); readln(n,m); for i:=1 to n do ai:=i; p:=1; p用于记录报数的位置 for i:=1 to n do begin j:=0; j用于记录报到的人数 while jm do begin if ap0 then j:=j+1; if p=n then p:=1 else p:=p+1; 处理边界情况 end; if p1 then begin write(ap-1, );ap-1:=0;end 处理边界情况 else begin write(an, );an:=0;en

19、d; end;end.【思路2】 建立一个循环数组,数组元素的每一个值保存的是它的下一个元素的编号,如果报到m后只要修改m前面的元素的编号为m后面的元素的编号,这样就跳过了第m个元素,如此下去直到n个人全部出列。【参考程序】Program yuesefu;Var a:array1.100 of integer; n,m,p,i,j:integer;Begin readln(n,m); for i:=1 to n-1 do ai:=i+1; an:=1; p:=n; for i:=1 to n do begin for j:=1 to m-1 do p:=ap; write(ap, ); ap:

20、=aap; end;End.自定义数据类型TYPE 枚举类型标识符=(枚举值1,枚举值2 ,枚举值3, );VAR 枚举类型变量表:枚举类型标识符;【实例】 TYPE weekday=(Sun,Mon,Tue, Wed,Thu,Fri,sat); month=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug, Sep,oct,nov,dec);VAR d:weekday; m:month;TYPE 子界类型标识符=常量1.常量2;VAR 子界类型变量表:子界类型标识符;【实例】 TYPE age=0.100; letter=a.z; VAR a:age; l:letter;TY

21、PE 集合类型标识符=SET OF 基类型;VAR 集合类型变量表:集合类型标识符;【实例】 TYPE digit=Set of 0.10;VAR a,b:digit;Begin a:=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,例如1 in 1,3,4是True; 2 in 1,3,4是False。5.集

22、合运算中元素的次序是不重要的。 TYPE 记录类型标识符=RECORD 域标识符表:类型; 域标识符表:类型; End;VAR 记录类型变量表:记录类型标识符;【实例】 一个学生包括学号、姓名、性别、年龄、成绩五个域。TYPE student=RECORD num:integer; name:string; sex:(male,female); age:0.100; score:real; END;VAR s:student; a:array1.100 of stuent;【赋值方法】s.num=9601;s.name=li min;s.sex=male;s.age=18;s.score=91

23、;a1.num=9601;a1.name=li min;a1.sex=male;a1.age=18;a1.score=91;1、字符串用于存放整批的字符数据。字符串可以看作是特殊的字符串数组来处理。字符串定义的格式:var s:string;s1:string15; 字符串长度固定为15 字符串定义时,如不指定长度,则按该类型的最大长度(255个字符)分配空间,使用时最大可用长度为255个;如果在中括号中给出一个具体的值(1255之间),则按这个值的大小分配空间。使用时,最大的可用长度即为该值。 2、字符串的输入、输出: 字符串类型既可按数组方式输入、输出,也可直接输入、输出:readln(s

24、);writeln(s);多个字符串输入时以回车作为数据间的分隔符;每个readln语句只能读入一个字符串。 3、有关字符串的操作: 操作 类型 作用 返回值 例子 length(s)函数 求字符串s的长度整型s:=123456789;l:=length(s);l的值为9copy(s,w,k)函数 复制s中从w开始的k位字符串s:=123456789;s1:=copy(s,3,5);s1的值是34567val(s,k)过程 将字符串s转为数值,存在k中;s:=1234;val(s,k);write(k);k=1234str(i,s)过程 将数值i转为字符串si:=1234;str(i,s);w

25、rite(s);s=1234Delete(s,w,k)过程 在s中删除从第w位开始的k个字符s := Honest Abe Lincoln;Delete(s,8,4);Writeln(s); Honest Lincoln Insert(s1,S,w)过程 将s1插到s中第w位S := Honest Lincoln;Insert(Abe , S, 8); Honest Abe Lincoln Pos(c, S)函数 求字符c在s中的位置整型S := 123.5;i :=Pos( , S);i的值为1 +运算符 将两个字符串连接起来s1:=1234;s2:=5678;s:=s1+s2;12345678一、指针类型是一种动态数据结构,它随着程序的执行而改变长度。定义方法:TYPE point=node; node=RECORD data:; link:point; End;VAR p,q,r:point;二、空间分配 new(p); new(q);三、赋值方法 p.data:=10; p.link:=q; q.data:=100; q.link:=NIL; NIL表示空指针17

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!