信息学奥林匹克竞赛培训PASCAL语言课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《信息学奥林匹克竞赛培训PASCAL语言课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息学 奥林匹克 竞赛 培训 PASCAL 语言 课件
- 资源描述:
-
1、教师(PASCAL串讲)培训讲习v1989年5月首次举办国际信息学奥林匹克竞赛,简称IOI,成为继数学、物理、化学之后的又一门国际(中学生)奥林匹克竞赛。v1991年起全国青少年计算机竞赛更名为全国青少年信息学(计算机)奥林匹克竞赛,简称NOI。由中国科学技术协会主管,中国计算机学会主办。全国青少年信息学奥林匹克联赛,简称为NOIP,参加联赛是参加NOI的必要条件。第1课 认识PASCAL语言Pascal是一种计算机通用的、编译型的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。是一种按结构化程序设计原则描述的高级语言。主要特点有:严格的结构化形式;丰富完备的数
2、据类型;运行效率高;查错能力强。NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言 第1课 认识PASCAL语言让我们先来看一个PASCAL程序,通过这个程序了解PASCAL的规则。例例L1_1 L1_1 已知半径,求圆周长和面积的程序。程序说明:程序说明:PROGRAM circle(input,output);(*第第1行:程序首部行:程序首部 *)CONST(*第第2行:常量说明行:常量说明*)PI=3.14159;VAR(*第第4行:变量说明行:变量说明*)r,l,s:real;BEGIN(*第第6行:语句部分行:语句部分*)read(r);(*第第7行:输入
3、语句行:输入语句*)l:=2*PI*r;(*第第8行:赋值语句行:赋值语句*,计算周长,计算周长)s:=PI*r*r;(*第第9行:赋值语句行:赋值语句*,计算面积,计算面积)write(r,l,s);(*第第10行:输出语句行:输出语句*)END.(*第第11行:语句部分以行:语句部分以END.结束结束*)完整的PASCAL程序框架Program 程序名(程序参数表);Label 标号说明;Const 常量说明;Type 类型说明;Var 变量说明;Function 函数说明;procedure 过程说明;begin 程序语句;end.1、PROGRAM写在最左边顶格;2、注释的大括号、和C
4、ONST、VAR、BEGIN、END等语句上下对齐,且它们比PROGRAM向右移两个字符;3、各个语句和程序语句也是上下对齐,它们比第2点中的各语句又向右移两个字符;4、语句间多余空格与空行,编译时会忽略。数制的转换1、常用的进位计数制有:十进制、二进制、八进制、十六进制。名称基数标志符十进制0,1,2,3,4,5,6,7,8,9,D二进制0,1B八进制0,1,2,3,4,5,6,7Q十六进制0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,FH十进制D二进制B八进制Q十六进制H00000001000111200102230011334010044501015560110667011
5、177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F161000020103、十进制与二进制的相互转换例1:将十进制数20.6875转换成二进制数。(1)整数部分的转换:“除以2倒序取余法”。2 20 0 2 10 0 2 5 1 2 2 0 2 1 1 0(2)小数部分的转换:“乘2取整法”。0.6875 0.3750 0.75 0.5 2 2 2 2 1.3750 0.75 1.5 1.0 1 0 1 1 正序取整倒序取余合在一起得:(20.6875)10=(10100.1011)2例2:将(11
6、001.0101)2转换成十进制数。(11001.1101)2=124+123+022+021+120+12-1+12-2 +02-3+12-4 =16+8+1+0.5+0.25+0.0625 =(25.8125)10 十进制数和二进制数的转换可以推广 到十进制与八进制、十进制与十六进制数的转换。如十进制数转换在八进制数的方法是:“除以8倒取余法”;十进制小数转换成八进制小数的方法是:“乘8取整法”。课堂作业:(1)(1101101.101)2 =()10 (2)(45.625)10 =()2第2课 PASCAL的数据类型、标识符、表达式、语句 数据对于一门程序语言是非常重要的,数据的一个非常
7、重要的特征就是它的类型。PASCAL规定:程序中出现的变量必须先说明才能使用。二个值,即整数类型v包括正整数(+号可略)、负整数和零。v1,204在会计统计中是允许的,但在pascal中是非法的。v整数类型的标识符为integer,取值范围为:-32768n 32767。v在free pascal中,允许整数采用十六进制(前加$)或二进制(前加%)表示。如 x:=%101,相当于 x:=5 ,y:=$10,相当于y:=16 v整数的类型:名称类型标识符数据范围短整型Shortint-128127长整型Longint-21474836482147483647字节型Byte0255字型Word06
8、5535整数类型Int64-92233720368547758089223372036854775807无符号整数Qword int64018446744073709551615注意:int64int64不是有序类型。直接给一个不是有序类型。直接给一个 int64int64类型的变量赋值一个超过类型的变量赋值一个超过longintlongint范围范围的整数是非法的,这是因为的整数是非法的,这是因为free pascalfree pascal在表达式的计算中默认最大类型为在表达式的计算中默认最大类型为longintlongint。标识符v标识符是以字母开头的字母、数字组合,用来表示常量、变量、
9、类型、文件、函数、过程或程序的名字。vx,y,max,min,sum,a15,a3b7都是合法的标识符。而v5x,x-y,ex10.5都是非法的标识符。v标识符的长度一般不要超过8个字符。v标识符的选取最好有一定意义,这样便于记忆,也增加了程序的可读性。表达式和运算符 v算术运算符:+,-,*,/,div(整除),mod(取余)v关系运算符:=,=,v逻辑运算符:AND,OR,NOTv表达式就是将数据和运算符结合使用,组成一组有意义的运算式。v在PASCAL语言中规定,表达式按下列运算优先规则计算:1、所有括起来的子表达式必须先计算,且子表达式必须从里到外计算;2、在同一子表达式中的运算符按下
10、列次序计算:函数;NOT;AND,*,/,DIV,MOD;OR,+,-;,=,3、在同一个子表达式中,同一优先级的运算按从左到右的次序进行。4、MOD运算结果的符号总是和被除数相同,而与模无关。-15 mod 6=-3 -15 mod(-6)=-3 15 mod(-6)=3 PASCAL程序中的运算优先规则 常量与变量v常量定义格式:const =;要求如下:1、要放在程序说明部分。2、必须遵循先定义后使用的原则。3、不允许重复定义,或一次定义多个常量。例如:const a=1;a,b=10;c=1 or 2;d:=3;v变量定义格式:var :类型标识符;例如:var a,b:integer
11、;x,y:real;ch:char;t:boolran;但下列说明是非法的:例如:var a,b=integer;ch:char;ch :boolean;a,b后面不能用=,ch不能重复定义。变量一经说明,系统就为其分配内存。程序中使用该变量时,就要在相应的内存单元读写数据,称为对变量的访问。顺序结构程序设计1 1、赋值语句、赋值语句 赋值语句的格式:变量标识符:=表达式;功能:赋值语句是先执行计算表达式的值,然后赋值给变量标识符。说明:(1)”:=“称为赋值号,不要与”=“混淆。赋值有方向性,左边只能是变量,不能是表达式,如 x:=1是非法的。(2)赋值号两边的类型必须相同,但是整型表达式可
12、以赋值给实型,反之不成立。(3)一个赋值语句只能给一个变量赋值,变量可以赋值多次,但只保留最后一次的值。(4)被赋值的变量可以作为表达式因子参与运算,如:i:=i+1;是合法的。(5)对变量的赋值是对变量的存入访问。如d:=a;语句执行后,d的变量内容就已经是a变量的内容,但是a变量的值并没有消失与改变。在实际编程中,我们经常使用a:=a+1;作为计数器,用s:=s+x;作为累加器,用t:=t*n;作为累乘器。2、输入(read、readln)语句输入语句格式:格式1:read ;格式2:readln ();功能:执行该语句时,程序进入等待状态,等待用户从键盘输入数据,输入的数据将依次赋给变量
13、表中的变量,而后程序继续执行其他语句。说明:(1)变量表中变量超过一个时,中间用逗号隔开。从键盘输入数据时,数据的个数不能少于变量个数,否则电脑一直处于等待状态。当数据多于变量个数时,对于readln语句将其忽略,对于read语句时,会补下一句read语句读入,如果没有输入语句,也将其忽略。(2)输入数值型数据时,必须用空格或回车键分隔,最后一定要用回车键。输入字符型数据时,不能有空格与回车键,必须连续输入,因为空格与回车键也会当作字符。(3)输入的数据必须是常量,且必须与对应的变量类型相一致。(4)readln();可以没有变量名表,此时该语句等待从键盘输入回车键。v Readln(x);等
14、价于执行了二条语句:read(x);readln();3、输出(write、writeln)语句输出语句的格式:格式1 write;格式2 writeln();功能:按指定的格式将输出项的内容输出到屏幕上。说明:(1)输出项如果是多项时,各项间用逗号分隔。(2)输出项可以是常量、变量、函数、表达式。常量直接输出,变量时输出变量的存储单元内容,遇到函数与表达式时,先计算、再输出。(3)write 语句输完最后一项时,不换行,等待下一条 write语句继续输出。Writeln语句输完最后一项时换行,该语句允许没有输出项,起到换行作用。v writeln(x);等价于执行了write(x);writ
15、eln();例:X:=2;y:=3;writeln(x=,x,y=,y);writeln(x+y=,x+y,x*y=,x*y)输出结果为:x=2 y=3x+y=5 x*y=6自定义场宽(1)单场宽。单场宽。用来控制整型、字符型、布尔型数据的输出格式,不能用于实数型。格式:n 说明:n(正整数)表示输出时所占的列数。单场宽一律右对齐,前用空格。(2)双场宽。双场宽。用来控制实数的输出格式。格式:n1:n2 说明:n1表示输出总占列数,包括符号位、整数部分、小数点和小数部分;n2表示小数部分的列数。当数据突破场宽时,首先保证整数部分的有效性,小数部分按n2场宽进行四舍五入显示,但内存中仍是原来的精
16、确度。单场宽右对齐,双场宽向小数点看齐,多余的小数位数补零。例T2_1:交换两个变量的值。(1)利用中间变量)利用中间变量c,实现交换。,实现交换。Program T2_1_1;Var a,b,c:integer;Begin write(please input a,b=?);read(a,b);write(before:,a=,a,b=,b);c:=a;a:=b;b:=c;writeln(after:,a=,a:8,b=,b:8);End.(2)不用中间变量,也可实现交换。)不用中间变量,也可实现交换。Program T2_1_2;Var a,b:integer;Begin write(pl
17、ease input a,b=?);read(a,b);write(before:,a=,a,b=,b);a:=a+b;b:=a-b;a:=a-b;writeln(after:,a=,a:8,b=,b:8);End.例例T2_2:鸡兔同笼问题。已知鸡和兔的总头数鸡兔同笼问题。已知鸡和兔的总头数是是H,总腿数为,总腿数为F,求鸡和兔各多少只?,求鸡和兔各多少只?分析:设鸡为分析:设鸡为C只,兔为只,兔为R只,则只,则 C+R=H 2*C+4*R=F解得:解得:C=(4*H-F)/2,R=H-C 。程序为:程序为:Progrem T2_2;var h,f,c,r:real;begin readln
18、(h,f);c:=(4*h-f)/2;r:=h-c;writeln(click:,c);writeln(rabbit:,r);end.例T2_3:随机产生一个三位自然数,求其百位、十位、个位上的数字。分析:要产生随机数,必然用到随机函数。Random是随机函数能产生0,1之间的随机实数。随机产生三位数的表达式为:trunc(random*900)+100假设三位数X,百位数分另别为A,B,C,则存在如下关系:A=X DIV 100B=(X-A*100)DIV 10C=X MOD 10程序为:Program T2_3;VAR x,a,b,c:integer;begin randomize;它的作
19、用是每次运行程序时,random函数产生不同的随机数。起到埋种子作用。x:=trunc(random*900)+100;writeln(x=,x);a:=x div 100;b:=(x-a*100)div 10;c:=x mod 10;writeln(a:5,b:5,c:5);End.例T2_4 已知三角形的两边及夹角,求第三边及面积。数学建模:设三角形的两边及夹角分别为a,b,第三边为c,面积为s。则 ,若以角度值输入,在计算sin和cos时应转换为弧度。角度转弧度的公式为:弧度=角度180cos222abbacsin21abs 例T2_5:输入一个字符,求其序号、前导(即前一字符)、后继(
20、即后一字符)。例T2_6:输入x,y。若在圆环内,输出true,若在圆环外;输出false。圆环如图所示。讨论:如图所示,若下式1x2+y24成立则在圆环内,否则在圆环外。设布尔变量bool,当x,y在圆环内时,让它取值为true,否则取值为false。作业:vXT1_1 XT1_1 写一程序读入三角形的三个边a,b,c,计算并打印三角形的面积S。可利用下列公式计算。其中:vXT1_2 输入一个三位整数,将它们反向输出。例如输入127,输出应为721。)()(cpbpappS)(21cbap第3课 选择结构程序设计 PASCAL中有两个语句可实现选择结构:IF语句(条件语句)和CASE语句(情
21、况语句)3.2.1 IF3.2.1 IF语句的两种形式语句的两种形式IF语句又称如果语句(或称条件语句)。它的一般形式是IF(条件)THEN(语句1)ELSE(语句2)其中“条件”实际上是一个布尔表达式,它的值可以是真(true)或假(false)。在条件为真时,执行语句1,否则(条件为假)执行语句2。可以利用流程图来描述选择结构。在流程图中用菱形框表示要执行的判定,其余步骤用矩形框表示,箭头表示执行的顺序。例L3_1 火车托运行李,要根据行李的重量按不同标准收费。例如不超过50kg,按每公斤0.35元收费。若超过50kg,则其中50kg按每公斤0.35元收费,其余超过部分按每公斤0.50元收
22、费。现输入托运行李重量,要求计算并输出托运费。数学建模:设托运行李重量为weight,该问题要求根据weight是否超过50kg,按不同公式计算出托运费。设托运费为pay。weight和pay均为实型。下面给出算法。一级算法1、读入weight的值。2、根据weight的大小选择不同的公式计算pay。3、输出pay。其中第2步需求精。根据题意,可以写出计算pay的公式如下:weight50weight505.0)50(35.05035.0weightweightpay除了上面给出的IF语句形式外,PASCAL中还有另外一种IF语句形式。即IF(条件)THEN(语句)在条件为真时,执行THEN后
23、的语句。在条件为假时,不执行THEN后的语句,在两种情况下的后继语句都是IF语句的下一个语句。例例L3_2L3_2 读入三个数,找出并打印其中的最大数。解:PROGRAM L3_2;VAR a,b,c:real;BEGIN write(a=?);read(a);write(b=?);read(b);write(c=?);read(c);IF ab THEN a:=b;IF ac THEN a:=c;writeln(ZuiDaShu:,a)END.3.2.2 3.2.2 复合语句复合语句v在IF语句中,跟在THEN或ELSE后的语句可能不止一个,这时要用到复合语句的概念。v复合语句是一个以BEG
24、IN开始,以END结束的语句。在BEGIN与END之间可以包括若干个语句,每个语句之间以分号分开。一般形式为:BEGINBEGIN (语句(语句1 1););(语句(语句2 2););(语句(语句n n)ENDENDv一个复合语句从外部看来,相当于一个语句。3.2.3 IF语句的嵌套v在IF语句中,THEN或ELSE后的语句本身也可能是IF语句。此时称为IF语句的嵌套(或称为复合IF语句)。例如语句 IF(条件1)THEN(语句1)ELSE IF(条件2)THEN(语句2)ELSE(语句3)就是一个复合IF语句,在它的ELSE后又是一个IF语句。有时IF语句可能会有两种不同的理解。例L3_3:
25、有一个函数表达式为:编写程序,输入x,输出y的值。010001xxxy3.3 CASE语句 CASE语句是实现选择结构程序设计的另一种语句。它的使用有时比IF语句来得简单、直观。CASE语句(或称情况语句)的一般形式是 CASE(表达式)OF (值表1):(语句1);(值表2):(语句2);(值表n):(语句n);ELSE 语句n+1;END;在CASE语句头上的表达式必须是有序类型(整型、字符型、布尔型以及后面要介绍的枚举型、子界型)。值表是一些由逗号分开的常数。表达式所有可能的值必须在值表中出现,且每个值只能出现一次。如果当前表达式的值在某个值表i中出现,则该程序只执行对应值表i的语句i,
展开阅读全文