当前位置:首页 >> 计算机软件及应用 >>

Turbo Pascal7.0讲解


第一讲 Turbo Pascal7.0 基础

信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题的能力。选手首先应针对竞赛中题目的要求构建数学模型,进而构造出计算机 可以接受的算法,之后要写出高级语言程序,上机调试通过。程序设计是信息学奥林匹克竞赛的基本功,在青少年朋友参与竞赛活动的第一步必须掌握一门高级语言及其程 序设计方法。 2.1 Turbo Pascal 简介 PASCAL 语言也是一种算法语言,它是瑞士苏黎世联邦工业大学的 N.沃思(Niklaus Wirth)教授于 1968 年设计完成的,1971 年正式发表。它的命名是为了纪念法国数 学家 Pascal。 PASCAL 语言是一种结构化的程序设计语言,可以用来编写应用程序。它又是一种系统程序设计语言,可以用来编写顺序型的系统软件(如编译程序)。它的功能强、编 译程序简单,是 70 年代影响最大一种算法语言。 Turbo Pascal 是由美国 Borland 公司设计、研制的一种适用于微机的 Pascal 语言应用开发集成环境。该产品由 1983 年推出 1.0 版本发展到 1992 年推出的 7.0 版本, 功能不断完善。

2.2

安装及启动 Turbo Pascal 7.0 系统不仅可以在 DOS 操作系统下运行,也可以在 Windows 下运行。

1、Turbo Pascal 7.0 集成开发环境的安装

Turbo Pascal 7.0 系统在不同的操作系统下的安装方法基本相同。将 Pascal 系统的安装盘放入驱动器,执行其中的 Install 文件,按提示操作,即可。 2、Turbo Pascal 7.0 集成开发环境的启动 Turbo Pascal 系统在 DOS 和 Windows 环境下启动方法不完全相同。在 DOS 启动 Turbo Pascal 执行的文件是 Turbo.exe,而在 Windows 下启动 Turbo Pascal 执行的文 件是 tpx.exe。

(1) DOS 下的启动 在 DOS 提示符状态下,进入装有 Turbo Pascal 系统的文件目录键入 Turbo 即可进入 Turbo Pascal 集成环境。如:

这种方法适用于 MS-DOS 6.22 之前的版本或 Win 9X 及 Win2000 的 MS-DOS 工作方式。 (2) Win9X 或 Win2000 模式下启动 为了可以在 Windows 下直接启动 Pascal,可以在安装完毕后进行如下的操作: a、首先为文件 Turbo.exe 建立快捷方式 tp.pif; b、选中快捷方式 tp.pif,单击右键,打开快捷方式的”属性“对话框,选择其中 的“程序”选项,然后再单击”高级“,把“高级程序设置“对话框中选项”MS-DOS 方式”前面的那个勾去掉,最后单击”确定“。

3、Turbo Pascal 系统的退出 退出 Turbo Pascal 系统的方法有:

(1) 选择主菜单 File 中菜单项 Exit,或者通过键盘命令 ALT+X,可以彻底退出 Pascal,若有未存储过的内容,系统会给出提示询问是否要保存; (2) 选择主菜单 File 中菜单项 Dos shell 可以退出 Pascal,进入 DOS 提示符状态,但 Pascal 仍然驻留在内存中。欲返回 Pascal,可以键入命令 exit,即 C:\exit

2.3

集成环境及菜单使用 Turbo Pascal 集成环境(IDE)启动成功后,会出现下图的窗口界面,窗口由标题栏、工具栏、主菜单栏、编辑窗口和位于底部的状态行构成,这是 Turbo Pascal 7.0

的一个基本工作界面。

2.4 程序的输入和调试 下面通过一个简单的 Pascal 程序来说明如何完成一个程序的输入、编辑、编译、链接、运行、保存等操作。 程序如下: program tuxin; var begin for h:=1 begin write(' ':h); for end end. (1) 进入编辑状态 (2)输入源程序 启动 pascal 后,系统提供一个默认的文件名 NONAME00.PAS,光标在编辑窗口,此时将程序按书写格式输入,输入的过程中可使用光标键和删除键进行编辑操作,每行 输完后按回车键换行。程序输入后,效果如下图所示: k:=1 to 6 do write('*'); writeln to 4 do h,k:integer;

如果窗口中已有程序,那么在输入新程序前,需建立一个新窗口,方法是:单击 File 菜单中的 New 菜单项。 (3)编译源程序 程序输入以后,即可开始编译。运行主菜单 Compile 中的菜单项 Compile,或者按 Alt+F9,对所输入的程序进行编译,此时屏幕上会显示有关编译信息的对话框。下图 所示的是编译成功的信息:

如果在编译过程中发现程序有语法错误,系统会提示第一个错误信息。此时,应有针对性地进行修改。修改后再重复编译的过程,直到编译成功。 (4)运行程序 选择主菜单 Run 中的菜单项 Run,或按快捷键 Ctrl+F9,则完成程序的运行,在 Output 窗口中会出现程序的运行结果,按 F5 键将输出窗口放大,以便看清所有的运行 结果,再按 F5 可还原窗口。下面是该程序的运行结果。

也可以在运行后通过快捷键 Alt+F5 切换到用户屏幕,以便观察运行结果。再按任一键可返回编辑窗口。 (5)保存程序 选择主菜单 File 中的菜单项 Save,或按快捷键 F2,在出现的对话框中输入文件名:tu.pas,单击“OK”,则该程序就以 tu.pas 为文件名保存在当前目录了。 (6)生成可执行文件 选择主菜单 Compile 中的 Destination Disk 选项后,再对程序进行一次编译,即可在当前目录中产生一个名为 tu.exe 的可执行文件。

第二讲 Pascal 语言的基本结构

作者:网上收集 文章来源:网上收集 点击数:1127 更新时间:2004-11-21 16:43:50

Pascal 语言一种结构化程序设计语言,它非常注重于语言的可靠性、易于验证性、概念的清晰性和实验的简化性。它充分考虑了算法设计中的自顶向下、由粗到精的模块化思想, 以及总可以将算法步骤剖解为顺序、分支、循环三种基本结构的结构化原则,提供了丰富的数据类型和清晰的描述模块化语句。简单来说,一个完整的 Pascal 程序包括两部分:程 序首部和程序体。 详细来说,一个 Pascal 程序的框架应该如下所示: program 程序名(程序参数表); label 标号说明; const 常量说明; type 类型说明; var 变量说明; function 函数说明; procedure 过程说明; begin{主程序开始} 程序语句; ??; 程序语句; end.{主程序结束}

注意:1、在 pascal 程序中,每条语句中要用分号(;}隔开,允许一行写多个语句,也允许一条语句与几行。 2、在说明部分,并不是全部都要有,可根据情况决定。 为了明显起见,先举一个最简单的 PASCAL 程序例子:

从这个简单的程序可以看到: 1、一个 PASCAL 程序分为两个部分:程序首部和程序体。 2、程序首部是程序的开头部分,它包括: ⑴程序标志。 用"program"来标识"这是一个 PASCAL 程序"。PASCAL 规定任何一 PASCAL 程序的首部都必须以此字开头。最常用的参数为 input,output。在 turbo pascal 语言中,首部也可省 略。 ⑵程序名称。由程序设计者自己定义,如例中的 a1、a2。 在写完程序首部之后,应有一个分号。

3、程序体是程序的主体,在有的书本里也称"分程序"。程序体包括说明部分(也可省略)和执行部分两个部分。 ⑴说明部分用来描述程序中用到的变量、常量、类型、过程与函数等。本程序中第二行是"变量说明",用来定义变量的名称、类型。 PASCAL 规定,凡程序中用到所有变量、符号常量、数组、标号、过程与函数、记录、文件等数据都必须在说明部分进行定义(或称"说明")。也就是说,不允许使用未说明先使 用。 ⑵执行部分的作用是通知计算机执行指定的操作。如果一个程序中不写执行部分,在程序运行时计算机什么工作也不做。因此,执行部分是一个 PASCAL 程序的核心部分。 执行部分以"begin"开始,以"end"结束,其间有若干个语句,语句之间以分号隔开。 执行部分之后有一个句点,表示整个程序结束。 4、PASCAL 程序的书写方法比较灵活。当然,书写不应以节省篇幅为目的,而应以程序结构清晰、易读为目的。在编写程序时尽量模仿例题程序格式。 5、在程序中,一对大括号间的文字称为注释。注释的内容由人们根据需要书写,可以用英语或汉语表示。注释可以放在任何空格可以出现的位置。执行程序时计算机对注释不予 理睬。 注意:在 Pascal 中,程序首部、说明部分都不是必须要出现的;而语句部分也允许空操作,不包含任何语句。因此,最简单的合法的 Pascal 程序就是: Begin End. {注意:该程序其实什么也没有做}

【练习】 1、以下语句语法正确的是________。 A、PROG Em;

B、PROGRAM C、PROGRAM D、PROGRAM

(Output); (Input,Output); Exa(input,output);

2、Pascal 程序首部除必须有保留关键字 Program 外,还必须有__________。 A、程序名 C、Output B、程序参数 D、Input

3、一个标准 Pascal 程序必须包括__________。 A、程序首部、说明部分 B、程序首部、执行部分 C、说明部分、程序体 D、程序首部、说明部分、执行部分

4、输入、运行、保存例 1、例 2 的程序,分别以 K1.PAS、K2.PAS 作为文件名保存。 5、修改例 2 程序,使其能计算 15+10、15-10、15*10,并输出结果。

第三讲 pascal 的基本语法单位

作者:网上收集 文章来源:网上收集 点击数:1175 更新时间:2004-11-21 16:44:40

1、基本符号 (1) 字母 A---Z,a---b (2) 数字 0---9 (3) 空格 (4) 特殊符号

注意: * pascal 语言除了能使用以上规定的基本符号外,不得使用任何其它符号。 * 字母无大小写之分。 2、保留字 保留字是指 pascal 语言中一些有特殊含义的英文单词,例如前面例子中的 program,var,begin,end 等。这些单词已被 Pascal 语言自己所使用,不能用于其他场合,故称为保 留字。 AND(逻辑与运算), ARRAY(数组定义), BEGIN(复合语句或执行体开始标识), CASE(情况语句), CONST(常量定义), DIV(整除), DO(与 WHILE 一起构成 WHILE 循环语句), DOWNTO, ELSE(否 则),END(复合语句或程序结束标识),FILE(文件),FOR(FOR 循环),FUNCTION(函数定义标识),GOTO(转向),IF(如果),LABEL(标识),MOD(求余),NIL(空),OF(变量或类型定义标 识), OR(逻辑或运算), PACKED, PROCEDURE(过程定义标识), PROGRAM(程序定义标识, RECORD(记录定义标识, REPEAT(与 UNTIL 一起构成 REPEAT 循环语句), SET(集合定义标识), THEN(与 IF 一起构成如果??那么??语句),TO(与 FOR 构成 FOR 循环),TYPE(类型定义标识),UNTIL(与 REPEAT 一起构成 REPEAT 循环),VAR(变量定义标识),WHILE(循环语句),WITH。

注意: * 所起的文件名不能与保留字相同。 * 在 Turbo Pascal 环境中编写程序代码时,遇到与保留字匹配的字符串,编辑器会自动将整个字符串标为白色,提醒用户这是系统的保留字。 3、标识符 标识符用来标记程序、类型、常数、变量、过程、函数、指令等的名字,必须由英文字母或下划线开头,后面是英文字母、数字、下划线的任意组合。 标识符分为两大类: (1) 标准标识符 (2) 自定义标识符:用户根据自己的需要来命名 标准标识符(共 40 个): 标准常量:false,true,maxint 标准类型:integer,real,char,boolean 标准文件:input,output 标准函数:abs,arctan,chr,cos,eof,eoln,exp,ln,odd,ord,order,round,sin,sqr, sqrt,succ,trunc 标准过程:get,new,pack,page,put,read,readln,reset,rewrite,unpack,write, writeln, dispose 注意: * 注意区分合法与非法的标识符。如 A,B,I,J,_xyz,r2d_4,MIN,X1 等等,均是合法的标识符。而 3X,X-Y,X&Y,X Y 等则不是标识符,或称为非法的标识符。 * Turbo Pascal 不区分英文字母的大小写,认为是同一个标识符。但是,从易读性的角度考虑,SetTheName 或 Set_the_name 作为标识符明显要比 SETTHENAME 易读。因此在编程时要 养成好的习惯,增强代码的可读性。 * 一个标识符的有效长度为 63。 * 不提倡将标准标识符用作自定义标识符。

练习: 1、下面选项中属于非法的用户自定义标识符的是____________。 A、dir B、z12_ C、file D、list

2、下列选项中能够用作用户自定义标识符的是___________。 A、TYPE B、π C、SET D、trust

3、对下面的符号进行分类,哪些是保留字,哪些是标准标识符? Const Do End real in true and char cos case new get text input ord abs then to

第四讲 数据类型

作者:网上收集 文章来源:网上收集 点击数:840 更新时间:2004-11-21 16:45:19

上两节课,我们学习了 Pascal 语言的程序基本结构,在一个程序中,所有的操作都由执行部分来完成,而执行部分又都是由一个个语句组成的。因此,下开始我们要学习 pascal 语言的基本语句,并且在学习过程中逐步学会程序设计的基本方法。 在语句学习之前我们要先了解一些 pascal 语言的基础知识。 在程序的说明部分进行变量说明的时候,不但要指明作为变量名的标识符,而且要指出这个变量的数据类型。例如 var i:integer; 这里,i 是变量名,integer(整型)就是变量 i 的数据类型。 Pascal 中有两类数据类型:预定义数据类型和自定义数据类型。其中预定义数据类型内容非常丰富,又可分为若干种,下面分别介绍。 (1)整型(integer) A、这是 Pascal 中整数的数据类型, 范围-32768~32767。标准标识符 maxint 表示的就是整型值 32767。 例如:123,0,-256,+234 都是合法的整数。1234A,0.01,12.34 都是非法的整数。 B、Turbo Pascal 还支持以下 4 种预定义整型类型,它们的区别在于表示数的范围不同。 名称 类型标识符 数据表示范围 -128~127 0~255

短整型 Shortint 字节型 byte

字型

Word

0~65535 -2147483648~2147483647

长整型 Longint

C、整数的运算符有:+、-、*、div、mod,后三种运算符的优先级高于前两种运算符,整数运算的结果也为整数。 Div(整除):指两数相除所得的商。 Mod(求余):指两数相除所得的余数。因此: 11 17 -4 div 2 = 5, div 3 = 5, div 3 = -1, 11 17 -4 mod 2 = 1 mod 3 = 2 mod 3 = -1

* Turbo Pascal 对 mod 的解释是这样的: A mod B = A-(A div B) * B

* 当两个整数用“/”相除时,结果为实数,只能赋值给实型变量。 (2)实型(real) A、有两种方法表示实数: ① 十进制表示法:12.5,-2.1,0.0 都是合法的,小数点前后都必须有数字。 ② 科学表示法:就是采用指数形式的表示方法。 如:3.4E3 表示 3.4×103;-3.4E-3 表示-3.4×10-3 B、实型可表示最大实数范围为 1.7×1038,最小绝对值为 2.9×10-39。 C、Turbo Pascal 除支持 real 型实数外,还支持下列 4 种实数:单精度型(single)、双精度型(double)、扩展型(extended)及装配十进制型(comp)。

D、整数参与实数者,系统自动将整数转换为实数然后再运算,结果也为实数。 (3)字符型(char) Pascal 中的字符型表示一个字符,用单引号括起来。如’A’、’5’都是合法的字符型数据。 关于字符类型,有以下几点值得注意: * 字符类型数据中的单引号内最多只能有一个字符,超过 1 个的字符串不认为是字符类型,如’reset’不属于字符类型。 * 同一字母的大小写是不同的字符。比如’A’与’a’,它们编码值不同,因此不是同一字符。 * 字符必须用单引号引用。空字符用’’表示。 (4)布尔型(boolean) A、布尔类型的值只有 False 和 True 两个,它们是有序列的,并且 false<true. B、对于关系表达式,都对应一个布尔值,为真则值为 True,否则为 False。例如: 3<5 为 true 20+30>=60 为 false ‘a’=’A’为 false

C、布尔类型主要参与的运算是逻辑运算:and、or、not 等,如: (3<5) and (5<6) 的值为 true not (3<5) 的值为 false

练习: 1、以下选项中是 char 类型常量的是___B____。 A、C B、’xy’ C、’a’ D、”S”

2、如果 a、b 均为整型变量,则表达式:(a mod 10=0) or (a<=10) 的数据类型为_____。

A、数值类型

B、布尔类型

C、字符类型

D、表达式不正确

3、以下______是 pascal 合法的数据。 A、73e4 B、-e5. C、.21 D、1,717,158

4、下列中合法的关系表达式是_________。 A、’a’<99 B、23.5<20 C、12<32 and 56>46 D、5<x<14

5、下列符号________是标识符。 A、2scaa 6、表达式 ( 23 A、0 B、Firsttry div 3 mod C、name-or-hers D、number one

4 ) 的值是____________。 C、3 D、7

B、2

7、设 a,b,c,d,e 均为整型变量,且 a=6,b=15,c=8,d=9,e=4,则表达式 a+b div c*d mod e 的值是________。 A、7 B、-6 C、11 D、2

8、下列中错误的 Pascal 表达式是_________。 A、10e6*3.7 B、7 div 15 C、20 div 6/5.0 D、4.0 div 2

9、以下错误的 pascal 实型数是__________。 A、0.34E1.5 B、2.34E2 C、23E1 D、56.E5

第五讲 常量与变量

作者:网上收集 文章来源:网上收集 点击数:816 更新时间:2004-11-21 16:45:50

一、常量 在程序运行过程中,其值不能被改变的量称为常量。PASCAL 除了 maxint、true、flase 三个标准常量外,用户还可以使用常量定义语句定义新的 常量。 如: const pi=3.1415926; st=’abc’; n=100; t=true; 如下的常量定义是错误的: const a=100; a,b=20; c=100 or 50; 常量 a 定义了两次,a,b=20;应该写成 b=20;c 不能既表示 100 又表示 50。 例 1:

二、变量 变量指在程序执行过程中可以改变值的数据。如游戏"魂斗罗"中玩者命的个 数最初为 3,当你死了一次命减少一,这里命的个数就是一个变量(或者说命的 个数存储在一个存储单元中)。 变量必须先说明后再在程序中使用。 变量有三个要素是:变量名、变量类型、变量值。 如: var r:integer;

c,s:real;

练习: 1、下列属于合法的常量定义的是: A、const B、const C、const D、const x:=0.34 a:integer=1; pi=3.14; bol=bol+1;

2、下列中合法的变量说明是: A、var B、var C、dim D、var r:real; num:200; a=real; i=integer; red,white:integer; i1,i2:integer; red,white:real; 3、写出以下程序的运行结果,并说说此程序的功能。

第六讲 函数与表达式

作者:网上收集 文章来源:网上收集 点击数:1038 更新时间:2004-11-21 16:46:29

一、标准函数 PASCAL 把常用的一些运算定义为系统标准函数。只要在程序中写出某一函数名以及此函数所需要的参数,系统就会自动运算得出结果。例如写 Sqr(2),就能得到结果 4。 PASCAL 提供 17 种标准函数,可分为四类: 1、算术函数

注意: (1)函数自变量和函数值都有类型问题。例如:sqrt(4)的值是实数 2.0 而不是整数 2。 (2)PASCAL 中无幂运算,这对数值计算问题来说是不大方便的。这是 pascal 的一个缺点,但可以用下面公式来求 x 的 n 次方。

用 PASCAL 函数来表示可写成:exp(n*ln(x)) 如:求 2 的 3 次方 ,可写成 exp(3*ln(2)) (3)三角函数的自变量的单位为弧度而不是度。如果想求 Sin30°,应先将 30°化成弧度:30*3.14159/180 然后求函数 sin(30*3.14159/180)的值。 2、转换函数 (1)截尾函数 trunc(x)。将实数 x 的小数部分截去。如 Trunc(6.8)的值为 6。 (2)舍入函数 round(x)。将实数 x 的小数部分四舍五入取整。如 round(7,8)的值为 8;round(-7.8)的值为-8。 3、序号函数、字符函数、前趋函数、后继函数等(ASCII 表) (1)序号函数 ord(x)。将一个字符转换成字符序号的函数。Ord(‘A’)的值为 65。Ord(‘1’)的值为 49。Ord(true)=1;ord(false)=0。 (2)字符函数 chr(x)。求 ASCII 码值为 x 的字符。Chr(48)的值为’0’。Chr(65)的值为’A’。 (3)前趋函数 pred(x)。如 pred(5)=4,pred(‘B’)=’A’。 (4)后继函数 succ(x)。如 succ(‘A’)=’B’,succ(8)=9。 4、逻辑判断函数 odd(x):判断 x 是否奇数。如 x 是奇数,则 odd(x)值为“真”,否则为“假”。 练习一: 1、下列的函数值是整型的是:

A、succ(false)

B、ord(true)

C、chr(23)

D、odd(98)

2、把整数 5 转换为字符’5’的表达式是: A、chr(5)-ord(‘0’) C、chr(5+ord(‘0’)) B、chr(5-ord(‘0’)) D、chr(5+ord(0))

3、下面表达式的结果值为-100 的是: A、trunc(-99.9) C、-round(-99.9)) B、trunc(-100-0.1) D、-round(trunc(-100-0.1))

4、设 x 是实型变量,下列表达式能将 x 四舍五入后保留两位小数的是: A、round(x) C、round(x*100.0)/100 B、round(x)/100 D、round(x*1000.00)/1000.00

5、与代数式 2sin30+cos30 对应的 PASCAL 表达为: A、2sin(30.0)+cos(30.0) B、2*sin(30.0)+cos(30.0) C、2sin(3.14*30.0/180.0+cos(3.14*30.0/180.0)) D、2*sin(3.14*30.0/180.0)+cos(3.14*30.0/180.0) 6、表达式 odd(k) or odd(k+1)的值是: A、True B、False C、k D、k+1

二、表达式 1、定义:表达式是指由常量、变量、函数、括号、集合及运算符联结起来的有意义的式子。如:

-3*sin(x)/8.4 2、运算符:



1+2*3

(1)算术运算符:+、-、*、/、div、mod (2)关系运算符:=,<>,<,>,<=,>=,in (3)逻辑运算符:not ,and ,or (4)集合运算符:+、-、* (5)赋值运算符::= 3、运算级别: (1)同级运算从左到右计算,不同级别运算从高到低运算; (2)括号优先级最高,从内到外逐层降低; (3)not (4)*、/、div、mod、and (5)+、-、or (6)in 例 1:n 为四位数 7341。可用下法分离出它的个、十、百、千位。 7341 mod 10 = 1 100) div 10 = 4 1000) div 1000 = 7 ------------------------(个位数) ------------------------(十位数) ------------------------(千位数) 100 = 3 ------------------------(百位数) (7341 mod (7341 mod 7341 div

例 2:当 a=13 , b=2, c=3 ,d=4, e=2 时,求以下表达式的值。

练习二:

1、代数式

的 PASCAL 表达式是:

A、(a-b)/a+b/a-b+a*b B、(a-b)/(a+b)/(a-b)+ab C、(a-b)/((a+b)/(a-b)+a*b) D、(a-b)/((a+b)/(a-b))+a*b 2、表达式 sqrt(abs(-100)*sqr(round(4.2)))的值是: A、30 B、40 C、30.0 D、40.0

3、下面正确的关系表达式是: A、’t’<’*’ and ‘r’>=’w’

B、not (0<x<1) C、(3.43<8) D、’34’<100 4、表达式 round(sqr(11/3))>sqr(11 div 3)的值是: A、.T. B、.F. C、FALSE D、TRUE mod 4 的值为: or false

5、PASCAL 表达式 ord(not true)+6 A、2 B、3 C、true D、0

6、设 a=6,b=3,c=42.15,d=-8,则表达式(a*trunc(c)-b) mod succ(d) 的值为: A、12 B、-4 C、7 D、4

第七讲 赋值语句与输出语句

作者:网上收集 文章来源:网上收集 点击数:779 更新时间:2004-11-21 16:47:12

一、赋值语句 对程序已经创建的变量,如何取值?通常使用赋值语句来给变量提供数据,它具有计算和赋值的功能,程序中所进行的各种运算,大多数是在赋值语句中实现的。 (1)格式

其中:=称为赋值号 (2)执行过程 计算机先计算赋值号右边表达式的值,然后将表达式的值赋给变量名代表的变量。如:A:=(9*8)-(2-1); A:=A+1; 例 1:下面的程序执行后,变量 b、c、d 的值是多少?

注意: ① “:=”不能与“=”混淆。 ② 赋值号两边的类型应该相同。只有一点可以例外,那就是右边表达式的值为整型时,它可以自动转化成实型后赋给一个实型变量。

③ 被赋值的变量本身可以作为因子参与运算,如:n:=n-1;i:=i+1;s:=s+x; 例 2:写出执行下面的程序后,变量 a、b 的值。

注意:a、b 变量的变化过程如下

通常赋值语句 a:=a+1 起到“计数器”的作用,与之相类似,a:=a+x 起到“累加器”的作用;a:=a*x 起到“累乘器”的作用。 练习一: 1、若要交换变量 A 和 B 之值,则正确的语句组是_________。 A、A:=B;B:=C;C:=A; B、C:=A;A:=B;B:=C; C、A:=B;B:=A; D、C:=A;B:=A;B:=C; 2、已知如下说明: var a,b:integer; c,d:real; 下面赋值语句合法的应是__________。 A、c:=a-b; B、a:=d; C、a:=a*b-c; D、b:=a div c;

3、设 A 为整型变量,Y 为实型变量,下面正确的赋值语句是_________。 A、A=5; 二、输出语句 (1)格式 格式 1:Write(表达式 1,表达式 2,??); 格式 2:writeln<(表达式 1,表达式 2,??)>; (2)功能 计算机执行到某一输出语句时,先计算出输出语句中的每个表达式的值,并将每一个表达式的值一个接一个地输出到屏幕上。 Write 语句与 writeln 语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于,write 语句将其后括号中的表达式一个接一个输出后,没有换行。而 writeln 语句则 B、A:=sqr(Y); C、Y*2:=A; D、Y:=A;

在输出各个表达式的值后换行。

输出为: 123456

输出为: 1234 56 例 3:某仓库 5 月 1 日有粮食 100 吨,5 月 2 日又调进 20 吨,5 月 3 日卖出库存的三分之二,5 月 4 日又调进库存的 3 倍粮食,问该仓库从 5 月 1 日到 5 月 4 日期间每天的粮食分别是 多少吨?(输出每天的库存量) 分析:在这个问题中,主要要描述从 5 月 1 日到 5 月 4 日期间仓库的粮食库存量,且易知它是不断变化的。因此我们可以用一个变量 A 来描述仓库的粮食库存量。 程序可写如下:

(3)输出语句的输出格式 在 PASCAL 程序设计中,数据的输出格式是非常重要的。我们将每一种类型的数据在输出时所占据的列数称为场宽,以下是 Turbo Pascal 对各种数据定义的标准场宽:

从上表中我们可以看出,标准场宽就是实际输出值的宽度,一般来说它不能满足使用者的各种需要,为此,可以由用户自己来定义场宽。 ①单场宽 单场宽的形式: x:n x 表示要输出的项目;n 表示输出 x 时所占的列数,n 应为正整数。 如:write(‘ok!’:8)表示字符串‘ok!’的场宽是 8。 例:设 m 为整型数 2004,ch 为字符‘?’,f 为布尔值 true,此时执行如下: 输出语句: writeln(m:5); writeln(ch:5); writeln(f:5); writeln(‘ok!’:5); 则屏幕显示

②双场宽 双场宽的形式: x:n1:n2 双场宽是用来控制实型数据的输出格式的.其中:x 表示要输出的项目;:n1 表示输出 x 时所占的总列数;:n2 表示小数部分的列数。 如: writeln(-123.45:8:2);

输出的结果为:

例 4:写出以下程序的输出结果:

该程序有 5 个输出语句,每个语句的第一个输出项是按标准场宽来输出的;第二个输出项则是按自定义场宽输出的,其输出结果如下:

练习二: 1、已知实型变量 x=16,整型变量 i=3,布尔型变量 b=true,则执行 pascal 语句 writeln(x:6:3,i:3,b:3);后,结果是_____。 A、16.000 3tru B、16.000 C、16.000 3true D、1 6 3 1 3 true

2、以下程序的运行结果为_________。

3、已知某梯形的上底 A=13,下底 B=18,高 H=9,求它的面积 S。

第八讲 输入语句

作者:网上收集 文章来源:网上收集 点击数:635 更新时间:2004-11-21 16:47:47

在程序中变量获得一个确定的值,固然可以用赋值语句,但是如果需要赋值的变量较多,或变量的值经常变化,则使用本节介绍的 输入语句──读语句,将更为方便。读语句是在程序运行时由用户给变量提供数据的一种很灵活的输入动作,它有两种格式:

1.读语句的一般格式: read(<变量名表>); readln[(<变量名表>)]; 其中变量名表是用逗号隔开的若干个变量名组成的。 功能:读入数据,并依次赋给相应的变量。 说明: ① read 和 readln 是标准过程名,它们是标准标识符。 ② 执行到 read 或 readln 语句时,系统处于等待状态,等待用户从键盘上输入数据,系统根据变量的数据类型的语法要求判断输入 的字符是否合法。如执行 read(a)语句,a 是整型变量,则输入的字符为数字字符时是合法的,当输入结束时,则自动将刚接受的一串数 字字符转换为整数赋给变量 a。 ③ 在输入数值型(整型或实型)数据时,数据间要用空格或回车分隔开各个数据,输入足够个数的数据,否则仍要继续等待输入, 但最后一定要有回车,表示该输入行结束,直到数据足够,该读语句执行结束,程序继续运行。 例 1:设 a、b、c 为整型变量,需将它们的值分别赋以 10,20,30,写出对应下列语句的所有可能输入格式。 Read(a,b,c); 解 根据③,即可列出所有可能输入格式 (a) 10□20□30←┘ (b) 10□20←┘ 30←┘ (c) 10←┘ 20□30←┘ (d) 10←┘

20←┘ 30←┘ 其中“□”表示空格,“←┘”表示回车键。下同。 ④ read 语句与 readln 语句的第一个区别是: read 语句是一个接一个地读数据, 在执行完本 Read 语句( 读完本语句中变量所需的数据)后,下一个读语句接着从该数据输入行中继 续读数据,也就是说,不换行。如: Read(a,b); Read(c,d); Read(e); 如果输入数据行如下: 1□2□3□4□5□6□←┘ 则 a,b,c,d,e 的值分别为 1,2,3,4,5,如果后面无读语句则数据 6 是多余的,这是允许的。 Readln 则不同,在读完本 Readln 语句中变量所需的数据后, 该数据行中剩余的数据多余无用,或者说,在读完本 Readln 语句中变 量所需数据后,一定要读到一个回车,否则多余的数据无用。 例 2:设要达到例 1 同样的目的,但语句改为: readln(a,b);readln(c) 则例 1 中的 4 种输入格式只有(b)(d)是有效的。 ⑤ readln 语句与 read 语句的第二个区别是:read 后一定要有参数表,而 readln 可以不带参数表,即可以没有任何输入项, 只是等 待读入一个换行符(回车)。经常用于暂停程序的运行,直到输入一个回车。 例 3:设有下列语句:

read(a,b,c);readln(d,e);readln;readln(f,g); 其中,所有变量均为整型。再设输入的数据如下: 1□2←┘ 3□4□5□6□7□8←┘ 9□10←┘ 11←┘ 12□13←┘ 列表给出每个变量的值。 分析: 可以假想有一“数据位置指针”,每读一个数据后,指针后移到该数据之后,每执行一个 readln 语句后,指针移到下一个数据行的 开头。 各变量的值如下表所示: ━━━━━━━━━━━━━━━━━━━━━━━━━━ 变量名 a b c d e f g ────────────────────────── 值 1 2 3 4 5 11 12 ────────────────────────── ⑥为了避免可能出现的错误,建议在程序中按下列原则使用读语句: (A)如果没有特殊需要,在一个程序中尽量避免混合使用 read 语句和 readln 语句;

(B)尽量用 readln 语句来输入数据, 一个数据行对应一个 readln 语句; (C)由于执行 read 或 readln 语句时, 系统不会提供任何提示信息,因此,编程时最好在 readln 语句之前加以适当提示,例如: write('Input a,b,c:'); readln(a,b,c); 在执行时,屏幕上显示: Input a,b,c:■ 其中,"■"为光标(后同)。执行 readln 语句后,系统处于待待输入状态, 只有输入了所需数据后才继续往下执行。 练习一: 1、设 a,b,c,d 均为整型变量,有下面的程序段: a:=0;b:=0; read(a,b); readln(c); readln(d); 若从键盘输入: 7←┘ 6□5□4←┘ 3□2□1←┘ 则 a,b,c,d 中的数是__________。 A、7,0,6,3 B、7,6,5,4 C、7,6,3,2

D、7,6,5,3 2、设 A,B,C 为整型变量,并有以下程序段: read(A);readln; readln(B);read(C); writeln(A:2,B:2,C:2) 若运行时输入: 1□2□3←┘ 4□5□6←┘ 7□8□9←┘ 则输出为__________。 A、□1□2□3 B、□1□4□7 C、□1□8□9 3、设有程序: program exma; var ch1,ch2,ch3:char; begin readln(ch1,ch2,ch3); readln(ch1,ch2); readln(ch1); writeln(ch1,ch2,ch3); end. 运行以上程序时,若输入为 abc←┘ def←┘

D、□1□4□5

ghi←┘ 则输出是__________。 A、abc B、gec C、ceg

D、adg

练习二: 1、键盘输入两个数,交换值后输出。 (1)明确问题。 通过键盘输入两个变量 a,b 的值,再将 a,b 的值相交换,然后输出 a,b 的值。如输入后变量 a 的值为 2,变量 b 的值为 5,经过交 换后,输出时 a 的值为 5,b 的值为 2。 (2)分析问题。 如果输入的两个数设为 a,b,在交换前要设定一个变量 c 作为交换时的过渡变量,以防止变量 a 或 b 的值在赋值时丢失。 设计算法如下: (1) 输入 a,b; (2) 交换变量的值 c:=a;a:=b;b:=c; (3) 输出 a,b (4) 运行结果: please input two number: 5 8 after change: 8 5

2、随机产生一个三位自然数,分离出它的百位、十位与个位上的数字,并且输出到屏幕上,每位上的数字之间要用一个空格隔开。

提示: (1)明确问题。随机产生一个三位数,例如产生的三位数是:579,分离的百位、十位与个位上的数字分别为:5、7、9。 (2) 分析问题。 让计算机随机产生一个数字时, 应该先明确这个数字的范围和它的类型。 一个三位自然数, 它在 100~999 之间, 产生 100~999 内随机整数的方法是: trunc(random*900)+100。 假设随机产生的三位数是 x,个位、十位、百位上的数字分别是:a,b,c,则有: a:=x mod 10; b:=(x mod 100) c:=x div 100;

div

10;

设计算法如下: (1) 随机产生一个三位数 x; (2) 输出 x; (3) a:=x mod 10; (4) b:=(x mod 100) div (5) c:=x div 100; (6) 输出 a,b,c

10;

第九讲 综合练习一

作者:网上收集 文章来源:网上收集 点击数:594 更新时间:2004-11-21 16:48:44

1、请输出以下图案:(以文件名 test1.pas 保存) * *** ***** ****** 思考:如果要输出如下图形,程序应如何修改?

2、从键盘输入一个数 x,计算表达式

的值,并在屏幕输出结果。(以文件名 test2.pas 保存)

3、从键盘输入一个三位数字的正整数,反向输出。如输入 365,则输出 563。 (以文件名 test3.pas 保存)

第十讲 程序设计初步-----顺序结构

作者:网上收集 文章来源:网上收集 点击数:521 更新时间:2004-11-21 16:51:20

在计算机上解决某个问题时,要事先制订一个解题计划,为计算机设计好解决问题的具体方法,然后把这个方法分解成计算机能执 行的具体步骤和指令,最后交给计算机完成,这个过程就是程序设计。因此,一个完整的程序设计过程一般经过以下 5 个步骤:

1969 年德克特拉提出了“结构化程序设计”的思想。结构化程序设计主要有 3 个特点: (1)程序必须严格地由 3 种控制结构---------顺序结构、选择结构和循环结构组成,每个控制结构完成一个功能,并严格地只有一个 入口和一个出口。

(2)“自顶向下,逐步求精”的设计步骤。即先把问题分成几个子问题,每个子问题对应一个程序块,然后对每个子问题再加以细化, 分成更小的问题,这样逐步求精,直到能直接用语句或指令编制程序为止。 (3)对数据作进一步的抽象,把数据分成几种不同的基本数据类型来描述数据。 一、顺序结构的程序设计 1、顺序结构

在日常生活中几件事常常是按一定的顺序安排的,如我们早晨的安排一般是: (1)6:00 起床 (2)6:30 吃早餐 (3)7:05 早读 (4)7:35 上课 (5)?? 可以看到以上就是一个顺序的过程,这样编写的程序段就是顺序结构。 这是一种最简单、最基本的结构,它的特点是在这个结构内按由上到下的书写顺序执行,它只有一个入口和一个出口。如程序中 n 个语句: 语句 1; 语句 2; 语句 3; ?? 语句 n; 这便是一个顺序结构的部分,它是结构化程序设计的基础。

2、语句分类 Pascal 语言的语句分为简单语句和构造语句两大类。

(1)简单语句:又称基本语句,是简单到不能再分解的语句; (2)构造语句:由若干语句组成的语句串。 例 1:工人每工作一小时可得工资 80 元,求工作 130 小时的工资。 (1)明确问题。求工作 130 小时的工资,可用以下式子计算: 总工资=工作时间×每小时的工资 (2)分析问题。如果工作时间用 a 表示,每小时的工资用 b 表示,总工资用 s 表示,计算式子为:s=a×b 根据题意,算法可以这样设计: ① 输入工作时间 a,每小时的工次额 b; ② 求出总工资 s=a*b; ③ 输出结果 s。 (3)设定变量的类型。这里使用的变量 a,b,s 都可以设定为整数。 (4)程序编写如下:

(5)将程序编译(Make-Compile)后,执行程序(Run->Run),写下屏幕所看到的输出。

(6)如果将行 7 改为 writeln ( ‘Total wages = ’, w ) 将程序编译(Make-Compile)后,执行程序(Run->Run),写下屏幕所看到的输出。

学生任务一: 试在行6和行7之间加多两程序语句,使程序产生以下的输出。

例 2:已知上底、下底和高,求梯形的面积。 (1)明确问题。求梯形的面积,已知上底、下底和高,由公式得: 梯形面积=(上底+下底)×高÷2 (2)分析问题。如果梯形的上底用 a 表示,下底用 b 表示,高用 h 表示,梯形面 积用 s 表示,用梯形面积公式为:s=(a+b) ×h÷2 根据题意,算法可以这样设计: ① 输入梯形的上底 a,下底 b 和高 h; ② 求出梯形面积 s=(a+b) *h/2; ③ 输出结果 s。 (3)设定变量的类型。这里使用的变量 a、b、h、s 都应设定为实数。 (4)程序编制如下:

学生任务二: 1、某学生的第一次语文测试是 65 分,第二次是 80 分,第三次是 72 分,请计算该同学在三次考试所得的平均分,结果保留两位小数。 2、输入一个时、分、秒,把它转换为一个秒数。

第十一讲 简单的分支结构程序设计

作者:网上收集 文章来源:网上收集 点击数:665 更新时间:2004-11-21 16:52:01

在现实生活中,我们每天都要进行根据实际情况进行选择。例如,原打算明天去公园,但如果明天天气不好,将留在家里看电视。所以也会根据条件进行行为选择。 计算机也会根据不同情况作出各种逻辑判断,进行一定的选择。在这课与下一课中,我们将会发现,我们是通过选择(也称分支)结构语句来实现程序的逻辑判断功能。 一、PASCAL 中的布尔(逻辑)类型 在前面,我们学习了整型(Integer)与实型(Real)。其中 integer 型数据取值范围为-32768 到 32767 之间所有整数。而 real 型数据取值范围为其绝对值在 10-38 到 1038 之间 的所有实数。它们都是数值型的(即值都为数)。布尔型(Boolean)是一种数据的类型,这种类型只有两种值,即"真"与"假"。 1、 布尔常量 在 Pascal 语言中"真"用 True 表示,"假"用 False 表示。所以布尔类型只有 True 与 False 两个常量。 2、 布尔变量(BOOLEAN) 如果我们将某些变量说明成布尔型,那么这些变量就是布尔变量,它们只能用于存放布尔值(True 或 False)。 例如,VAR A,B:BOOLEAN; 3、 布尔类型是顺序类型 由于这种类型只有两个常量,Pascal 语言中规定 true 的序号为 1,false 的序号为 0。若某种类型的常量是有限的,那么这种类型的常量通常都有一个序号,我们称这种类型为 顺序类型。如前面我们学过的整型(integer),以及后面要学到的字符型(char)都是顺序类型。 4、 布尔类型的输入与输出

a)输出 VAR A,B:BOOLEAN; BEGIN A:=TRUE;B:=FALSE; WRITELN(A,B); END. TRUEFALSE b)布尔类型变量不能直接用读语句输入 布尔类型变量不能通过读语句给它们提供值。事实上,我们可以通过间接方式对布尔变量进行值的输入。 例如,以下程序是错误的: var a,b,c:Boolean; begin readln(a,b,c); {错误语句} writeln(a,b,c); end. 二、关系表达式与布尔表达式 1、什么是关系表达式 用小括号、>、<、>=、<=、=、<>将两个算术表达式连接起来的式子就称为关系表达式(比较式)。 如:3+7>8,x+y<10,2*7<=13 等都是关系表达式。 2、关系表达式的值 很显然,这几个关系表达式中第一个是正确的,第三个是错误的,而第二个表达式可能是对的,也可能是错的(要看 x 和 y 的值而定)。所以我们很容易发现,这些表达式要么成 立,要么不成立,即它的值是"对"的或"不对"的(或者说,是"真"的或"假"的),即关系表达式的值为布尔值。表示该比较式两端式子的大小关系是否成立。如 3+2>6 是错的,故它

的值为 FALSE。同样,45>=32 是对的,故该表达式的值为 true。 关系表达式用于表示一个命题。如:"m为偶数"可表示为:m mod 2=0。 "n为正数"可表示为:n>0。 3.布尔运算及布尔表达式 为了表示更复杂的命题,Pascal 还引入三种逻辑运算符:not、and、or(还有一个是 XOR,称为“异或”)。它们分别相当于数学上"非"、"且"和"或"的意义。 这三个运算符的运算对象为布尔量,其中 not 为单目运算,只有一个运算对象,and 与 or 为双目运算,有两个运算对象。它们的运算真值表如下:

a True True False False

b True False True False

NOT a False False True True

a AND b True False False False

a OR b True True True False

a XOR b False True True False

于是,对于一个关系表达式,或多个关系表达式用布尔运算符连接起来的式子就称为布尔表达式。布尔表达式的值也为布尔值。 如果一个表达式里出现两个或两个以上的运算符, 则必须规定它们的运算次序。pascal 规定: ①表达式中相同优先级的运算符,按从左到右顺序计算; ②表达式中不同优先级的运算符,按从高到低顺序计算; ③括号优先级最高,从内到外逐层降低; 对于一个复杂的表达式可能同时包含算术运算、关系运算和逻辑运算以及函数运算。运算的优先顺序为:括号函数、not、*、/、div、mod、and、+、-、or、xor 关系运算。 对于复杂的命题,我们可以用布尔表达式来表示。例如,命题:"m,n 都是偶数或都是奇数"可表示

(m mod 2=0)and(n mod 2=0) or (m mod 2=1)and(n mod 2=1) 练习一:若 a=True,b=False,x=7,y=12,m=3,n=35,求下列布尔表达式的值。 a AND NOT (m>n) AND (x<y-m) OR (a OR b) 三、简单的 IF 语句 1、格式 Ⅰ、IF <布尔表达式>THEN 语句; Ⅱ、IF <布尔表达式>THEN 语句1 ELSE 语句2; 2、功能 Ⅰ、执行 IF 语句时,先计算<布尔表达式>的值,若为 TRUE 则执行语句,否则不执行任何操作。 Ⅱ、执行 IF 语句时,先计算<布尔表达式>的值,若为 TRUE 则执行语句1,否则执行语句2; 3、示例 1)信和超市里卖电池,每个电池8角钱,若数量超过10个,则可打 7.5 折。 Program ex2; Var Num:integer;Price,s:real; Begin readln(Num); Price:=0.8; If Num>10 then Price:=Price*0.75; s:=Num*Price; Writeln('s=',s:0:2); Readln; (注意Ⅱ型 IF 语句中语句1后无";"号)

End. 2)输入一个整数a,判断是否为偶数。(是输出"Yys"否则输出"No")。 Program ex1; Var a:integer; Begin readln(a); If (a mod 2 =0)then writeln('yes') Else writeln('no'); End. 思考:本题有没有其它方法实现? 练习二: 1、输入一个数,要求不使用绝对值函数(即 ABS 函数),输出 x 的绝对值。 2、南海车站行李托运收费标准是:10 公斤或 10 公斤以下,收费 2.5 元,超过 10 公斤的行李,按每超过 1 公斤增加 1.5 元进行收费。 试编一程序,输入行李的重量,算出托运费。

第十二讲 IF 语句的嵌套

作者:网上收集 文章来源:网上收集 点击数:909 更新时间:2004-11-21 16:52:45

复习: (1)if 语句格式:

(2)如果 then 子句或 else 子句包含多条语句时,必须用 begin 与 end 括起来,使之成为一条复合语句。如:将输入的两个非负实数中较大的放在 max 里,小的放在 min 里,并输出。

一、IF 语句的嵌套 条件语句中的语句 1 或语句 2 原则上说可以是任何语句,当然也可以是条件语句。当语句 1 或语句 2 是条件语句时,称为条件语句嵌套。形成嵌套的重要目的是为了解决较为复 杂的,多种条件出现的一些问题。 嵌套情况可以分为二种:一是语句 1 中包含 if 语句,二是语句 2 包含 if 语句。下面就分别来讨论这两种情况下怎么使用条件语句。 (1)if 语句嵌套在 then 子句中。 一般形式:

(2)if 语句嵌套在 else 子句中。

对于条件语句的嵌套,无论多复杂,只要注意采用缩进式格式书写程序,if、then 和 else 相互配对,适当使用复合语句形式,即增加语句括号,就能顺利解决问题。 例1 计算下列函数

分析:根据输入的 x 值,先分成 x>0 与 x≤0 两种情况,然后对于情况 x≤0,再区分 x 是小于 0,还是等于 0。 源程序如下:

显然,以上的程序中,在 then 子句中嵌套了一个Ⅱ型 if 语句。当然程序也可以写成如下形式:

但是对于本题,下面的程序是不对的。

明显,从此人的程序书写格式可以看出,他想让 else 与第一个 if 配对,而事实上,这是错的。因为 pascal 规定:else 与它上面的距它最近的 then 配对,因此以上程序段的逻 辑意义就与题义不符。 要使上程序段中 esle 与第一个 then 配对,应将程序段修改为:



例 2:输入三角形的三边,判断它是否是直角三角形。 分析: (1)先判断用户输入的数据是否能够构成三角形; (a>0) and (b>0) and (c>0) and (a+b>c) and (b+c>a) and (c+a>b)

(2)再判断它是不是直角三角形。 (a*a+b*b=c*c) or (b*b+c*c=a*a) or (c*c+b*b=a*a)

练习: 从键盘输入三个数 a,b,c,在屏幕输出最大者。 (1)用不嵌套的 if 语句; (2)用嵌套的 if 语句。

第十三讲 case 语句

作者:网上收集 文章来源:网上收集 点击数:1340 更新时间:2004-11-21 17:03:02

上面我们知道可以用嵌套的 if 语句实现多分支的选择结构。但是如果分支越来越多时,用嵌套的 if 语句实现多分支就显得繁杂。 当多分支选择的各个条件由同一个表达式的不同结果值决定时,可以 case 语句实现。它的选择过程,很象一个多路开关,即由 case 语句的选择表达式的值,决定切换至哪一语 句去工作。因此在分支结构程序设计中,它是一种强有力的手段。在实现多路径分支控制时,用 case 对某些问题的处理和设计,比如用 if 语句写程序具有更简洁、清晰之感。 (一)、情况语句的一般形式:

case 表达式

of

常数表 1:语句 1; 常数表 2:语句 2; ?? 常数表 n:语句 n [else 语句 n+1;]

end;
其中 case、of、end 是 Pascal 的保留字, 表达式的值必须是顺序类型,它可以是整型、布尔型及以后学习的字符型、枚举型和子界型。 常数表是一串用逗号隔开的与表达式类型一致的常量序列。语句可以是任何语句,包括复合语句和空语句。 (二)、case 语句的执行过程 先计算表达式的值,如果它的值等于某一个常量,则执行该情况常量后面的语句,在执行完语句后,跳到 case 语句的末尾 end 处。 例 1:某幼儿园只收 2 至 6 岁的小孩。2~3 岁入小班,4 岁入中班,5~6 岁入大班。从键盘输入年龄,在屏幕输出入什么班。

例 2:输入两个数值(均不为零)及一个算术运算符,输出其运算的结果。 分析:算术运算符有四种情况(加、减、乘、除),为了方便判断,应根据输入的算术运算符分四种情况处理。

练习: 1、根据学生的成绩给予相应的等级,对应关系如下: 90--100 80--89 60--79 60 以下 A B C D

提示: (1)请尝试用 case 语句完成。 (2)分四种情况进行处理(x 表示成绩,dj 表示等级),如:

2、 判断 2004 年每个月份的天数。 提示:从键盘输入月份,计算该月的天数,在屏幕输出天数。

第十五讲 数组

作者:网上收集 文章来源:网上收集 点击数:436 更新时间:2004-11-21 17:04:46

1.数组的定义 数组是程序中最常用的结构数据类型,用来描述由固定数目的同一类型的元素组成的数据结构。数组的每个元素和下标相关联,根据下标指示数组的元素。数组的存储方式为按 行存储,在编译阶段,计算机根据数组的类型说明,确定其存储空间的大小。数组可以是任何顺序类型。 数组的定义形式: array [<下标类型 1>,??<下标类型 n>] of <元素类型> 其中 n 称为数组的维数,每维的下标类型必须是一个顺序类型,通常为子界类型或枚举类型,其作用是指定数组下标的编制方式和下标取值范围。 例如: type color=(red,yellow,blue); sample1=array [1..10]of integer;{有 10 个元素的一维数组} sample2=arrayp[1..5,1..5]of real;{有 25 个元素的二维数组,依次按[1,1]??,[1,5],[2,1]??,[2,5],??[5,1],??[5,5]}

1.数组的使用 当数组的元素类型为简单类型时,其下标变量和简单类型变量一样使用。例如: a[50]:=50; a[20]:=a[5]; 一个数组,下标的起始值和终止值是在类型定义中给定的,不能在程序执行中再通过其他途径来改变,所以数组元素的个数在程序运行期间是固定不变的。数组变量作为整体仅 允许同类型数组之间的赋值运算。 例如:var x,y:array[1..10]of integer;

x:=y 例:读入 5 个学生的学号和成绩,计算他们的平均分,若比平均分高 10 分的等第为 A,若比平均分高小于 10 分的等地为 B,若低于平均分,则等第为 C,输出他们的成绩和等第。 program sample7d1(input,output); const n=5; type no=array[1..n] of integer; s=array[1..n]of real; var i:integer; k:real; num:no; score:s; begin k:=0; for i:=1 to n do begin readln(num[i],score[i]); k:=k+score[i]; end; k:=k/n; for i:=1 to n do begin write(num[i],score[i]); if (score[i]-k)>=10 then writeln('A') else if((score[i]-k)<10)and((score[i]-k)>0) then writeln('B') else writeln('C');

end; end. 7.2 字符串 为了使程序能够处理文字信息,Turbo Pascal 特别引入了字符串类型,其值表示一个具有可变长度的字符序列。字符串类型定义形式为: strign[n]或者 string 其中正整数 n(1<=n<=255)表示构成字符串的字符最多个数,即通常所说的字符串最大长度。而字符串的实际长度决定程序运行时的实际字符个数,可以由函数 length 返回。若 字符串说明中没有指定长度,缺省值为 255。 字符串类型定义字符串连接操作‘+’,是将两个字符串连接成新字符串。连接操作允许字符串类型和字符串类型混合运用。 字符串常量可以通过常量说明语句 const 字符串常量名:string[n]='字符串'; 规定其常量的串长 n,并赋初值。例如:const head:string[7]='zhoufei'; Turbo Pascal 还提供了不少预定义函数和过程: (1)字符串函数

函数名 1 2 3 4 concat copy legth pos string string string string

自变量及类型 连接字符串序列 返回串 s 的一个子串 返回串 s 的动态长度 返回子串 substr 在串 s 中的起始位置

意义 string string

结果类型

integer byte

(1)字符串过程

过程名

自变量及类型

意义

1 2 3 4

delete insert str val

var s,source:string;index,count:integer var s:string;index:integer; var x[:width[:Decimals]];s:string var s:string;code:integer

从串 S 中删除一个子串 在串 S 中插入一个指定子串 把一数值转换成相应的字符串表示 把一字符串转换成相应的数值

例:字符串函数调用示例 program samplefun; const tur='turbo'; pas='pascal'; var st:string[60]; p:byte; begin st:=concat(tur,pas,'is better than','stand',pas,'.'); writeln(st); writeln(length(st)); st:=copy(st,29,15); writeln(st); p:=pos(pas,st); writeln(p); p:=pos(tur,st); writeln(p); end. 例:字符串过程调用示例

program guocheng; const typedstring:string='turbo pascal is better than standard pascal.'; total:real=388.4; var totalstring:string[60]; integervalue:integer; realvalue:real; status:integer; begin delete(typedstring,13,40); writeln(typedstring); insert('using',typedstring,1); writeln(typedstring); str(total:8:2,totalstring); writeln(totalstring); str(total,totalstring); writeln(totalstring); val('-33',integervalue,status); writeln(integervalue,'':2,status); val('-33.99',realvalue,status); writeln(realvalue:6:2,'':2,status); end.

第十六讲 过程与函数

作者:网上收集 文章来源:网上收集 点击数:417 更新时间:2004-11-21 17:07:20

7.1 函数 如果一个子程序执行后能够返回其结果制,那么它就可以用于表达式中,称这种子程序为函数,这种语句序列的定义称为函数说明。函数说明形式如下: function begin 语句 1; 语句 2; ?? 语句 n end 函数返回一个函数值,过程则能完成一系列各种操作。函数的调用方式出现在表达式中,而过程调用是一句独立的语句。 例:计算|X|的函数 function zhoufei(x:real):real; var z:integer; begin if x>=0 then z:=x else z:=-x zhoufei:=z; 函数名(形式参数表):函数类型; 说明部分;

end; 函数说明第一行为函数首部。它指明函数名、函数形参信息和函数值的数据类型。如上面求 x 绝对值的函数说明,函数名是 zhoufei;它有一个值参数 X 为实型;函数值的数据 类型为实型。Turbo Pascal 规定一个函数只能求出一个简单值,所以函数值类型只能是任何非结构类型。 除函数首部和过程首部的句法略有差别外,函数体和过程体完全相同。函数体中至少要有一条语句对函数名赋值。如函数 zhoufei 中有语句“power:=z”。函数的每次求值至 少要执行这样的一条语句,为次计算求得一个值。返回时就把这个值带调用的地方。 7.2 过程 给某个语句序列组成的子程序赋于一个适当的名字。程序中凡是需要出现这个语句序列的地方,可以简单的写上子程序的名字。这种完成一个操作的子程序称为过程;子程序的 定义称为过程说明。 过程说明由过程首部和过程体组成,其形式如下: procedure 过程名(形式参数表);-------过程首部 说明部分; begin 执行语句; ?? end; 例 输出两个数中最大值的过程 procedure largest(a,b:integer); begin if a>b then writeln(a) else writeln(b); end. 上面 largest 过程由两个类型为整型的形式参数:a,b,你向过程传入的两个需要比较大小的数。

7.3

形参和实参 子程序调用(过程调用或函数调用)的执行顺序分为以下几步: 实参和形参结合——〉执行子程序——〉返回调用处继续执行 子程序说明的形式参数表对子程序体直接引用的变量进行说明,详细指明这些参数的类别、数据类型要求和参数的个数。子程序被调用时必须为它的每个形参提供一个实参,按

参数的位置顺序一一对应,每个实参必须满足对应形参的要求 Turbo Pascal 子程序形参有四类: 1.值参数 形式参数表中前面没有 var,后有类型的参数。它类似过程和函数的局部变量,仅为过程和函数的执行提供初值而不影响调用时实际参数的值。在调用过程或应用函数时,值参 数所对应的实际参数必须是表达式,而且它的值不能使文件类型或包括文件类型的值。实参必须和形参赋值相容。 2.变量参数 形式参数表中前面有 var 后由类型的参数。如果需要子程序向调用程序返回值时,应采用变量参数。变量参数要求它的实参是和它同一类型的变量。因为在子程序执行时,遇到 对相应形参的引用式定值,就是对相应实参的引用式定值,即对形参的任何操作就是对实参本身的操作。 3.无类型变量参数 形式参数表中前面有 var 而后面没有类型的参数。 形参是无类型变量, 对应的实参允许为任意类型的变量, 但要在子程序中设置的强制类型转换(类型名(无类型变量参数名) ) , 将无类型变量参数改变为相应类型。 4.子程序参数 用过程首部或函数首部作为形式参数。 7.4 标识符的作用域

1.全局变量和它的作用域 全局变量是指在程序开头的说明部分定义和说明的量。它的作用域分为两种情况:

(1)在全局变量和局部变量不同名时,其作用域是整个程序。 (2)在全局变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域。 2.局部变量和它的作用域 凡是在子程序内部使用的变量,必须在子程序中加入说明。这种在子程序内部说明的变量称为局部变量。局部变量的作用域是其所在的子程序。形式参数也只能在子程序中有效。 因此也属于局部变量。局部变量的作用域分为两种情况: (1)当外层过程序的局部变量名和嵌套过程中的局部变量不同名时,外层过程的局部变量作用域包含嵌套过琛。 (2)当外层过程的局部变量名和嵌套过程内的局部变量名同名时,外层局部变量名的作用域不包含此过程。

第十七讲 集合与记录

作者:网上收集 文章来源:网上收集 点击数:419 更新时间:2004-11-21 17:08:28

8.1

集合 以已知序数类型值的集合为值,所构成的类型是集合类型,称已知序数类型为基类型。集合类型的定义形式为: 集合类型名=set of 基类型

限定基类型为枚举类型、字符型、布尔型以及它们的子界和整型子界。由于基类型中不能超过 256 个可能值,且它们的序数值应在 0..255 之间,因此基类型不能是短整型、整 型、长整型。 表示一个集合值的最通用的方法是逐个枚举集合的元素。下面是集合值标记的例子: [3,9,15,20] {由 3,9,15,20 组成的集合} [ ] {空集} ]{由字符 l,m,n,o,p,z 组成的集合} ['l'..'p','z'

两个相连的集合对象之间,可以通过下列运算符进行运算 集合运算符: + 产生一个包含两个集合元素的集合 * 产生一个只包含两个集合元素公共元素的集合

- 产生一个包含所有属于第一个集合、但不属于第二个机和的元素的集合

例如:[A,B,C]+[D]等于[A,B,C,D] [A,B,C]*[A]等于[A] [A,B,C]-[A]等于[B,C] 关系运算符 = 检查两个集合所包含的元素相同 <> 检查两个集合不相等 <= 检查第一个集合中的元素都在第二个集合中出现 >= 检查第一个集合中的元素包含第二个集合中的所有元素 in 检查集合基类型的一个元素属于集合

例如:[A,B,C]=[A,B,C]

等于 true

[A,B,C]<>[C,B,A] 8.2 记录

等于 FALSE

记录是描述同一对象的一组类型可能不同的数据的集合。使用记录类型实现了数据逻辑关系和存放形式上的一致。定义记录类型的一般形式 记录类型名=record 域名 1:类型 1; 域名 2:类型 2; ?? 域名 m:类型 m; end; 例如:表示学生信息的记录定义 type stype=record name:string[20]; number:integer; sex:(male,female); class:1..20 address:string end; 域为记录类型的元素。记录的每个域都有名称,不同域的数据类型可以各不相同,这一点是数组所不能做到的。引用记录变量的元素采用以下标记法: (1)直接引用,其形式为 记录变量名.域名 例如:var str1,str2:stype;

则 str1.name 表示学生 str1 的姓名,str2.sex 表示学生 str2 的性别。 (2)使用 with 开域语句,其形式为 with 记录变量名 do 语句 在 with 语句中,引用记录变量名不再冠以记录变量名,以简化对记录中域的引用写法。例如描述 100 个学生的数据信息,引入元素类型为 stype 的数组 students。 var students:array[1..100]of stype; number_of_boy,number_of _girl,k:integer: 例如下面是一段统计一个班级中男生人数和女生人数的程序。 begin number_of_boy:=0;number_of_girl:=0; for k:=1 to 100 do with student[k] do if sex=male then number_of_boy:=number_of_boy+1 else number_of_girl:=number_of_girl+1 end; with 语句的嵌套结构的一般形式: with <记录变量名 1> do with <记录变量名 2> do ?? with <记录变量名 n> <语句>; 使用 with 嵌套结构时,with 的嵌套顺序必须和所打开的记录的嵌套顺序一致,以就是说外层 with 打开外层记录,内层 with 打开内层记录。上面的嵌套格式也可以简写为: with <记录变量名 1,记录变量名 2,??,记录变量名 n> do <语句>; 若记录是由一部分固定不变和另一部分变化部分是随固定部分中的某个数据项的具体取值而定的数据项所组成的称为记录变体。带记录变体的记录类型定义有以下形式: do

type <类型标识符>=record <域名 1>:<类型 1>; <域名 2>:<类型 2>; ?? <域名 n-1>:<类型 n-1>; case <标志域>:<类型 n> of <常量表 1>:<域表 1>; <常量表 2>:<域表 2>; ?? <常量表 m>:<域表 m>; end; 例:重新定义描述学生信息的记录类型 stype,对于大专生,不需要增加其他信息,对于本科生,增加专业信息。 type stype=record name:string[20]; number:integer; sex:(male,female); class:1..20 address:string case studtype:(s,u) of s:( ); u:(major:string); end;

第十八讲 指针

作者:网上收集 文章来源:网上收集 点击数:379 更新时间:2004-11-21 17:09:11

9.1

指针的动态变量

1.定义指针类型 在 Turbo Pascal 中,指针变量中存放的某个存储单元的地址,即指针变量指向某个存储单元。一个指针变量仅能指向某一种类型的存储单元,这种数据类型是在指针类型的定义 中确定的,称为指针类型的基类型。指针类型定义如下: 类型名=^基类型名; 例如:type q=^integer; var a,b,c:q; 说明 q 是一指向整型存储单元的指针类型,其中"^"为指针符。a,b,c 均定义为指针变量,分别可以指向一个整型存储单元。 上例也可定义为: var a,b,c:^integer; 指针也可以指向有结构的存储单元。 例如:type person=record name:string[10]; sex:(male,female); age:20..70 end; var pt:^person; pt 为指向记录类型 person 闹刚氡淞俊?/P>

2.动态变量 应用一个指针指向的动态存储单元即动态变量的形式如下: 指针变量名^ 例如:p^、q^、r^ 指针变量 p 和它所指向的动态变量^p 之间有如下关系: P->P' 以下语句把整数 5 存放到 p 所指向的动态变量 p^ 中去: p^:=5; 以下语句把 p 所指向的 p^中的值赋给整型变量 i: i:=p^; 如果指针变量 p 并未指向任何存储单元,则可用下列赋值语句: p:=nil; 其中 nil 是 Turbo Pascal 保留字,表示“空”,相当于 C 里面的 null

9.2

对动态变量的操作 在 Turob Pascal 程序中,动态变量不能由 var 直接定义而是通过调用标准过程 new 建立的。过程形式为: new(指针变量名); 如果有下列变量定义语句: var p:^integer; 仅仅说明了 p 是一个指向整型变量单元的指针变量,但这个整型单元并不存在,在指针变量 p 中还没有具体的地址值。在程序中必须通过过程调用语句:new(p);才在内存中分配

了一个整型变量单元,并把这个单元的地址放在变量 p 中,一个指针变量只能存放一个地址。在同一时间内一个指针只能指向一个变量单元。当程序再次执行 new(p)时,又在内存中 新建立了一个整型变量单元,并把新单元的地址存放在 p 中,从而丢失了旧的变量单元的地址。

为了节省内存空间,对于一些已经不使用的现有动态变量,应该使用标准过程 dispose 予以释放。过程形式为:dispose(指针变量名);为 new(指针变量名)的逆过程,其作用是 释放由指针变量所指向的动态变量的存储单元。例如在用了 new(p)后在调用 dispose(p),则指针 p 所指向的动态变量被撤销,内存空间还给系统,这时 p 的值为 nil。 例:输入两个数,要求先打印大数后打印小数的方式输出,用动态变量做。 program dongtai; type intepter=^integer; var p1,p2:intepter; procedure swap(var,q1,q2:intepter); var p:integer; begin p:=q1;q1:=q2;q2:=p; end; begin new(p1);new(p2); writeln('input 2 data: ');readln(p1^,p2^); if p1^ end. writeln('output 2 data: ',p1^:4,p2^:$);

第十九讲 文件的操作

作者:网上收集 文章来源:网上收集 点击数:356 更新时间:2004-11-21 17:10:00

类型文件 按数据的二进制代码形式存放时的文件称为类型文件。如果再按照组成类型文件的元素数据结构分,又可以分为有类型文件和无类型文件。其定义为: type 类型名=file of 基类型;{有类型文件} 类型名=file; {无类型文件} 例如:var f:file of integer; 说明 f 为名的变量对应文件将用于存放整数。 var g:file; 说明 g 为名的变量对应文件的数据无任何规定。 Turbo Pascal 有关类型文件的函数和过程 (1)assign 过程 形式:assign(f,str); 功能:将文件名字符串 str 赋给文件变量 f,程序对文件变量 f 的操作代替对文件 str 的操作。 (2)rewrite 过程 形式:rewrite(f); 功能:建立并打开一个新的允许写磁盘文件,其文件名必须先由 assign 过程赋给变量 f。这时,指向文件元素的指针指向第一个元素,rewrite 过程所建立的文件为空文件。

(3)reset 过程 形式:reset(f); 功能:打开一个已经存在的磁盘文件,其文件名必须先由 assign 过程赋给变量 f,该文件只能读,指向文件元素的指针指向第一个元素。 (4)read 过程 形式:read(f,var 表); 功能:从磁盘文件 f 中,将数据依次读到 var 表表示的各个变量中。 (5)write 过程 形式:write(f,var 表); 功能:将 var 表所表示的各个变量的值依次写到磁盘文件 f 上。 (6)close 过程 形式:close(f); 功能:关闭和 f 关联的磁盘文件,在写操作时自动产生一个文件结束标志。 (7)seek 过程 形式:seek(f,n); 功能:把文件指针移到 f 指明文件的第 n 个元素。 (8)eof 函数 形式:eof(f); 功能:若文件指向文件尾,则返回 true,否则返回 false。 对有类型文件的写操作步骤为: assign(f,str); rewrite(f); write(f,var 表);

close(f); 对有类型文件的读操作步骤为: assign(f,str); reset(f); read(f,var 表); close(f); 例:在磁盘上建立一个 1~50 的平方数的数据文件 zhoufei.dat。要求以一个数,这个数的平方数的格式写入。 program zhoufei; var f:file of integer; i:integer; begin assign(f,'zhoufei.dat'); rewrite(f); for i:=1 to 50 do write(f,i,sqr(i)); close(f) end. 文本文件

文本文件的内容有 ASCII 字符集中的字符组成,因此文本文件也称 ASCII 码文件,它可以用 DOS 中的 type 命令列出内容。文本文件具体是由一系列行组成,每一行可以包括 0 个或多 个字符型成分,并以也行结束符结尾,文本文件类型 TXT 和类型文件 file of char 区别在于后者不包含行结束符。 文本文件和类型文件在读写上的差别在于前者只能按次序顺序读写,而后者可以不按照次序读写。适用文本文件的函数和过程除了用于类型文件操作的过程和函数外主要还有: (1)readln 过程 形式:readln(f,var 表);或 readln(f);

功能:从磁盘文件 f 中,将数据依次读到 var 表表示的各变量中(其中 readln(f)只读数据),并将文件指针移到行结束符后,就是下一行开头。 (2)writeln 过程 形式:writeln(f,var 表)或 writeln(f); 功能:将 var 表所表示的各个变量的值依次写到磁盘文件 f 上去(writeln(f)不写值),然后再写一个行结束符。 (3)append 过程 形式:append(f); 功能:打开一个已经存在的磁盘文件,其文件名必须和 assign 过程中的变量名 f 相对应,该文件只能写,此时文件指针指向文件尾。 (4)eoln 函数 形式:eoln(f); 功能:若文件指针指向行结束符或文件结束符,则返回 true,否则返回 false。 对文本文件的写操作步骤: assign(f,str); rewrite(f); close(f); 对文本文件的读操作步骤: assign(f,str); reset(f); readln(f,var 表);或 readln(f); close(f); 例:随机产生 30 个随机整数存放于文本文件 zhoufei.txt 中 program zhoufei; const n=30; 或 append(f); write(f,var 表);或 writeln(f);

var ra:text; i:integer; begin randomize; assign(ra,'zhoufei,txt'); rewrite(ra); for i:=1 to n do writeln(ra,random(100)); close(ra) end.

Pascal 的多种退出语句用法

作者:网上收集 文章来源:网上收集 点击数:468 更新时间:2004-11-21 17:11:28

break 是用来退出其所在的循环语句 即: 不论在任何一个循环语句中 执行了 break 的话, 马上退出这个语句。 相当于 : goto 这一层循环语句 最末尾一句的下一句。 例如:var i : integer; begin for i := 1 to 10 do begin {1} writeln(i); break; writeln(i+1); end; readln end. 执行结果 : 1 可见 第一次循环 时 , 执行了{1}句 后 , 执行 break ,然后马上退出了这个 for 语句。 注意 : 以上两个语句 只 对 它们所在的 那层循环语句 起作用,也就是说 : 如果有多个 循环语句 相嵌套, 其中 某一层 执行了 continue / break 语句, 它们并不能影响上 面几层的循环语句。 exit 是退出当前程序块; 即 : 在任何子程序 中执行 exit , 那么 将退出 这个子程序;

如果是在 主程序中执行 exit , 那么将退出整个程序。 相当于 : goto 这个程序块 的 末尾 的 end 例如 : 试除法判断素数时,一旦整除,就把函数值赋为 false ,然后 exit; 注意 : 类似上面的 , exit 也是只对当前 这一个 子程序产生作用,如果多重嵌套子程序 , 那么其中某个子程序执行了 exit 以后,将返回到 调用它的那个语句 的下一个语句。 halt : 没什么好说的,退出整个程序,Game Over. 例如 : 搜索时, 一旦找到一个解,就打印,然后执行 halt,退出整个程序。使用 exit , halt 应该注意的地方: 要注意所有可能会退出 子程序或主程序 的地方 均要妥善处理好善后工作,比如 文件是否关闭 ,输出是否完整等。最后说一句 , 使用这些语句 使得程序结构不止有一个出口, 破坏了结构化程序设计的 标准控制结构 , 使程序难以调试 (但是往往便于编写),应尽量避免使用,因为它们完全可以用其它语句代替,所以,除非使用这些语句 能给 编写程 序 带来 较大的方便,且可读性不受到影响,才值得一用.

小议竞赛的准备和考试技巧

作者:大榕树编程世? 文章来源:大榕树编程世界 点击数:604 更新时间:2004-11-21 17:15:03

1、良好的心态。无论竞赛多么重要,都不要在考试的时候考虑考试之前或以后的事,这很重要?? 2、充足的睡眠和营养。竞赛之前睡好觉,吃好饭,多吃甜食(据我们老师说在吃甜食后 15 分钟和 2 小时会各出现一次血糖高峰,会有比较好的竞技状态)。还有,宁可撒尿也不要 口渴??口渴会严重影响思路??而尿素有兴奋作用,有利无害?? 3、正确的时间安排。一般来说应该先想完所有的题再开始做,但有的题想不出来的时候一定要给想出来的题留出时间。 4、算法的学习。一般的 DFS/BFS、贪心、各种 DP、二分法、排序、lr 论文中的各种奇特算法、最短路、最长路、图的 DFS/BFS、最大匹配,最大最小匹配、最佳匹配、差分限制系统、 最长不 xx 子序列、高斯消元、数论算法?? 5、数据结构的学习。Hash、并查集、邻接表、边表、堆、树状数组和线段树及它们的多维形式、链表、单词查找树?? 6、关于混分:超时的搜索/DP 往往能比错误的贪心得到更多的分。 7、数学很重要。比如母函数?? 8、专用的方法胜于通用的方法。 9、好的题目往往不能直接用经典算法解决。

10、真正难题的标程往往很短。 11、如果 n 很大,用汇编写的 O(n^2)的程序绝对不如用 QB 写的 O(n)的程序快。 12、如果 n 很小,利用压缩存储提高速度的 O(n^2)的算法有可能比一般的 O(n)算法快。 13、如果一个数学问题很复杂,那么看结果找规律有可能比数学推导快。 14、不要总把 logn 忽略掉。 15、即使是多项式算法,有时也可以加入很有效的剪枝。 16、做一道好题胜过做 n 道烂题,但如果不做烂题,可能会影响做好题的速度。

信息学分区联赛复赛备赛建议

作者:大榕树编程世? 文章来源:大榕树编程世界 点击数:385 更新时间:2004-11-21 17:16:02

成功的要素没有靠机遇和取巧(遇到已做过的题或直接抄写示例)成功的任何可能,只有靠勤奋+智慧

基础(数据结构和算法知识+编程技术)+良好的心理素质(沉稳+爆发力)+悟性(在扎实的基础上的灵感和悟顿) 复习 1、看书、补充知识 2、作题(家中做题专找“吃不准”的题目,并把问题拿到集训队里来讨论) 3、总结已做成功的试题,进行一般题形和一般对应算法的“归类”,构建知识网络 竞赛解题分析的思维过程(一般在 30 分钟以内) 机理分析法→统计分析法(构造部分解,寻找数学规律)→有无比较合适的贪心策略→用搜索创关 数据结构 1、并查集(发展趋势:一般并查集→计算并查集中元素的相对位置→?。一般采用树结构,并进行路径压缩) 2、查找问题:(哈希表(注意哈希函数的选择)、哈夫曼(已知顶点的访问频率)、线段树、在二叉树上进行统计(保留取间的中间点、用一维数组存储)、树状数组) 搜索 1、事先考虑数学规律和贪心策略(俄罗斯方块) 2、尽量减少搜索范围(循环变量的上下界和边界条件)、苛刻约束条件(尽量利用计数公式)

动态程序设计 向深层次发展 1、显性变隐性(难以看出阶段特征、难以确定状态和状态转移方程) 2、注意递归求解(九头龙) 3、多进程决策问题(多条最短路径) 4、双重动态程序设计(在添 m 条有权边的情况下求最短路径) 5、对有些具备阶段性和状态转移特征的问题,可通过动态程序设计计算所有方案 6、对不具备最优子结构、但具备阶段性和状态转移特征的问题,可通过动态程序设计转化为判定性问题,然后递推最优解 模拟问题 1、直叙式模拟不疏漏任何条件,精心设计数据结构(天鼠行动) 2、筛选法模拟 3、构造法模拟(关键是数学模型) 对策问题 注意博弈游戏,关键是哪些情况可产生相同局面,怎样避免它们的重复演算,怎样为局面设计合适的数据结构,怎样从局面的演变过程只找出数学规律

一般性方法 l 状 态 列举影响结局胜负的所有因素,综合描述成“状态”。根据对局时状态之间的变化,自顶而下构造出“状态转移的拓扑结构”。 l 扩展规则 在某些场合下,还可以记录一个状态先手胜(负)的最大(最小)利益,以数值形式描述,再根据题目中相应的条件,构成新的具有针对性的推算规则 l 实现方法 1 预先处理(关键) 列举状态;构造“状态转移的拓扑结构”;动态规划或记忆化搜索求状态先手胜负。 1 对局策略 依据已知的状态胜负,时刻把先手必败的状态留给对方。 特殊性方法” l 逆向分析 是从结局或残局出发,自底而上分析,无须构造“状态转移的拓扑结构”,无须考察所有可能的状态与策略,时间和空间复杂度相对于“一般性方法”都不高。 一般性方法: 自顶而下 考察所有状态胜负

特殊性方法: 自底而上 l 胜负规则

研究一类平衡状态

一般性方法:有通行胜负规则 特殊性方法:无通行胜负规则 “一般性方法”从统一的角度,考察所有状态,来决定对局策略。 “特殊性方法”从特殊的角度,考察一类状态,来决定对局策略。 几何计算 1、计算三角形面积和多边形面积 2、两条有向线段 P0P1、P0P1 在公共端点 P0 处的转向(叉积) 3、确定两条连续的有向线段 P0P1 和 P1P2 在 P1 处的转向(添辅助线和叉积) 4、确定两条线段是否相交(跨立实验和快速排斥试验)、两个长方形是否相交(与坐标轴平行与不平行)、在一组线段中确定任意一对线段是否相交 5、寻找凸包(graham 扫描法或 Jarris 步进法) 6、寻找最近点对 图论

1、计算连通图和连通分支、计算求极大强连通子图 2、对连通的、且不存在“桥” 的无向图 G,给定每条的方向,使之成为强连通图。 3、计算顶点连通度和块(网络流和深度优先搜索) 4、计算边连通度(网络流) 5、计算顶色数(贪心法)和边色数(边转化为顶点计算) 6、二分图的最大匹配(网络流或匈牙利算法),边带权,则为最佳匹配,关键是把问题转化为二分图 7、在允许重复走边的情况下,计算走遍所有边的最短路径。

NOIP2004 比赛环境要求及选手注意事项

作者:大榕树编程世? 文章来源:大榕树编程世界 点击数:611 更新时间:2004-11-21 17:16:49

NOIP2004 比赛环境要求

NOIP2004 的比赛中,必须使用如下配置的比赛环境:

操作系统

编译器

集成开发环境

Windows 2000 或者 Windows XP

Windows 版 gcc、g++、 freepascal

Windows 版 Rhide(C/C++)、 Freepascal IDE(pascal)

DJGPP For NOI、Freepascal For NOI 的安装和使用请见如下网址: DJGPP For NOI Freepascal For NOI

NOIP2004 选手注意事项
一、比赛目录 选手比赛时,需在本机建立为每题建立对应的题目目录,目录名成与题目名称相同,严格区分大小写。选手根据题目要求,将自己提交的源程序或者答案文件,放在该题的题目目录 下。 二、文件命名 比赛中涉及的所有文件名(包括源程序名、输入文件名、输出文件名、答案文件名),都必须严格按照题目要求命名,严格区分大小写。例如:题目要求输入文件名为 game.in、则 程序中必须按照该名字打开文件,不能使用 Game.in、GAME.IN 等名字。

三、程序 C/C++源程序,除了题目允许使用的库函数以外,只能 ANSI 标准函数库函数,并包含正确的头文件。C++源程序不得使用 STL 标准模板库。 C/C++源程序中,必须包含和,即每个 C/C++源程序文件的最前面必须有: #include #include C++源程序中,如果使用了I/O流操作,则必须包含,并打开 std 命名空间。即凡是使用了I/O流操作的 C++源程序文件的最前面必须有: #include using namespace std; PASCAL 源程序,除题目允许外,不能在源程序中使用各种编译选项。 四、目录结构示例 例如:假设比赛中有 cashier、dune、manhattan 三题,选手必须在本机建立对应的三个题目目录:cahiser、dune、manhattan。比赛中,选手应在对应的题目目录下答题。提交时, 选手必须将自己提交的源程序文件放入对应的题目目录中。 假设选手分别使用 C、Pascal 和 C++编写三题程序,其最终提交的文件为 cashier.c、dune.pas、manhattan.cpp,则该选手提交时正确的目录结构如下: |---cashier/ | |---cashier.c |--- dune/

|

|--- dune.pas

|---manhattan/


相关文章:
Turbo Pascal7.0讲解.doc
Turbo Pascal7.0讲解_计算机软件及应用_IT/计算机_专业资料。第一讲 Turbo Pascal7.0 基础 信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用...
turbopascal高级教程.pdf
turbopascal高级教程 - TURBO PASCAL 高级编程技术与实用程序集锦 作者:董占山 前言 TURBO PASCAL 是目前微机上最流行的 PASCAL 语言,它提供了集编辑、...
完整的PASCAL讲义(WORD).pdf
四、Turbo Pascal 语言系统的使用 目前,常用的 Pascal 语言系统有 Turbo Pascal7.0 与 Borland Pascal 7.0 ,下面我们就来学习 Turbo Pascal 7.0 系统的使用。 1....
Turbo Pascal 基本知识1_图文.ppt
Pascal语言的发展:Pascal 语言由1.0发展到7.0, 增加了许多特性,是历年竞赛中最...end. 程序的各个部分讲解程序首部: 例1和例2中的第一行都称为程序首部, 它...
PASCAL语言程序设计知识讲解资料_图文.ppt
PASCAL语言程序设计知识讲解资料_中职中专_职业教育_教育专区。PASCAL ...? Pascal语言程序的基本结构 Turbo Pascal语言系统的使用 一、Pascal 语言概述 ...
Turbo Pascal基本函数.pdf
我现在将 Tp 7.0 的 Help 文件 中的一些有关图形操作的过程与函数整理了一下...turbo pascal教程 15页 1下载券 turbo pascal 错误详解 7页 1下载券 ...
B02-Turbo Pascal 7.0基础_图文.ppt
B02-Turbo Pascal 7.0基础 - Turbo Pascal 7.0 基础 信息学奥赛培训第2课 2013年12月6日星期五 1 欢迎继续参加培训 ? 下次培训时间:...
pascal教程第一讲_图文.ppt
Turbo Pascal 7.0系统的使用 ? Turbo Pascal系统集成
PASCAL语法解释.pdf
对 Object Pascal 语 法讲解最好,最权威的恐怕就算《Delphi5 开发人员指南》了...program TP;{本代码在 Turbo Pascal 7.0 下编译通过} type MyRecord = record...
PASCAL从入门到精通_图文.pdf
Turbo Pascal7.0 编 辑窗口中,保留字默认用白色显示。例 1-
Pascal语言基础教程.doc
四、Turbo Pascal 语言系统的使用 目前,常用的 Pascal 语言系统有 Turbo Pascal7.0 与 Borland Pascal 7.0,下面我们就来学习 Turbo Pascal 7.0 系统的使用。 1. ...
第一课 初识Pascal语言.txt
第一课 初识Pascal语言 - 全国青少年信息学奥林匹克竞赛系列活动... 四、 Turbo Pascal语言系统的使用(FreePascal与之类似) 目前,常用的Pascal语言系统有Turbo Pascal...
第一课 初识 Pascal语言.doc
四、Turbo Pascal 语言系统的使用 目前,常用的 Pascal 语言系统有 Turbo Pascal7.0 与 Borland Pascal 7.0,下面我们就来学习 Turbo Pascal 7.0 系统的使用。 1. ...
Pascal语言入门.doc
四、Turbo Pascal 语言系统的使用 目前,常用的 Pascal 语言系统有 Turbo Pascal7.0 与 Borland Pascal 7.0,下面我们 就来学习 Turbo Pascal 7.0 系统的使用。 1....
信息学奥赛第一讲 Pascal入门_图文.ppt
常用的最新版Pascal语言系统有Turbo PASCAL 7.0 与Free
PASCAL语言培训提纲.doc
PASCAL语言培训提纲 - PASCAL 语言培训提纲 第一讲 PASCAL 语言基础及基本程序结构 *启动说明: Turbo PASCAL 7.0 在 dos 下执行文件是 Turbo.ex...
TURBO PASCAL 7.0集成环境菜单介绍_图文.ppt
TURBO PASCAL 7.0集成环境菜单介绍 - 五、学习使用turbo 五、学习使用turbo pascal7.0 目前,常用的Pascal语言系统有 Turbo Pascal7.0、Bo...
pascal讲义电子稿.doc
Pascal 语言有多种版本,本教材采用的 Turbo Pascal 7.0(或
pascal语法讲义-第五讲.pdf
百度Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第五讲 第五讲 循环结构的...Turbo Pascal7.0 并不支持该语法,但较新的 Free Pascal 版本支持。 for...in...
pascal基础(1)很好.pdf
四、Turbo Pascal 语言系统的使用 目前,常用的 Pascal 语言系统有 Turbo Pascal7.0 与 Borland Pascal 7.0,下面我们就来学习 Turbo Pascal 7.0 系统的使用。 1. ...