




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一个完全的PASCAL程序结构框架如下: PROGRAM 程序名(程序参数表);CONST 常量声明;TYPE 类型声明;VAR 变量声明;FUNCTION 函数名(参数表):函数类型; 函数声明;PROCEDURE 过程名(参数表); 过程声明;BEGIN 程序主体;END. 一、变量定义方法VAR 变量名1:变量类型1; 变量名2:变量类型2; 变量名3,变量名4:变量类型3;二、变量命名规则 1、首字符必须是英文 2、只能由英文、数字和下划线组成。 三、变量类型 常用的几个变量类型如下表:类型名含义取值范围占字节数shortint短整型-1281271integer整型-32768327672longint长整型-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个数据,以空格格开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的差并输出。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语句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 循环体; 若循环体有多条语句,则必须用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 BEGIN 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 条件; 即使循环体有多条语句,也不必用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:=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;Function 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个盘子从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 writeln(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:=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个数据存入数组过程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; 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 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; 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;end; 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:=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;TYPE 集合类型标识符=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.集合运算中元素的次序是不重要的。 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;=li min;s.sex=male;s.age=18;s.score=91;a1.num=9601;=li min;a1.sex=male;a1.age=18;a1.score=91;1、字符串用于存放整批的字符数据。字符串可以看作是特殊的字符串数组来处理。字符串定义的格式:var s:string;s1:string15; 字符串长度固定为15 字符串定义时,如不指定长度,则按该类型的最大长度(255个字符)分配空间,使用时最大可用长度为255个;如果在中括号中给出一个具体的值(1255之间),则按这个值的大小分配空间。使用时,最大的可用长度即为该值。 2、字符串的输入、输出: 字符串类型既可按数组方式输入、输出,也可直接输入、输出:readln(s);writeln(s);多个字符串输入时以回车
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年传染病防控知识检测模拟试题答案及解析
- 2025-2030功能性食品行业消费需求变化及营销策略评估报告
- 2025-2030功能性运动纺织品技术专利布局与商业化应用前景报告
- 2025-2030功能性药用饲料对肉品质改善效果验证分析报告
- 2025-2030功能性寡糖在幼畜饲料中应用效果市场调研报告
- 2025-2030共享出行平台用户粘性分析及市场拓展策略研究报告
- 2025-2030全球动力电池回收利用产业发展现状与前景预测报告
- 新能源汽车二手车市场2025年评估指标与流通体系完善策略报告
- 2032年新能源汽车出口市场品牌建设与品牌国际化研究报告
- 2025年市场拓展:新能源汽车换电服务在二三线城市的推广策略报告
- DB37-T 1933-2022 氯碱安全生产技术规范
- 校园传染病防控班主任培训
- 《大肠癌的治疗进展》课件
- GB/T 15268-2024桑蚕鲜茧
- GYK运行记录智能分析系统研究
- 计划生育服务站劳动合同
- GB/T 44757-2024钛及钛合金阳极氧化膜
- 红领巾爱祖国 星星火炬耀成长主题班会2
- 中国地级市经纬度-精确版
- 07SG111-1 建筑结构加固施工图设计表示方法
- DB44-T 2474-2024 自然教育标识设置指引
评论
0/150
提交评论