首页 全国青少年信息学奥赛培训教程

全国青少年信息学奥赛培训教程

举报
开通vip

全国青少年信息学奥赛培训教程全国青少年信息学奥赛培训教程 0 目 录 第一章 初识pascal 语言 …………………………………………………………………1 第二章 简单程序设计 第一节 数据类型、常量、变量……………………………………………………………4 第二节 赋值语句 ………………………………………………………………………… 7 第三节 输出语句(WRITE 语句)……………………………………………………………8 第四节 输入语句(READ 语句) ……………………………………………………………9 第五节 顺序结构程序设计……………………...

全国青少年信息学奥赛培训教程
全国青少年信息学奥赛培训 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 0 目 录 第一章 初识pascal 语言 …………………………………………………………………1 第二章 简单程序设计 第一节 数据类型、常量、变量……………………………………………………………4 第二节 赋值语句 ………………………………………………………………………… 7 第三节 输出语句(WRITE 语句)……………………………………………………………8 第四节 输入语句(READ 语句) ……………………………………………………………9 第五节 顺序结构程序设计……………………………………………………………… 13 第三章 选择结构的程序设计 第一节 如果语句(IF 语句)………………………………………………………………14 第二节 IF语句的嵌套……………………………………………………………………17 第三节 情况语句(CASE 语句)……………………………………………………………19 第四节 综合应用………………………………………………………………………… 20 第四章 循环结构的程序设计 第一节 循环语句(FOR 语句) ……………………………………………………………21 第二节 当语句(WHILE 语句) ……………………………………………………………23 第三节 直到循环(REPEAT 语句)………………………………………………………24 第四节 多重循环结构…………………………………………………………………… 26 第五章 枚举和子界类型 第一节 枚举类型…………………………………………………………………………28 第二节 子界类型…………………………………………………………………………31 第六章 数 组 第一节 一维数组…………………………………………………………………………33 第二节 多维数组………………………………………………………………………… 38 第三节 数组类型的应用………………………………………………………………… 40 第七章 函数与过程 第一节 函数……………………………………………………………………………… 43 第二节 过程……………………………………………………………………………… 47 第三节 递推算法………………………………………………………………………… 53 第四节 递归算法………………………………………………………………………… 54 第八章 集合和记录类型 第一节 集合类型………………………………………………………………………… 61 第二节 记录类型………………………………………………………………………… 64 第三节 综合应用实例…………………………………………………………………… 67 第九章 文件………………………………………………………………………………… 69 第十章 字符串处理 第一节 字符与字符串类型……………………………………………………………… 78 第二节 字符串的操作…………………………………………………………………… 79 第三节 字符串的综合应用……………………………………………………………… 82 第十一章 算法初步 第一节 回溯算法………………………………………………………………………… 84 第二节 贪心算法………………………………………………………………………… 88 第三节 分治算法………………………………………………………………………… 90 第四节 穷举算法………………………………………………………………………… 93 第五节 动态规划………………………………………………………………………… 97 【友情提示】 邮购联系电话:0591-28717456 电子信箱:abc@fjclyz.com 全国青少年信息学奥赛培训教程 1 第一章  初识Pascal语言 一、Pascal 语言概述 PASCAL语言也是一种算法语言,它是瑞士苏黎世联邦工业大学的N.沃思(Niklaus Wirth)教授于1968年设计完成的,1971年正式发表。1975年,对PASCAL语言进行了修改,作为"标准PASCAL语言"。 PASCAL 语言是在ALGOL 60 的基础上发展而成的。它是一种结构化的程序设计语言,可以用来编写应用程序。它又是一种系统程序设计语言,可以用来编写顺序型的系统软件(如编译程序)。它的功能强、编译程序简单,是70年代影响最大一种算法语言。 二、Pascal 语言的特点 从使用者的角度来看,PASCAL语言有以下几个主要的特点: ⒈它是结构化的语言。PASCAL 语言提供了直接实现三种基本结构的语句以及定义"过程"和"函数"(子程序)的功能。可以方便地书写出结构化程序。在编写程序时可以完全不使用GOTO语句和标号。这就易于保证程序的正确性和易读性。PASCAL语言强调的是可靠性、易于验证性、概念的清晰性和实现的简化。在结构化这一点上,比其它(如BASIC,FORTRAN77)更好一些。 ⒉有丰富的数据类型。PASCAL提供了整数、实型、字符型、布尔型、枚举型、子界型以及由以上类型数据构成的数组类型、集合类型、记录类型和文件类型。此外,还提供了其它许多语言中所没有的指针类型。沃思有一个著名的公式:"算法+数据结构=程序"。指出了在程序设计中研究数据的重要性。丰富的数据结构和上述的结构化性质,使得PASCAL可以被方便地用来描述复杂的算法,得到质量较高的程序。 ⒊能适用于数值运算和非数值运算领域。有些语言(如FORTRAN 66,ALGOL 60)只适用于数值计算,有些语言(如COBOL )则适用于商业数据处理和管理领域。PASCAL的功能较强,能广泛应用于各种领域。PASCAL语言还可以用于辅助设计,实现计算机绘图功能。 ⒋PASCAL 程序的书写格式比较自由。不象FORTRAN 和COBOL 那样对程序的书写格式有严格的规定。 PASCAL 允许一行写多个语句,一个语句可以分写在多行上,这样就可以使PASCAL 程序写得象诗歌格式一样优美,便于阅读。 由于以上特点,许多学校选PASCAL 作为程序设计课程中的一种主要的语言。它能给学生严格而良好的程序设计的基本训练。培养学生结构化程序设计的风格。但它也有一些不足之处,如它的文件处理功能较差等。 三、Pascal 语言程序的基本结构 任何程序设计语言都有着一组自己的记号和规则。PASCAL语言同样必须采用其本身所规定的记号和规则来编写程序。尽管不同版本的PASCAL 语言所采用的记号的数量、形式不尽相同,但其基本成分一般都符合标准PASCAL的规定,只是某些扩展功能各不相同罢了。下面我们首先来了解Pascal语言的程序基本结构。 为了明显起见先举一个最简单的PASCAL程序例子: 【例1】输入半径r,求圆的周长和面积。 全国青少年信息学奥赛培训教程 2 从这个简单的程序可以看到: 1.一个PASCAL程序分为两个部分:程序首部和程序体(或称分程序)。 2.程序首部是程序的开头部分,它包括: ⑴程序标志。用"program"来标识"这是一个PASCAL 程序"。PASCAL规定任何一个PASCAL程序的首部都必须以此字开头。在turbo pascal语言中,首部也可省略。 ⑵程序名称。由程序设计者自己定义,如例中的exam1。 在写完程序首部之后,应有一个分号。 3.程序体是程序的主体,在有的书本里也称"分程序"。程序体包括说明部分(也可省略)和执行部分两个部分。 ⑴说明部分用来描述程序中用到的变量、常量、类型、过程与函数等。本程序中第二行是"变量说明",用来定义变量的名称、类型。 PASCAL 规定,凡程序中用到所有变量、符号常量、数组、标号、过程与函数、记录、文件等数据都必须在说明部分进行定义(或称"说明")。也就是说,不允许使用未说明先使用。 ⑵执行部分的作用是通知计算机执行指定的操作。如果一个程序中不写执行部分,在程序运行时计算机什么工作也不做。因此,执行部分是一个PASCAL程序的核心部分。 执行部分以"begin"开始,以"end"结束,其间有若干个语句,语句之间以分号隔开。 执行部分之后有一个句点,表示整个程序结束。 ⒋PASCAL程序的书写方法比较灵活。当然,书写不应以节省篇幅为目的,而应以程序结构清晰、易读为目的。在编写程序时尽量模仿本书中例题程序格式。 ⒌在程序中,一对大括号间的文字称为注释。注释的内容根据需要书写,可以用英语或汉语表示。注释可以放在任何空格可以出现的位置。执行程序时计算机对注释不予理睬。 四、Turbo Pascal 语言系统的使用 目前,常用的Pascal语言系统有Turbo Pascal7.0与Borland Pascal 7.0,下面我们就来学习TurboPascal 7.0系统的使用。 1.系统的启动 在运行系统目录下的启动程序TURBO.EXE,即可启动系统。屏幕上出现如图1所示的集成环境。 2.Turbo Pascal系统集成环境简介 最顶上一行为主菜单。中间蓝色框内为编辑窗口,在它个编辑窗口内可以进行程序的编辑。最底下一行为提示行,显示出系统中常用命令的快捷键,如将当前编辑窗口中文件存盘的命令快捷键为F2,获得系统帮助的快捷键为F1,等等。 全国青少年信息学奥赛培训教程 3 3.新建程序窗口 按F10 进行主菜单,选择FILE 菜单,执行其中New 命令。就可建立一个新的程序窗口(默认文件名为Noname00.pas或Noname01.pas等)。 4.程序的输入、编辑 在当前程序窗口中,一行一行的输入程序。事实上,程序窗口是一个全屏幕编辑器。所以对程序的编辑与其它编辑器的编辑方法类似,这里不再重复。 5.编译程序 当程序输入完毕之后,一般要先按Alt+F9(或执行compile菜单中compile命令)对程序进行编译。如果程序有语法错误,则会在程序窗口的第一行处显示第一个红色错误信息。若无语法错误,则窗口正中央会出现一个对话框,提示编译成功。接下来,我们可以运行程序了。如果在编译过程中发现程序有语法错误,系统会提示第一个错误信息。如"’;’expected",提示缺少分号;"’)’expected",提示缺少右括号。此时,应有针对性的进行修改。修改后,再重复编译的过程,直到编译成功。 6.运行程序 程序的运行可以通过按ALT+R 打开RUN 菜单中的RUN 命令,或直接按快捷键CTRL+F9。则可以在用户窗口中输出运行结果。通常在程序运行结束后系统回到Pascal 系统的集成环境,因此要查看运行结果,要按ALT+F5将屏幕切换到用户屏幕。 下面是该程序的运行结果 * * * * * * * * * * * * * * * * * * * * * * * * 7.程序的保存与打开 选择主菜单File中的菜单项Save,或按快捷键F2,在出现的如图的对话框中输入文件名:tu.pas,单击""OK,则程序就以tu.pas为文件名保存在当前目录中了。 全国青少年信息学奥赛培训教程 4 第二章 简单程序设计 我们学习了Pascal 语言的程序基本结构,在一个程序中,所有的操作都由执行部分来完成,而执行部分又都是由一个个语句组成的。因此,下面开始我们要学习pascal 语言的基本语句,并且在学习过程中逐步学会程序设计的基本方法。 这节课我们要学习两种语句,即赋值语句与输出语句。在语句学习之前我们要先了解一些pascal 语言的基础知识。 第一节 数据类型、常量、变量 一、 常量、变量与算术表达式 (一)常量 在程序运行过程中,其值不能被改变的量称为常量。如123,145.88,’abc’,true等。 ⒈整型常量 整型常量采用我们平常使用的十进制整数表示。如138,0,-512 等都是整型常量,而18.或18.0 都不是整型常量。 pascal 中有一个标准标识符Maxint,它代表所使用的计算机系统允许的最大整型数,而最小的整型数即为-Maxint-1。Turbo Pascal还定义了长整数常量MaxLongInt,其值为2147483647。 ⒉实型常量 实型常量包括正实数、负实数和实数零。pascal中表示实型常量的形式有两种。 ⑴十进制表示法 这是人们日常使用的带小数点的表示方法。 如0.0,-0.0,+5.61,-8.0,-6.050等都是实型常量,而0.,.37都不是合法的实数形式。 ⑵科学记数法 科学记数法是采用指数形式的表示方法,如1.25×105可表示成1.25E+05。在科学记数法中,字母“E”表示10 这个“底数”,而E 之前为一个十进制表示的小数,称为尾数,E 之后必须为一个整数,称为“指数”。如-1234.56E+26 , +0.268E-5 , 1E5 是合法形式,而.34E12 , 2.E5 , E5 ,E,1.2E+0.5 都不是合法形式的实数。 无论实数是用十进制表示法还是科学表示法,它们在计算机内的表示形式是一样的,总是用浮点方式存储。和整数相比,实数能表示的范围大得多,但值得注意的是实数的运算整数的运算速度慢且无法像整数那样精确表示,只能近似表示。 ⒊字符常量 在Pascal 语言中,字符常量是由单个字符组成,所有字符来自ASCII 字符集,共有256 个字符。在程序中,通常用一对单引号将单个字符括起来表示一个字符常量。如:’a’,’A’,’0’等。特殊地,对于单引号字符,则要表示成’’’’。对于ASCII字符集中,按每个字符在字符集中的位置,将每个字符编号为0-255,编号称为对应字符的序号。 4.布尔常量 布尔型常量仅有两个值,真和假,分别用标准常量名true和false表示。它们的序号分别为1和0。 5.符号常量 一个常量即可以直接用字面形式表示(称为直接常量, 如 124,156.8),也可以用一个标识符来代表一个常量,称为“符号常量”。但符号常量必须在程序中的说明部分定义,也就是说先定义,后使用。定义符号常量的一般格式: CONST <常量标识符>=<常量> 说明:常量说明部分以关键字const 开头, 后面的标识符为常量标识符,其中“=”号后的常量为整数、实数、字符、 字符串(字符、字符串常量在后面章节中将作介绍)。而且,在常量说明部分可以将几个常量说明成符号常量,共用一个关键字“const”。例如: 全国青少年信息学奥赛培训教程 5 program ex; const var r,c,s:real; begin write(’Enter r=’);readln(r); c:=2*pi*r; s:=pi*r*r; writeln(’c=’,c); writeln(’s=’,s); end. 则在本程序中pi和zero作为符号常量,分别代表实数3.14159和整数0。也就是说,常量说明部分既定义了常量名及其值,又隐含定义了常量的类型。 关于符号常量,应注意下列几点: ⑴符号常量一经定义,在程序的执行部分就只能使用该常量标识符,而不能修改其值。 ⑵使用符号常量比直接用数值更能体现“见名知义”的原则,也便于修改参数,故一个较好的程序中,应尽量使用符号常量,在执行部分基本上不出现直接常量。 (二)变量 变量代表了一个存储单元,其中的值是可变的,故称为变量。如游戏“魂斗罗”中玩者命的个数最初为3,当你死了一次命减少一,这里命的个数就是一个变量(或者说命的个数存储在一个存储单元中)。即在程序运行过程中,其值可以改变的量,称为变量。 变量有三个要素是:变量名、变量类型、变量值。 一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量(存贮单元)取一个名(称为变量名),该变量(存贮单元)存放的值称为变量的值,变量中能够存放值的类型为变量的类型。例如 “魂斗罗”游戏中用于存放“命”的变量,在游戏程序中的名字可取为N,它的类型为整型,游戏初始时这个变量的值为3。 1.变量名 用一个合法的标识符代表一个变量。如n,m,rot,total 等都是合法变量名。在程序中用到的变量必须在说明部分加以说明,变量名应遵循自定义标识符的命名规则,并注意“见名知义”的原则,即用一些有意义的单词作为变量名。 “自定义标识符”的命名规则为:自定义标识符必须以字母(包含下划线“_”)开头,后面的字符可以是字母或数字。标识符长度不超过63个字符。 2.变量的类型 常量是有类型的数据,变量在某一固定时刻用来存放一个常量,因此也应有相应的类型。如整型变量用来存放整数,实型变量用来存放实数。 3.变量说明 在程序中若要使用变量,变量的名称及类型在程序的变量说明部分加以定义,变量的值则在程序的执行部分中才能赋给。 变量说明的一般格式: VAR <变量标识符>[,<变量标识符>]:<类型>; (中括号内部分表示可省,下同)其中VAR是pascal保留字,表示开始一个变量说明段, 每个变量标识符或由逗号隔开的多个变量标识,必须在它的冒号后面说明成同一类型。一个程序中,可以说明许多不同类型的变量,每种类型变量之间用分号隔开,共用一个VAR符号。 例如: var age,day:integer; amount,average:real; 其中,Integer(整型)、Real(实型)是标准标识符, 它们是“类型标识符”,代表了确定的类型,如age和 day 被定义为整型变量,amount和average被定义为实型变量。 全国青少年信息学奥赛培训教程 6 一旦定义了变量,就确定了它的类型,也就是说,就确定了该变量的取值范围和对该变量所能进行的运算。 (三)算术表达式 ⑴算术表达式的定义 pascal语言中的算术表达式是由符合pascal语法规定的运算对象(包括常量、变量、函数)、算术运算符、圆括号组成的有意义的式子。如:A+3.14159*5/8.4-Abs(-1123) ⑵算术运算符 常用的有以下6个算术运算符: ①+ (加) ②- (减) ③* (乘) ④/ (实数除)得到结果为实型.如5.0/2.0=2.5, 5/2= 2. 5,4/2=2.0而不等于2。 ⑤DIV (整除) DIV它要求除数和被除数均为整型, 结果也为整型。如10 DIV 2=5,10 DIV 3=3, 5 DIV 10=0. -15 DIV 4= -3。DIV运算只取商的整数部分,参与DIV运算的两个对象不能为实型。 ⑥mod (求余),也只能用于整数运算,结果为整数。例如:10 mod 4=2 , -17 mod 4= -1 , 4 mod (-3)=1,- 4 mod 3= -1,即 a mod b=a-(a div b)*b。 (3)运算优先顺序 如果一个表达式里出现两个或两个以上的运算符, 则必须规定它们的运算次序。pascal规定: ①表达式中相同优先级的运算符,按从左到右顺序计算; ②表达式中不同优先级的运算符,按从高到低顺序计算; ③括号优先级最高,从内到外逐层降低; 在算术运算中运算符的优先顺序与数学上的四则运算一致,即“先乘除后加减”(注:“MOD”、“DIV”运算的优先级与“*”、“/”相同)。 (四)Pascal 标准函数 例如: odd(5)为判断自变量是否为奇数,故其值为true。 Abs(—3)表示绝对值函数,因此其值为3。 Sqr(5)是求平方函数,故其值为25。 Sqrt(100)为求平方根函数,故其值为10。 Chr(48)为求ASCII码值,故其值为’0’。 Trunc(1.999)为截尾函数,故其值为1。 注意: (1)round(x)是舍入函数,对于正数,舍小数后,函数值比原值要小,入小数后,函数值比原值要大。负数则正好相反。也就是说,正数舍小入大,负数舍大入小。 (2)chr函数和ord函数在字符范围内构成一对反函数,如:chr(ord(‘a’))=’a’ ord(chr(61))=61 (3)函数和函数构成一对反函数,如:pred(succ(x))=x succ(pred(x))=x (4)x的n次方利用换底公式表示为exp(n*ln(x)) (5)sin(x)、cos(x)的自变量是弧度,若给出的是角度值,转换公式是:弧度值=3.1416/180*角度值 (6)ord(true)=1, ord(false)=0 全国青少年信息学奥赛培训教程 7 第二节 赋值语句 对程序已经创建的变量,如何取值?通常使用赋值语句来给变量提供数据,它具有 计算和赋值的功能,程序中所进行的各种运算,大多数是在赋值语句中实现的。 (1)格式 变量标识符:=表达式 (2)语义 赋值语句的执行是“先计算,后赋值”。即先计算表达式的值,然后将值赋给变量 标识符,具有计算和赋值的双重功能。 例如:pi1:=3.1415*6是计算3.1415*6的值,然后将其值赋值给变量pi1. [例1]下面的程序执行后,变量b、c、d的值是多少? program p2_1(input,output); Const a=256; Var b,d:integer; c:real; Begin b:=a div 16;{计算表达式a div16的值为16,赋值给变量b} c:=a/b;{计算表达式a/b的值,也就是将a的值256除以b的值,结果为16, 但是因变量c的类型是实型,所以赋予给变量c的值应为16.0} d:=a; {变量d的值为256} Readln; {暂停} end. (3)说明 1.":="称为赋值号,要注意不能与关系运算符“=”混淆,只有在赋值语句中才使 用赋值号。赋值号具有方向性,是将赋值号右边表达式的值计算出来,赋予赋值号左边的变量,所以赋值号的左边只能是变量;常量说明中只能用等号,如例4-1。 2.赋值号两边的类型应该相同。只有一点可以例外,那就是当表达式的值为整型时,它可以自动转化成实型后赋给一个实型变量。 3.一个赋值语句只能给一个变量赋值。变量可以进行多次赋值,赋值后的变量将在程序中一直保持不变,直到该变量重新赋值成其他的值。 4.被赋值的变量本身可以作为因子参与运算,如n:=n-1,i:=i+1,s:=s+x. 为了深入理解赋值语句,请看下面的例子: [例2] 写出执行下面的程序后,变量a、b的值。 program p4_2 (input,output); var a,b:integer; begin a:=3; b:=a; b:=a+1; a:=a+1; b:=b+1; Readln; {暂停} end. 全国青少年信息学奥赛培训教程 8 第三节 输出语句(WRITE 语句) 输出语句的作用是将程序运算的结果输出到屏幕或打印机等输出设备。这里通常是指输出到屏幕。 (1) 输出语句的两种格式 1、write语句 格式Write(表达式1,表达式2,……); 如:write(1,2,3,4); write(1.2,3.4,5); write(‘My name is Liping’); 2、writeln语句 格式: Writeln(表达式1,表达式2,……)或writeln (二)输出语句的功能 计算机执行到某一输出语句时,先计算出输出语句中的每个表达式的值,并将每一个表达式的值一个接一个地输出到屏幕上。 Write 语句与writeln 语句格式上都相似,但它们在功能上有所不同,两个语句的区别在于,write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出各个表达式的值后换行。 例如以下两个程序段的输出分别为: write(1,2,3,4);write(5,6); 输出为: 123456 writeln(1,2,3,4);write(5,6); 输出为: 1234 56 (三)、应用例析 [例3]:某仓库5月1 日有粮食100 吨,5月2 日又调进20 吨,5月3 日卖出库存的3 分之二,5月4日又调进库存的3 倍粮食,问该仓库从5 月1 日到5 月4 日期间每天的粮食分别是多少吨?(输出每天的库存量) 分析:在这个问题中,主要要描述从5月1日到5月4日期间仓库的粮食库存量,且易知它是不断变化的。因此我们可以用一个变量A来描述仓库的粮食库存量。 程序可写如下: Program ex1; Var A : integer; Begin A:=100;Writeln(‘5/1:’,A); A:=A+20;Writeln(‘5/2:’,A); A:=A div 3; writeln(‘5/3:’,A); A:=A *4; writeln(‘5/4:’,A); Readln; End. [例4]:有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,丙有13粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有书多少粒糖果? 分析:这个问题中我们关心的是在游戏过程中每个小朋友的糖果个数,且他们所拥有的的糖果数是在变化的。因此可用a,b,c三个变量分别存放甲乙丙三个小朋友在某一时刻所拥有的糖果数。对于每人,分糖后,他的糖果数一定为原来的糖果数 div 3(因为分糖过程糖果的数目不一定都刚好分完,用整除恰恰可以表示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的一样的糖果。 程序可写如下: program ex2; var A,B,C:integer; begin A:=50;B:=43;C:=13; {初始时每个小朋友所拥有的糖果数} A:=A div 3; B:=B+A;C:=C+A; {甲小朋友分糖果后,每个人拥有的糖果数变化情况} B:=B div 3; A:=A+B;C:=C+B; {乙小朋友分糖果后,每个人拥有的糖果数变化情况} C:=C div 3; A:=A+C;B:=B+C; {丙小朋友分糖果后,每个人拥有的糖果数变化情况} writeln(’A=’,A,’B=’,B,’C=’,C); {输出结果} readln; end. 注:上程序中倒数第三行中’A=’表示一个字符串(即用一对单引号括起来的一串字符),对于字符 串,输出字符串的内容(即引号内的所得字符,而引号不输出)。 以上程序的运行结果为: A=51 B=35 C=16 【上机练习2.3】 1、已知某梯形的上底A=13,下底B=18,高H=9,求它的面积S。 2、已知某圆的半径R=139,求该圆的周长C与面积S? 3. 输入长方形的边长a,b,计算它的面积和周长,输出。 全国青少年信息学奥赛培训教程 9 第四节 输入语句 一、写语句的输出格式 在pascal 语言中输出数据时是可以按照一定格式的,对整数隐含的输出形式为按十进制数形式。对 实数的输出,隐含的形式是科学记数法形式(如果不想用科学记数法输出而用小数形式输出,要自己另行 定义)。 事实上,输出语句中的每个输出项中的表达式之后可以加上格式说明,若输出项后没有加格式说明, 则数据按系统隐含的格式输出,还可加上一定格式符号按特定格式输出。 ⒈隐含的输出格式 pascal语言为整型量、实型量、布尔型量和字符串( 用一对单引号括起来的字符序列)规定了每种数 据所占的宽度(即一个数据占几列) ,一个数据所占的宽度称为“场宽”或“字段宽”。系统给出的隐含场 宽称为标准场宽。每一种pascal版本给定的标准场宽不尽相同。下表给出标准pascal和pc机上两种pascal 版所规定的标准场宽。 标准场宽 数据类型 标准pascal Turbo pascal integer 10 实际长度 real 22 17 布尔型 10 4或5 字符串 串长 串长 在Turbo Pascal 系统中,对于整型字符串的输出都是按数据本身长度输出,对于布尔型数据(只有 True和False两种值),TRUE为4列,FALSE为5列,一律采用大写输出。而real型数据的输出时,则按 17列输出,其中第一列为符号位,正号不显示,后四位为“E±nn”, 中间的12列为尾数部分。如: writeln(sqrt(75)); 则输出□8.6602540379E+00。 全国青少年信息学奥赛培训教程 10 而writeln(sqrt(81)); 则输出□9.0000000000E+00。 有时,在程序中往往根据实际情况,需要自己定义场宽。 ⒉指定场宽 在写语句中输出项含有格式符号时,就是为了指定场宽。 ⑴指定单场宽. 格式:write(表达式:N)或writeln(表达式:N),其中N为自然数,指定单场宽后,所有数据不再按标 准场宽输出,而按指定场宽输出。若数据实际长度小于指定场宽时,则一律“向右靠齐,左留空格”。 如write(1234:8);write(’abcdef’:12); 输出结果: □□□□1234□□□□□□abcdef 对于标准实型数据指定单场宽时,如果场宽大于标准场宽时,右靠齐按标准场宽格式输出17 位,左 留空格。若场宽小于标准场宽时,第一位仍为符号位,最后四位仍为“E±nn”,中间部分为尾数显示部分。 如果指定的宽度小于8位,则数据按8位格式“*.*E±nn ”输出。 ⑵指定双场宽 如果输出项是实数时,如果希望输出的实数不用科学记数法输出,而用小数形式输出,可以用指定双场 宽方法输出。 双场宽输出格式为:write(实型表达式:m:n),其中m 和n 都是自然数,m 用以指定整个数据所占 的宽度,n指定输出实数的小数位数。 如 : write(sqrt(75):9:4); 输出:□□□8.6602 如果双场宽不能满足输出数据的最低要求, 系统自动突破指定的场宽限制,按实际长度输出。 如:write(sqrt(75):5:4); 要使小数点后有4位数字,而总场宽为5,是不可能的(因为还有一个小数点, 小数点前面还有一个数字)。它最低限度要有6列,即输出为: 8.6602 例5 写出下列程序在turbo pascal下的输出结果. program ex; const s=’abcdefg’; var i:integer; r:real; c:char; b:boolean; begin i:=1234;r:=1234.5678; c:=’#’;b:=true; writeln(i,i:6,i:3); writeln(r,r:12:5,r:8:5); writeln(c,c:5); writeln(s,s:10,s:5); writeln(b,b:5,b:3); end. 运行结果如下: 1234□□12341234 □1.2345678000E+03□□1234.567801234.56780 #□□□□# abcdefg□□□abcdefgabcdefg TRUE□TRUETRUE 3.应用例析 全国青少年信息学奥赛培训教程 11 例6:已知A=253,B=43,输出A*B的运算式子。即输出如下: 253*43=10879 253 * 43 759 +1012 10879 分析:对于该问题,我们只要控制好输出时右靠齐即可。即前四行的总宽度一样(例如为12),第五 行总宽度比前面少1。第六、七行总宽度与前四行一样。 参与程序如下: var a,b:integer; begin a:=253;b:=43; writeln(a:10,’*’,b,’=’,a*b); writeln(a:12); write(’*’:8);writeln(b:4); writeln(’--------’:12); writeln(a*3:12); write(’+’:6);writeln(a*4:5); writeln(’--------’:12); writeln(a*b:12); end. 二、 输入语句(读语句) 在程序中变量获得一个确定的值,固然可以用赋值语句,但是如果需要赋值的变量较多,或变量的值 经常变化,则使用本节介绍的输入语句──读语句,将更为方便。读语句是在程序运行时由用户给变量提 供数据的一种很灵活的输入动作,它有两种格式: 1.读语句的一般格式: read(<变量名表>); readln[(<变量名表>)]; 其中变量名表是用逗号隔开的若干个变量名组成的。 功能:从标准输入文件(即INPUT,一般对应着键盘 )中读入数据,并依次赋给相应的变量。 说明:①read和readln是标准过程名,它们是标准标识符。 ②执行到read或readln语句时,系统处于等待状态,等待用户从键盘上输入数据,系统根据变量的 数据类型的语法要求判断输入的字符是否合法。如执行read(a)语句,a 是整型变量,则输入的字符为数 字字符时是合法的,当输入结束时,则自动将刚接受的一串数字字符转换为整数赋给变量a。 ③在输入数值型(整型或实型)数据时,数据间要用空格或回车分隔开各个数据,输入足够个数的数 据,否则仍要继续等待输入,但最后一定要有回车,表示该输入行结束,直到数据足够,该读语句执行结 束,程序继续运行。 例7. 设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语句的第一个区别是: 全国青少年信息学奥赛培训教程 12 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语句中变量所需数据后,一定要读到一个回车,否则多余的数据无用。 例8 设要达到例1同样的目的,但语句改为: readln(a,b);readln(c) 则例3中的4种输入格式只有(b)(d)是有效的. ⑤readln语句与read语句的第二个区别是:read 后一定要有参数表,而readln可以不带参数表,即可 以没有任何输入项, 只是等待读入一个换行符(回车)。经常用于暂停程序的运行,直到输入一个回车。 例9 设有下列语句: 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 语句后,系统处于待待输入状态, 只有输入了所需数据后才继续往下执 行。 【上机练习2.4】 1.求长方体的面积,长、宽、高的值由键盘输入。 2.读入摄氏温度c,写程序将它转换成华氏温度f输出。已知f=9c/5+32 3.输入三个字符,然后按输入字符次序输出这三个字符,并输出每个字符的序号,最后按与输入字符相反 的次序输出这三个字符。(求序号用ORD函数) 4.输入一个三位自然数,把这个数的百位与个位数对调,输出对调后的自然数。 5.键盘输入两个小数,经过取整操作后,将其整数部分交换值后输出。 全国青少年信息学奥赛培训教程 13 第五节 顺序结构程序设计 到目前为止,我们可以用读、写语句和赋值语句编写一些简单的程序。通过阅读这些程序,可以逐步 熟悉pascal程序的编写方法和应遵循的规则,为以后各章的学习打基础。 例10、试编一程序,输入一梯形的上底、下底、高, 求该梯形的面积。 分析: 整个程序分为三段:输入、计算、输出。程序中用a,b,h 三个变量分别存放梯形的上、下底与 高,S 存放面积。 要而使用这些变量都要先说明,程序的执行部分中先输入上、下底与高,接着求面积 S,最后输出结果S。 源程序如下: program Tixing; {程序首部} var a,b,h,s:real; {程序说明部分} begin write(’Input a,b,h:’); readln(a,b,h); {程序执行部分} s:=(a+b)*h/2; write(’s=’,s:10:3); end. 例11、某幼儿园里,有5个小朋友编号为1,2,3,4,5,他们按自己的编号顺序围坐在一张圆桌旁。 他们身上都有若干个糖果,现在他们做一个分糖果游戏。从1号小朋友开始,将他的糖果均分三份(如果 有多余的,则他将多余的糖果吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。接着2号、3号、 4号、5号小朋友也这如果做。问一轮后,每个小朋友手上分别有多少糖果。 分析:这道问题与第三节中的例4基本一样,只不过这里有5位小朋友,且他们初始时糖果的数目不 确定。这里用a,b,c,d,e分别存放5个小朋友的糖果。初始时它们的值改为由键盘输入。其它都与第三节 中的例4类似。 参考程序如下: program fentang; var a,b,c,d,e:integer; begin write(‘Please Enter init numbers ‘);readln(a,b,c,d,e); a:=a div 3;b:=b+a;e:=e+a;{1号均分后,1、2、5号的糖果数变化情况} b:=b div 3;c:=c+b;a:=a+b;{2号均分后,1、2、3号的糖果数变化情况} c:=c div 3;b:=b+c;d:=d+c;{3号均分后,2、3、4号的糖果数变化情况} d:=d div 3;c:=c+d;e:=e+d;{4号均分后,3、4、5号的糖果数变化情况} e:=e div 3;d:=d+e;a:=a+e;{5号均分后,4、5、1号的糖果数变化情况} {输出结果} writeln(’a=’,a); writeln(’b=’,b); writeln(’c=’,c); writeln(’d=’,d); writeln(’e=’,e); readln;{暂停} end. 全国青少年信息学奥赛培训教程 14 例12、编一程序求半径为R的圆的周长与面积? 分析: 程序要先输入半径R,然后求周长c和面积s,最后输出c和s. 源程序如下: program circle; const PI=3.14159; var r,c,s:real; begin write(’Enter R=’);readln(r); c:=2*pi*r; s:=pi*sqr(r); writeln(’c=’,c:10:2); writeln(’s=’,s:10:2); end. 在程序中,为了输出实型周长C和面积S时,按照小数形式输出,采用了指定双场宽格式。 【上机练习2.5】 1、从键盘输入a、b、c求一元二次方程ax2+bx+c=0的两个实数根(不考虑无解的情况)。 2、输出两个自然数相除的商和余数。 分析:设被除数、除数、商和余数,分别为A,B,C,D,均为变量,且都是整数类型。题中未给出具 体的自然数A、B,可采用键盘输入方式。 ① 给出提示,从键盘输入a, b; ② 显示两数相除的数学形式; ③ 求出a除以b的商c; ④ 求出a除以b的余数d; ⑤ 紧接等式后面输出显示商和余数。 3、加法计算器:编程由键盘输入两个整数a和b,计算出它们的和并输出到屏幕上。 4、计算某次考试语文、数学、英语和计算机等四科的总成绩与平均成绩。 (请用输入语句从键盘输入各科成绩) 5、交换两个变量的值:由键盘输入两个正整数A和B,编程交换这两个变量的值。 6、有鸡兔同笼,头30,脚 90,究竟笼中的鸡和兔各有多少只? 分析:设鸡为J只,兔为T只,头为H,脚为F,则: J+T=30 ① 2*J+4*T=90 ② 解此题暂不必采用数学上直接解方程的办法,可采用“假设条件与逻辑推理”的办法: 假设笼中30 个头全都是兔,那么都按每头4只脚计算,总脚数为(4*H),与实际脚数 ( F )之差为(4*H —F),如果这个差=0,则笼中全是兔(即鸡为0只);如果这个差值 >0,说明多计算了脚数,凡是鸡都多 给算了两只脚,用它除以2就能得到鸡的只数,处理步骤为: ① J=(4*H—F)/2 {先用脚数差值除以2算出鸡的只数} ② T=H—J {再用总头数减鸡数算出兔的只数} 7、五位好朋友相聚。第一位朋友带来了很多糖块赠送给各位朋友,使每人的糖块在各自原有的基础上翻 了一倍;接着第二位好友也同样向每人赠送糖块,他同样使每人的糖块在各人已有的数量上翻了一倍;第 三、第四、第五位好友都照此办理。经过这样的赠送之后,每人的糖块恰好都为32 块。问各位好友原先 的糖块数分别是多少? 全国青少年信息学奥赛培训教程 15 第三章 选择结构的程序设计 第一节 如果语句(IF 语句) 在现实生活中,我们每天都要进行根据实际情况进行选择。例如,原打算明天去公园,但如果明天 天气不好,将留在家里看电视。所以人也会根据条件进行行为的选择。计算机也会根据不同情况作出各种 逻辑判断,进行一定的选择。在这课与下一课中,我们将会发现,我们是通过选择结构语句来实现程序的 逻辑判断功能。 一、PASCAL 中的布尔(逻辑)类型 在前面,我们学习了整型(integer)与实型(real)。其中integer型数据取值范围为-32768到32767 之间所有整数。而real型数据取值范围为其绝对值在10-38到1038之间的所有实数。它们都是数值型的(即 值都为数)。布尔型(Boolean)是一种数据的类型,这种类型只有两种值,即“真”与“假”。 1、布尔常量 在Pascal语言中“真”用ture表示,“假”用False表示。所以布尔类型只有TRUE与FALSE两个 常量。 2、布尔变量(BOOLEAN) 如果我们将某些变量说明成布尔型,那么这些变量就是布尔变量,它们只能用于存放布尔值(ture或 false)。 例如,VAR A,B:BOOLEAN; 3、布尔类型是顺序类型 由于这种类型只有两个常量,Pascal语言中规定ture的序号为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、关系表达式的值 很显然,这几个关系表达式中第一个是正确的,第三个是错误的,而第二个表达式可能是对的,也可 能是错的。所以我们很容易发现,这些表达式的值是“对”的或“不对”的(或者说,是“真”的或“假” 的),即关系表达式的值为布尔值。表示该比较式两端式子的大小关系是否成立。如3+2>6是错的,故它 的值为FALSE。同样,45>=32是对的,故该表达式的值为true。 关系表达式用于表示一个命题。如:“m为偶数”可表示为:m mod 2=0。“n为正数”可表示为:n>0。 全国青少年信息学奥赛培训教程 16 3.布尔运算及布尔表达式 为了表示更复杂的命题,Pascal还引入三种逻辑运算符:not、and、or。它们分别相当于数学上的 “非”、“且”和“或”的意义。 这三个运算符的运算对象为布尔量,其中not为单目运算,只有一个运算对象,and与or为双目运算, 有两个运算对象。它们的运算真值表如下: A b Not a a and b a or b a xor b false false true false false false false true true false ture true true false false false true true true true 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)”。 三、简单的IF 语句 1、格式 Ⅰ、IF <布尔表达式>THEN 语句; Ⅱ、IF <布尔表达式>THEN 语句1 ELSE 语句2; (注意Ⅱ型IF语句中语句1后无“;”号) 2、功能 Ⅰ、执行IF语句时,先计算<布尔表达式>的值,若为TRUE则执行语句,否则不执行任何操作。 Ⅱ、执行IF语句时,先计算<布尔表达式>的值,若为TRUE则执行语句1,否则执行语句2; 3、示例 例1.输入一个整数A,判断是否为偶数。(是输出“YES”否则输出“NO”)。 Program ex4_2; Var a:integer; Begin Write(‘a=’);readln(a); If (a mod 2 =0)then writeln(‘yes’) Else writeln(‘no’); Readln; End. 例2.联单华榕超市里卖电池,每个电池8角钱,若数量超过10个,则可打7.5折。 Program ex4_3; Var Num:integer;Price,Total:real; Begin Write(‘Num=’);readln(Num); Price:=0.8; If Num>10 then Price:=Price*0.75; Total:=Num*Price; Writeln(‘Total=’,Total:0:2); Readln; End. 例3. 编写一与电脑猜“红”或“黑”的游戏。 分析:用1代表红,0代表黑。先由计算机先出 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 ,然后再由人猜
本文档为【全国青少年信息学奥赛培训教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_711686
暂无简介~
格式:doc
大小:147KB
软件:Word
页数:47
分类:
上传时间:2012-01-16
浏览量:89