pascal教程-自学完整版.ppt_第1页
pascal教程-自学完整版.ppt_第2页
pascal教程-自学完整版.ppt_第3页
pascal教程-自学完整版.ppt_第4页
pascal教程-自学完整版.ppt_第5页
已阅读5页,还剩309页未读 继续免费阅读

下载本文档

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

文档简介

1、Pascal教程,目录,第一章 算法、程序设计与编译器基础 第二章 Pascal基础 第三章 程序设计初步 第四章 枚举、子界与数组 第五章 过程与函数 第六章 集合、记录与文件 第七章 指针等动态类型 第八章 面向对象与单元设计 第九章 特效,第一章,算法、程序设计与编译器基础,目录,第一讲 算法基础知识算法描述方法 第二讲 程序语言 第三讲 Pascal编译器基础,第一讲,算法基础知识算法描述方法,用计算机解决实际问题的四个步骤,分析问题,把实际问题抽象为一个一般性的数学问题 根据分析,设计出求其解的方法和步骤 用某种形式(如图形、自然语言、类计算机语言)表达以设计好的算法 在计算机上编辑

2、、调试和测试编制好的程序,直到正确满足问题的需求,算法的描述方法,例1.1.1: 交换a、b两数值 定义 c ac ba cb,N-S图,1973年,美国学者I.Nassi和B.Shneiderman提出了一种在流程图中完全去掉流程线,全部算法写在一个矩形框内,在框内还可以包含其它框的流程图。 N-S图也被称为盒图或CHAPIN图。,N-S图,功能域明确; 很容易确定局部和全局数据的作用域; 不可能任意转移控制; 很容易表示嵌套关系及模块的层次关系。,N-S图,顺序,选择,当型,直到型,循环,第二讲,程序语言,编程语言,机器语言 汇编语言 高级语言 脚本语言,机器语言,由于计算机内部只能接受二

3、进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序成为目标程序。只有目标程序才能被计算机直接识别和执行。但是机器语言编写的程序无明显特征,难以记忆,不便阅读和书写,且依赖于具体机种,局限性很大,机器语言属于低级语言。,机器语言, (1+1),汇编语言,汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采 汇编语言用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序通常由三部分组成:指令、伪指令和宏指令。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,

4、例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。,汇编语言,mov ax,1 add ax,1 (1+1),高级语言,高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。 高级语言主要是相对

5、于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的VB、C+、FoxPro、Delphi等,这些语言的语法、命令格式都各不相同。像最简单的编程语言PASCAL语言也属于高级语言.,高级语言,高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类: 解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。如较早时期的Qbasic

6、语言。 编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的,例如C/C+、 Visual Fox pro、Delphi等。,高级语言,Basic print 1+1 C #include main printf(“%d/n”,1+1); Pascal writeln(1+1); (1+1),脚本语言,脚本语言(Script lang

7、uage,scripting language,scripting programming language)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。 JavaScript、ActionScript、VBA,第三讲,Pascal编译器基础,编译器,Turbo Pascal 7 Free Pascal 1.0/2.0 CP Pascal Super Pascal Delphi 7.0 Lazarus GUIDE,Turbo Pascal 7.0,Fr

8、ee Pascal,快捷键,F2 Alt + Enter Alt + X F7 F8 F9 Alt + F9 Ctrl + F9,保存 全屏/小窗口转换 关闭 单步执行当前程序 单步执行当前程序 导出exe程序 纠错 调试并导出exe程序,文件关联,.pas .bak .o .exe .ppu .tpu,第二章,Pascal基础,目录,第一讲 Pascal语言特点、优点与缺点 第二讲 Pascal程序结构 第三讲 Pascal基本符号、保留字和标识符 第四讲 Pascal标准数据类型、常量与变量 第五讲 Pascal标准函数、过程、运算符与表达式,第一讲,Pascal语言特点、优点与缺点,Pa

9、scal特点,以法国数学家命名的Pascal语言现已成为使用最广泛的语言之一,其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。,Pascal优点, 结构化 Pascal可以方便地书写出结构化程序。这就保证程序的正确性和易读性。在结构化这一点上,比其它算法语言更好一些。,Pascal优点, 数据类型丰富 Pascal提供了整数型、实数型、字符型、布尔型、枚举型、子界型以及由以上类型构成的数组类型、集合类型、记录类型和文件类型。此外,还提供了其它许多语言中所没有的指针类型。丰富的数据结构和上述的结构化性质,使得Pascal可以被方便地用来描述复杂的算法。,Pascal优

10、点, 适用性好 既适用于数值运算,也适用于非数值运算领域。有些语言只适用于数值计算,有些语言则适用于商业数据处理和管理领域。Pascal的功能较强,能广泛应用于各种领域。,Pascal优点, 书写较自由 不象有些算法语言那样对程序的书写格式有严格的规定。Pascal允许一行写多个语句,一个语句可以分写在多行上,这样就可以使Pascal程序写得象诗歌格式一样优美,便于阅读,但一行不可超过257个字符。,Pascal缺点,网络支持 面向对象 GUI,第二讲,Pascal程序结构,Pascal程序例子,program ex ( input , output ); uses crt label 1;

11、const pi=3.1415926; type int : 0.1000; var r : int; s : real; function fac ( r : int ) : real; var s : real; begin s:=r*pi*r; fac:=s; end;,procedure sum; begin s:=fac ( r ); end; begin 1: ClrScr; write (r=); readln ( r ); sum; writeln (s=,s); readln; goto 1; end.,程序首部,标号说明,常量说明,类型说明,变量说明,函数定义,过程定义,主

12、程序体,单元引用,第三讲,Pascal基本符号、保留字和标识符,基本符号,A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 + - * / = = ( ) := . , : ; . ,保留字,(1)程序、函数、过程符号 :program , function , procedure (2)说明部分专用定义符号:array , const , file , label , of , packed ,

13、record , set , type , var (3)语句专用符号 :case , do , downto , else , for , forward , goto , if , repeat , then ,to until , while , with (4)运算符号:and , div , in , mod , not , or (5)分隔符号:begin , end (6)空指针常量 :nil 共36个 补充:unit implementation interface string,标识符,要求 标准标识符 自定义标识符,要求,以字母或下划线开头的数字字母下划线序列 例:a、ab

14、、a1、max、_12、_ab211、a_1、a_等,自定义标识符使用时的注意要点,不能与保留字同名 如果与标准标识符同名,强行改变标准标识符原来意义 最好有一定意义,使程序具有可读性 可以使用大写、小写、大小写混用,意义不变,第四讲,Pascal标准数据类型、常量与变量,常用数据类型,整型(整数类型) 实型(实数类型) 字符型 布尔类型 枚举类型 子界类型,数组类型 集合类型 记录类型 文件类型 指针类型 对象类型,整型,shortint -128127 integer -3276832767 longint -21474836482147483647 byte 0255 word 0655

15、36 int64 freepascal专用,非顺序类型 qword freepascal专用,非顺序类型,整型,符号: + - * div mod,实型,real $N+ single double exended comp,实型,符号: + - * /,字符型,char #001#128 ,布尔型,Boolean ( true / false ) 计算符号 not and or xor,not,not ( true ) = false not ( false ) = true,and,(true) and (true) = true (true) and (false) = false (f

16、alse) and (true) = false (false) and (false) = false,or,(true) or (true) = true (true) or (false) = true (false) or (true) = ture (false) or (false) = false,xor,(true) xor (true) = true (true) xor (false) = false (false) xor (true) = false (false) xor (false) = true,常量,定义以后不能改变值的 如: const st = abc 句

17、型:const 自定义标识符 = 值,变量,定义以后可以改变值的 如: var i : integer; 句型: var 自定义标识符 : 数据类型,第五讲,Pascal标准函数、过程、运算符与表达式,函数与过程,子程序 过程 procedure 函数 function,运算符,表达式,表达式指由常量、变量、函数、括号、集合及运算符连接起来的式子。表达式中的变量必须要有一个明确的值,单个的常量、变量、函数都可以看成是一个表达式 运算先后顺序 not * , / , div , mod , and + , - , or 关系运算符、in,句型,:= 变量名/函数名:=表达式,例题,例2.5.1

18、两个数差为100布尔表达式: 1: abs ( a b ) = 100; 2: ( a + 100 = b ) or ( a 100 = b ),例题,例2.5.2 能够被3和5整除布尔表达式: 1: ( a mod 3 = 0 ) and ( a mod 5 = 0) 2: a mod ( 3 * 5 ) = 0,例题,例2.5.3 闰年表达式: (year mod 400 = 0) or (year mod 4 = 0) and (year mod 100 0),例题,例2.5.4 求圆周长语句: 1: s = 3.14 * r * r ; 2: s = 3.14 * sqr ( r );

19、,第三章,程序设计初步,目录,第一讲 读入语句与输出语句 第二讲 复合语句 第三讲 if语句及if语句的嵌套 第四讲 case语句 第五讲 for循环 第六讲 while循环与repeat循环 第七讲 goto语句 第八讲 小技巧,第一讲,读入语句与输出语句,读入语句,语法: read() readln() 技巧: 读入回车后退出程序:readln; end。,输出语句,语法: write() writeln() 小技巧: 场宽,单场宽,单场宽指在输出时每个输出项所占的长度。若输出项的长度大于长宽则输出的结果是那个输出项不受长宽限制,后面的输出项仍然在其后输出。 例3.1.1: program

20、 p3_1_1 ( input , output ); var a : integer; begin a:=100; write(a:10); end.,双场宽,有两个场宽,双场宽只用于实型数输出,其中前一个和但场宽作用相同,后一个用来控制小数位数,若小数位数大与场宽输出时就四舍五入,若小于场宽就补“0”。 例3.1.2: program p3_1_2 ( input , output ); var a : real; begin a:=100; write(a:0:2); end.,场宽语法,单场宽:(integer、char、boolean、string) 语法:自定义标识符 : 场宽数

21、双场宽:(real) 语法:自定义标识符 : 总场宽数 : 小数位数,例题,例3.1.3:读入两个实型,交换后输出,精确到0.01。 program p3_1_3_1 ( input , output ); var a , b , c : real; begin readln ( a , b ); c:=a; a:=b; b:=c; writeln ( a:0:2 , b:0:2 ); readln; end.,例题,例3.1.3:读入两个实型,交换后输出,精确到0.01。 program p3_1_3_2 ( input , output ); var a , b : real; begin

22、 readln ( a , b ); a := a + b; b := a b; a := a b; writeln ( a:0:2 , b:0:2 ); readln; end.,例题,读入一个整数,将其平方后减去原数的绝对值,最后求值的平方根,输出最后的值,保留整数。 program p3_1_4 ( input , output ); var n : integer; begin readln ( n ); writeln ( sqrt ( n * n - abs ( n ) ) : 0 : 0 ); readln; end.,第二讲,复合语句,语法,复合语句 begin end; en

23、d前句子末尾可不加;,第三讲,if语句及if语句的嵌套,语法,if + ( boolean 表达式 ) + then + 句子 if + ( boolean 表达式 ) + then + 句子1 + else + 句子 2 注意:else前句子末尾不加“;”,例题,例3.3.1:将两个整数大的放入max,小的放入min,并输出。 program p3_3_1 ( input , output ); var max , min , t : integer; begin readln ( max , min ); if maxmin then begin t := max; max := min;

24、 min := t; end; writeln ( max , min ); readln; end.,例题,例3.3.2:计算下列函数,program p3_3_2 ( input , output ); var x , y : integer; begin readln ( x ); if x0 then y = -1 else if x=0 then y = 0 else y = 1; writeln ( y ); readln; end.,例题,例3.3.3:读入三个数排序 program p3_3_3 ( input , output ); var a , b , c : integ

25、er; begin readln (a,b,c); if ab then if bc then writeln ( a , , b , , c ) else if ac then writeln ( a , , c , , b ) else writeln ( c , , a , , b ) else if cb then writeln ( c , , b , , a ) else if ac then writeln ( b , , a , , c ) else writeln ( b , , c , , a ); readln; end.,第四讲,case语句,语法,case语句 cas

26、e 表达式 of 常数表1:语句1; 常数表2:语句2; 常数表n:语句n; else 语句n+1 end; end前句子末尾可不加;,end与case相对,而非begin else前可加;,例题,例3.4.1:随机产生两个数,读入一个符号,并运算。 program p3_4_1 ( input , output ); var a , b : integer ; ch : char; begin randomize; a := random (100); b := random (100); readln ( ch ); case ch of + : writeln ( a , + , b ,

27、 = , a + b ); - : writeln ( a , - , b , = , a - b ); * : writeln ( a , * , b , = , a * b ); / : writeln ( a , / , b , = , a / b ); end; readln; end.,第五讲,for循环,语法,for 变量 := 表达式 to 表达式 do 语句 for 变量 := 表达式 downto 表达式 do 语句 要求: to 循环 初值 = 终值 变量:顺序类型,例题,例3.5.1:输出从1到100所有的整数。 program p3_5_1 ( input , outp

28、ut ); var i : integer; begin for i:=1 to 100 do writeln ( i ); readln; end.,例题,例3.5.2:倒序输出从1到100所有的偶数。 program p3_5_2 ( input , output ); var i : integer; begin for i:=1 downto 100 do if i mod 2 = 0 then writeln ( i ); readln; end.,例题,例3.5.3:警察查一个杀人犯。A说,是B杀的;B说:不是我;C说:是A杀的。已知有且只有一个人说了谎,问是人谁杀的。 progr

29、am p3_5_3 ( input , output ); var a , b , c : boolean ; begin for a := false to true do for b := false to true do for c := false to true do if ord ( a ) + ord ( b ) + ord ( c ) = 2 then if ord ( not ( b ) ) + ord ( b ) + ord ( not ( a ) ) = 2 then if not ( a ) then writeln ( a ) else if not ( b ) th

30、en writeln ( b ) else writeln ( c ); readln(); end.,注意事项,例3.5.4 例3.5.5 for 循环的终值不能变化。 for 循环的指针可以变化。,例题,例3.5.4 program p3_5_4 ( input , output ); var i , n ,total : integer; begin n := 100; total := 0; for i:=1 to n do begin inc ( total ); n := n - 1; end; writeln ( total ); readln; end.,运行结果: 100,例

31、题,例3.5.5 program p3_5_5 ( input , output ); var i , total : integer; begin for i := 1 to 10 do begin i := i + 1; inc ( total ); end; writeln ( total ); readln; end.,运行结果: 5,第六讲,while循环与repeat循环,语法,while Boolean表达式 do 句子 repeat 句子 until Boolean表达式 注: until前可以不加;,例题,例3.6.1:读入一行数字,以回车为结束标志,求最大值。 progra

32、m p3_6_1_1 ( input , output ); var a , max : integer; begin max := -32768; repeat read ( a ); if a max then max := a; until eoln; readln; writeln ( max ); readln; end.,例题,例3.6.1:读入一行数字,以回车为结束标志,求最大值。 program p3_6_1_2 ( input , output ); var a , max : integer; begin max := -32768; while not ( eoln )

33、do begin readln ( a ); if a max then max := a; end; readln; writeln ( max ); readln; end.,小技巧,while 句型 与 repeat 句型 转换 while句型表达式 = not ( repeat句型表达式 ),例题,3.6.2 顺序输出1到100内所有整数。 program p3_6_2_1 ( input , output ); var i : integer; begin i := 1; while i = 100 do begin writeln ( i ); i := i + 1; end; r

34、eadln; end.,例题,3.6.2 顺序输出1到100内所有整数。 program p3_6_2_1 ( input , output ); var i : integer; begin i := 1; repeat writeln ( i ); i := i+1; until i = 100 ; readln; end.,第七讲,goto语句,语法,label 数字 数字 : goto 数字,label 数字 goto 数字 数字 :,例题,例3.7.1:顺序输出从1到100所有整数。 program p3_7_1 ( input , output ); label 1; var i

35、: integer; begin i := 1; 1: writeln ( i ); if i = 100 then goto 1; readln; end.,注,标号在 1.9999 之间,且不一定要按顺序。 goto语句可由其他语句代替。 尽可能不用goto语句。,第八讲,小技巧,integer与char的特殊表达式,integer var 变量名 : 类型名 方法二 var 变量名 : ( 标示符1 , 标示符2 );,枚举型,是顺序类型 不能直接read/write,要用case句型 允许直接赋值,没有运算符 类型定以后允许作为函数、过程参数,函数值,例题,例4.1.1:当输入星期几的

36、数字,能输出它的后一天是星期几。 program p4_1_1 ( input , output ); type week=(sun,mon,tue,wed,thu,fri,sat); var i : integer; day , succday : week; begin readln(i); case i of 1:day:=mon; 2:day:=tue; 3:day:=wed; end; if (day=sat) then succday:=sun else sucday:=succ(day); write (The next day is ); case succday of sun

37、: writeln(sunday); mon: writeln(monday); tue: writeln(tuesday); . end; end.,第二讲,子界型,语法,方法一 type 类型名 最小值 . 最大值; var 变量名 : 类型名 方法二 var 变量名 : 最小值 . 最大值;,子界型,shortint = -128.127; boolean没有子界型 类型定以后允许作为函数、过程参数,函数值 子界型也是顺序类型,也可以用for语句,例题,例4.2.1:顺输出从1到100所有整数。 program p4_2_1 ( input , output ); var i : 1 .

38、 100; begin for i := 1 to 100 do writeln ( i ); readln; end.,第三讲,一位数组,语法,方法一 type 类型名 = array 初始值 . 终值 of 类型名; var 变量名 : 类型名 方法二 var 变量名 :array 初始值 . 终值 of 类型名;,数组,不能直接赋值,用for语句 数组每一个数据表示方法:变量名+下标 (e.g. ai+1); 类型定以后允许作为函数、过程参数,函数值,例题,例4.3.1:读入100个数,先顺序输出,再倒序输出。 program p4_3_1 ( input , output ); var

39、 a : array 1 . 100 of integer; i : 1 . 100; begin for i := 1 to 100 do read ( ai ); for i := 1 to 100 do writeln ( ai ); for i := 100 downto 1 do writeln ( ai ); readln; end.,例题,例4.3.2:随机产生100个数,先输出,再将第一个数移到最后,其余每个数向前移一位。 program p4_3_2 ( input , output ); var a : array 1 . 100 of integer ; i : inte

40、ger; begin randomize; for i := 1 to 100 do begin a i := random ( 100 ); writeln ( a i ); end; for i := 1 to 100 do begin a i := a i + a i + 1 ; a i + 1 := a i - a i + 1 ; a i := a i - a i + 1 ; end; for i := 1 to 100 do writeln ( a i ); readln; end.,思考题,将一个数分离为一个数组。 有一个数要插入一个顺序数组,使其仍为顺序。 有两个50位顺序数组,

41、整合为一个顺数组,并输出。 有三个50位顺序数组,整合为一个顺数组,并输出。,第四讲,字符串,语法,var 变量名 : string 数字 0 = 数字 = 255 如果不写下标,默认为255位 每一个数据表示方法同一位数组。,比较,array of char,string,不能直接读入、输出,可以直接读入、输出,可以对每一个数据赋值,不能进行整体赋值,可以进行整体赋值,不能对每一个数据赋值,位数可以定义很大,位数最多255位,没有标准函数、过程,有标准函数、过程,运算符,+ turbo+#0+pascal+7.0=turbo pascal7.0 参与运算的类型可以是string和char 运

42、算结果类型为string,例题,例4.4.1:读入一个字符串,输出其中所有的字母。 program p4_4_1 ( input , output ); var st : string; i : integer; begin readln ( st ); for i := 1 to length ( st ) do write ( st i ); readln; end.,第五讲,多维数组,语法,大致同一位数组 array 初始值1.终值1,初始值2.终值2, of sz下标1,下标2.,例题,例4.5.1:输出右图 program p4_5_1(input,output); var a :

43、array 1.5,1.5 of 0.9; i,j:integer; begin for i:=1 to 5 do for j:=1 to 5 do ai,j:=0; a1,1:=1; for i:=2 to 5 do for j:=1 to i do if j1 then ai,j:=ai,j-1+1 else ai,j:=ai-1,1+1; for i:=1 to 5 do begin for j:=1 to i do write(ai,j, ); writeln; end; readln; end.,第六讲,排序法,排序法目的,将一个数组升序排列或降序排列。 选择法排序 冒泡排序 插入法

44、排序 快速分类排序 归并排序 基数排序,选择法排序,1,2,2,3,4,1,5,5,5,4,1,4,2,2,2,4,3,4,1,5,5,5,4,1,1,2,1,2,2,3,4,1,5,5,5,4,1,4,2,1,4,2,3,4,1,5,5,5,4,1,2,2,1,4,2,3,4,1,5,5,5,4,1,2,2,冒泡排序,1,2,2,3,4,1,5,5,5,4,1,4,2,4,2,2,3,4,1,5,5,5,4,1,1,2,2,2,4,3,4,1,5,5,5,4,1,1,2,2,4,2,3,4,1,5,5,5,4,1,1,2,2,4,2,3,4,1,5,5,5,4,1,1,2,2,4,2,3,4

45、,1,5,5,5,4,1,1,2,2,4,2,5,4,1,5,5,3,4,1,1,2,例题,例4.6.1 选择法排序 program p4_6_1(input,output); const n=7; var a:array1.n of integer; i,j,k,t:integer; begin write(Enter date:); for i:= 1 to n do read(ai); writeln; for i:=1 to n-1 do begin k:=i; for j:=i+1 to n do,if aji then begin t:=ai; ai:=ak; ak:=t; end

46、; end; write(output data:); for i:= 1 to n do write(ai:6); writeln; end.,思考题,冒泡排序,第五章,过程与函数,目录,第一讲 子程序概念 第二讲 标准过程及标准函数 第三讲 自定义函数 第四讲 自定义过程 第五讲 变参与值参 第六讲 全程变量与局部变量 第七讲 forward 第八讲 子程序的嵌套递归初步,第一讲,子程序概念,子程序,函数 function 过程 procedure,第二讲,标准过程与标准函数,链接,第三讲,自定义函数,语法,function (,:;var ,:; ):; 说明部分,同主程序 begin

47、函数名:=; end;,语法,定义后与标准函数同样使用,例题,例5.3.1:求5!+4!+3!+2!+1!。 program p5_3_1(input,output); function fac(n:integer):longint; var i:integer; begin i:=n; n:=1; for i:=i downto 1 do n:=n*i; fac:=n; end; begin writeln(fac(1)+fac(2)+fac(3)+fac(4)+fac(5); readln; end.,思考题,编写一个求圆面积的函数。,第四讲,自定义过程,语法,procedure (,:;

48、var ,:; ); 说明部分,同主程序 begin end;,语法,定义后与标准过程同样使用,例题,例5.3.2:求5!+4!+3!+2!+1!。 program p5_3_2(input,output); var arr:array 1.5 of integer;i,n:integer; procedure sum(n:integer;var m:integer); var i:integer; begin i:=n; n:=1; for i:=i downto 1 do n:=n*i; m:=n; end; begin n:=0; for i:=1 to 5 do arri:=i; fo

49、r i:=1 to 5 do sum(arri,arri); for i:=1 to 5 do n:=n+arri; writeln(n); readln; end.,思考题,编写一个求圆面积的过程。 编写一个打印下图的过程。,第五讲,变参与值参,值参和变参,值参:特点:前面没有var;使用:返回时值还原。 变参:特点:前面有var;使用:返回时值不还原。,第六讲,全程变量与局部变量,全程变量与局部变量,全程变量:作用域:整个程序。 局部变量:作用域:子程序。,例题,例5.6.2:求5!+4!+3!+2!+1!。 program p5_6_2(input,output); var arr:ar

50、ray 1.5 of integer;i,n:integer; procedure sum(n:integer;var m:integer); var i:integer; begin i:=n; n:=1; for i:=i downto 1 do n:=n*i; m:=n; end; begin n:=0; for i:=1 to 5 do arri:=i; for i:=1 to 5 do sum(arri,arri); for i:=1 to 5 do n:=n+arri; writeln(n); readln; end.,第七讲,forward,语法(TP7),function/pr

51、ocedure1() forward function/procedure2() (2) function/procedure1 (1) ,语法(fpc),function/procedure1() forward function/procedure2() (2) function/procedure1() (1) ,第八讲,子程序的嵌套递归初步,定义,直接递归 在函数/过程内部自己引用自己 间接递归 A引用B,B引用A,特点,结构清晰 容易阅读理解 动态产生变量,使用须知,设计前要有递归公式 递归调用次数有限 要有结束递归的结束语句 子问题求解方式要与原问题相同 分治法,缺点,运算效率低

52、占用空间大,备注,理论上来说,递归式可以与递推(for语句)互换。,例题,例5.8.1:判断偶数 program p5_8_1(input,output); function fac(n:integer):boolean; begin if n=0 then fac:=true else if fac=1 then fac:=false else fac:=fac(n-2); end; begin readln(n); writeln(fac(n); readln; end.,例题,例5.8.2: 步步高升(Step by Step) 问题描述: 春节的时候TENSHI去逛花市。她来到一个卖盆

53、竹的摊位,看到一盆叫做“步步高升”的盆竹。“步步高升,步步高升”学习就是要一步一步来,不能急,要打好基础。在稳固的基础上才谈得上步步高升!TENSHI若有所思。她看到这盆东西好意头,于是想买下。谁知一问价钱,“不贵不贵,才。”TENSHI差点没昏倒,囊中羞涩嘛。但是TENSHI还是很想买下来,于是她就在一旁观察。观察了一段时间,她发现这个卖盆竹的人和别人杀价很有规律。设此人第i次报价为Wi元,那么他第i+1次报的价格为WiA或Wi B。到了最后,TENSHI以Z元成交,高高兴兴的回家去了。 任务:求TENSHI把盆竹的价格由W1元杀到Z元的方法总数。 输入格式:输入文件第一行有两个正整数W1和

54、Z。第二行有两个正整 数A和B。它们满足条件: 10 W1 106,1 Z 106 ,Z W1 2 A 、B 10000,AB 输出格式:将方法总数输出,只有一行。 注意:结果不超过MAXLONGINT,例题,program p5_8_2(input,output); var w,z,a,b:longint; function fac(n:longint):longint; begin if n=z then fac:=1 else if nz then fac:=0 else fac:=fac(n-a)+fac(n-b); end; begin readln(w,z); readln(a,b

55、); writeln(fac(w); readln; end.,第六章,集合、记录与文件,目录,第一讲 集合(上) 第二讲 集合(下) 第三讲 记录 第四讲 变体记录 第五讲 文件概述 第六讲 文本文件 第七讲 类型文件 第八讲 标准输入输出的重定向,第一讲,集合(上),集合,定义: set of 基类型 定义方式如数组 注:基类型在225种以下 如 set of integer 是错的 集合表示 ,集合, = = = + - * in,1,2,3,4,51,2,3 1,2,3=1,2,3 1,2,3,4,5=1,2,3,4 1,2,3,4=1,2,3,4 1,2+2,3=1,2,2,3=1,

56、2,3 1,2,3-1,2=3 1,2,3,4*0,1,2,3=1,2,3 1 in 1,2,3,4,5,集合记录方式,例: s:set of 1.10; a:array 1.10 of 0.1; s:=1,2,3 a=0 (repeat 3 times), 1 (repeat 7 times),第二讲,集合(下),集合,不能直接输入、输出 输出方式 如:s:set of char;ch:char; for ch:=#001 to #128 do if ch in s then write(ch);,例题,例6.2.1:输入一串字符,输出其中a.z,A.Z的个数。 program p6_2_1

57、(input,output); var ch:char;t:integer; begin t:=0; while not eoln do begin read(ch); if ch in a.z,A.Z then t:=t+1; end; readln; writeln(t); readln; end.,例题,输出100以内的所有素数。 program p6_2_2(input,output); var s:set of 2.100;i,j:integer; begin s:=2.100; for i:=2 to 100 do if i in s then for j:=2 to 100 div I do s:=s-i*j; for i:=2 to 100 do if i in s then write(i, ); readln; end.,第三讲,记录,记录,语法 record :; :; :; (;) end; 其余同数组,记录,不能直接读入、输出。 可以整体赋值。 域能否直接读入、输出与其基类型相同,例题,读入两个数,输出。 program p6_3_1(input,output); var n:record a,b:integer; end; begin rea

温馨提示

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

评论

0/150

提交评论