中学信息学奥林匹克竞赛培训教程27

上传人:d****1 文档编号:57755338 上传时间:2022-02-24 格式:DOC 页数:27 大小:416KB
收藏 版权申诉 举报 下载
中学信息学奥林匹克竞赛培训教程27_第1页
第1页 / 共27页
中学信息学奥林匹克竞赛培训教程27_第2页
第2页 / 共27页
中学信息学奥林匹克竞赛培训教程27_第3页
第3页 / 共27页
资源描述:

《中学信息学奥林匹克竞赛培训教程27》由会员分享,可在线阅读,更多相关《中学信息学奥林匹克竞赛培训教程27(27页珍藏版)》请在装配图网上搜索。

1、中学信息学奥林匹克竞赛培训教程Pasca语言和程序设计基础(第一部分)第一部分 Pascal 语言和程序设计基础预备知识基本程序结构和几个概念 ::标识符 保留字 常量 变量 运算符 表达式 标准数据类型Pacal 语言程序结构Program prog_name;var 变量申明 ;begin程序体 ;end.例如:program pname;const n=4;type arr=array 1.4 of integer;var i:integer; a:arr;beginfor i:=1 to n do read(ai);readln;for i:=n downto 1 do write(a

2、i:4);writeln;end.以上是一个 PASCAL 程序。从键盘读入 4 个数据,逆序输出。一般来说,一个 PASCAL 程序包括以下几个部分:程序头: program pname; 其中, program 是保留字,表示程序从这个地方开始,pname 是标识符,是程序的名字,可由程序员自定。保留字是 PASCAL 选定的,具有固定意义和用法的专用单词或 缩写,这些单词不允许作其它使用。如上,“program就有 程序从这里开始”这样一种特别的意义,而“cons僦有常量说明从这里开始的意义。我们不能再用“program” “const来作为其它变量、常量等的名字。 标识符是以字母开头的

3、字母数字串, 其长度最大为 8个字符。 用来表示常量、 变量、 类型、文件、过程、函数和程序的名字。女口 “pname “i、” “j、” “al就是合法的标识符; 但“1a、 “#a” 是非法的标识符。有一点要注意的是,在 PASCAL 中, 字母除了作为字符值或字符串值之外,其 大小写是无关的。如标识符“A1和“al在PASCLA看来是同一标识符。在PASCAL中除了保留字和自定义的标识符外,还有一类有特殊含义的标识符,这类标识符称为标准标识符。它们是用来标 记程序中经常引用的处理对象,如常量、函数。(PASCAL定义的保留字和标准标识符附后)标识符在命名的时候要注意:1、 名字要易记易读

4、, 有意义。如8皇后问题程序名可以是“queen也可以是“huanghou等;2、不能用保留字、标准标识符作为自定义的标识符。说明部分:const n=4;type ar=array 1.4 of integer;var i:integer; a:ar;其中, const 部分是常量说明,说明一些在以下部分用到的,在整个程序执行过程不改变值的量。这些量PASCAL称为常量。在程序中用到这个值的地方均用常量名来代替。如上题中定义“n=4”指本程序处理4个数值,在下面的程序体中就用“n”来代替具体的值(如 for i:=1 t on )。如果要改变处理数据个数,则只在常量说明部分修改“n=4这一句

5、就行了,而不用在程序中每一个用到的地方都加以修改。 这样不但在编写程序的时候很方便, 也增加了程序的可读性, 修改时更方便。 常量说明在保留字 “const ”下开始。 可以有多个语句。 常量说明语句的格式是: “常量名 =值;”。 如“ n=4;”。 n 是常量名, 4 是该常量的值, “;”是语句分隔符。type 部分是类型说明,说明一些在以下部分用到的数据类型。如数组、记录、指针等。类型说明在保留字“ type ”下开始。可以有多个语句。类型说明语句的格式是:“类型名=类型说明;”。女口“ ar=array 1.4 of integer; ”。ar 是类型名,array 1.4 of i

6、nteger是类型说明,“;”是语句分隔符。var部分是变量说明。变量是指在程序执行过程中可以通过赋值语句或读语句来改变值的量。 所有在程序中使用的变量都应该先在变量说明部分说明。PASCAL中引用的每个变量都有“名字”和“类型”属性。变量说明“说明”的主要工作是告诉PASC/下面程序中要用到这个名字的量,同时这个量的类型是什么。变量说明在保留字“ var ”下开始。可以有多个语句。变量说明语句的格式是:“变量名:变量类型;”。其中,如果有多个变量同一类型,则变量名与变量名之间用逗号分隔,变量名与变量类型 之间用冒号分隔。如“ i : integer ; (i是变量名,integer是类型名)

7、、“i j : integer ; (i、j 是变量名,integer是类型名)变量说明要注意:1、有效变量名称不能大于8个字符;2、变量名称必须以字母开头;3、在同一个有效范围内变量名称必须唯一。各个说明部分均以该部分的保留字开始。如“const ”开始常量说明;“type ”开始类型说明;“var ”开始变量说明。一个程序包含多少种类型的说明,看需要而定,不是每一个程序都必须同时包含这三种说明。如果程序不须要用到常量,则常量说明部分可以省略;如果不须要用到类型说明,则类型说明可省PASCAL还有一条规则:先说明后引用。即所有在程序体中用到的“名字”必须都在说明部 分说明过才能引用,否则就会

8、出错,通不过编译,也执行不了。如上,类型“ar ”先在类型说明中定义,然后在变量说明中引用;变量 i在变量说明中定义,在程序中引用。程序体:beginfor i:=1 to n doread(ai);readl n;for i:=n dow nto 1 dowrite(ai:4);write In;en d.程序体是以begin end.括起来的语句系列。“end”后面是一个小圆点,标识着程序结束, 整个程序只有一个是一个程序的主要部分。编程要完成的工作大部分都在这里完成。程序体中每一语句均以“;”作为结束符。在书写程序时,以“分层缩进”的风格来写,以便提高程序的可读性。 所谓的“分层缩进”是

9、指在逻辑上同一级的语句其起始点对齐,下一级的语句向右缩进。 运算符 表达式PASCAL中的运算符有算术运算符和关系运算符。和我们在数学课中学的基本一样但在写法上有些 不同,在写程序时要特别注意写法的不同:+加号;-减号;*乘号(数学中写为 x ) ;/除号(数学中写为 十);MOD 取余女口:8 MOD2=0,7 MOD2=1,2 MOD3=2; DIV 取整女口: 8 DIV 2=4, 7 DIV 2=3, 2 DIV 3=0。在 PASCAL只有上面6种数学运算。其它的就只能利用这 6种运算的组合通过语句来实现。如aA2 (a的平方)可以化成a*a。大于; 小于; 不等于(数学中写为 工)

10、; =大于等 于(数学中写为 ),变量、常量通过运算符连接起来的式子我们称为表达式。一个单独的变量或常量也是表达式。 如a、a+3、a*3+b都是表达式。写表达式时要注意PASCAI表达式跟我们已经熟悉的数学表达式在格式上的区别:数学表达式PASCAI表 达式注意2a2*a*号不能省略a+ ba/b除号的写法bab不等号的写法a ba = = :=( ).,:$ A( *) 其中,有些符号是以双字符作为一个整体,拆开后就失去原有的意义。如“”是一个表示“不等于”的关系运算符,如拆开后就变成了两个关系运算符,分别表示“小于”、“大于”。PASCAL使用的保留字有:AND、ARRAY、BEGIN、

11、CASE、CONST、DIV、DO、DOWNTO、ELSE、END、FILE、FOR、 FUNCTION、GOTO、IF、IN、LABEL、MOD、NIL、NOT、OF、PACKED PROCEDURE PROGRAM、 RECORD、REPEAT、SET、THEN、TO、TYPE、UNTIL、VAR、WHILE、WITH、FORWARD常用的标准标识符有:标准常量:FALSE TRUE MAXINT MAXLONGINT标准类型:INTEGER BOOLEAN REAL CHAR TEXT标准文件:INPUT OUTPUT标准函数:ABS ACTAN CHR COS EOF ELONEXP

12、LN ODDORD PRED ROUND SIN SQR SQRT SUCC TRUNC标准过程:ASSIGN GET NEW DISPOSE PACKPUT READREADLN RESET REWRITE UNPACK WRITE WRITELN函数格式:function fun_name(参数表):数据类型;var变量声明;begin函数体;en d;例题:写出计算两个整数 a,b的和函数add(a,b)。过程格式:procedure proc_name(参数表);var变量声明;begin过程体;en d;例题:写出在屏幕打印一行文字:” hello,Pascal Ianguage i

13、s very easy!函数和过程的调用:【xoi00_01.pas 】例题:从键盘输入:a,b两个数,输出由这两个数为直角边的三角形的面积。 program xoi00_01;function area(c onst a,b:real):real;var s:real;begins:=a*b/2.0;area:=s;en d;procedure myproc;var a,b:real;s:real;beginwrite(Please in put two nu mber a,b:);readl n( a,b);s:=area(a,b);writeln(the area of trian is

14、: ,s:5:2);en d;= main program =beginmyproc;en d.练习:一、判断以下标识符的合法性:a3 3a a17 abcd ex9.5a 3 入二、将下列的数学表达式改写成 PASCAL表达式:bA2-4ac三、求下列表达式的值:20 mod 19,15 mod 9,7 div 8, 19 div 3,(45) and (79) or ( 910)2 and (3=3) or (37)第一节顺序结构它就是按照程序书写的顺序逐句执顺序结构是程序设计中最简单的结构,也是最基本的结构,行程序中的指令。流程图如下:例题:计算圆的周长的过程:输入圆的半径;(操作一)计

15、算圆的周长;(操作二)输出圆的周长;(操作三)基本的程序语句:赋值语句:般形式为:赋值语句是最简单的语句,其:=;“:=称为赋值号,赋值语句的作用是计算表达式的值,并赋给变量。对于任何一个变量必须首 先赋值,然后才能引用,否则,未赋初值的变量将以一个随机值参与运算。另外,赋值号两边的类 型必须相同,但表达式值为整数时,它可自动化为实型后赋给该实型变量,即符合赋值相容。如:Pi:=3.14;R:=2;Age:=20;S:=Pi*R*R例:关于赋值的例子prssogram example; var a,b:i nteger; begina:=3;b:=2; a:=a+b;writel n(a);w

16、riteln(b);end.输入语句通过计算机的外设把数据送到计算机内存的过程称为输入。 Turbo Pascal 语言的输入语句有如 下两种形式:read();readln(); 是一个或几个由逗号隔开的变量标识符,他们必须在程序说明部分预先说明,他 们可以是整型、实型或字符型,布尔型不可以直接读入。例如a, b,c 为整型变量, read(a,b,c)之后,键盘输入: 20 30 40 ( 表示回车 ),结果:a=20 , b=30 ,c=40readln 语句和 read 语句不同之处在于输入数据到各变量之后, readln 自动换行,从下一行开始再 输入数据。一个 read 语句执行完

17、后,数据行中多余的未读数据可以被下一个输入语句读入;而一 个 readln 于执行完后,数据行中多余未读数据就没有用了。 readln 语句中可以不包含变量名表。 即有以下等价情况:read(a,b);readln 等价于 readln(a,b)输入语句输入的数据类型必须和变量一一对应。 如果输入的是一串整数或实数, 数据间用空格 或回车分隔;若输入的是一串字符,则不用分隔。输出语句输出是将内存中的数据送到外设的过程。 Turbo Pascal 的输出语句有两种形式: write();writeln();其中 是一串用逗号分隔的常量、变量、函数名、表达式或字符串。如果是变量、 函数名、表达式,

18、则将其计算结果输出;如果是常量或字符串,则直接输出其值。write 和 writeln 的区别在于: write 语句是输出项输出后,不换行,光标停留在最后一项后, writeln 语句按项输出后,自动换行,光标则停留在下一行的开始位置。writeln 语句允许不含有输出项,即仅 writeln; 表示换行。Turbo Pascal 语言把输出项的数据显示占用的宽度称为域宽, 你可以根据输出格式的要求在输 出语句中自动定义每个输出项的宽度。定义宽度时分为单域宽和双域宽。单域宽输出格式: writeln(I : n);在 n 个字符宽的输出域上按右对齐方式输出 I 的值,若 n 大于 I 的实际

19、位数,则在 I 值前面补 (n-I 的实际位数)个空格。若I的实际位数大于 n,则自动突破限制。n必须是整数。双域宽输出格式: writeln(a :n: m);双域宽主要用于实型数据的输出。 n 的用法同上。在 n 个字符宽的输出域上按右队齐方式用小 数点形式输出 a 的数值, m 是小数点后的位数。原来的数据按该该格式指定的小数位数四舍五入。 若 m=0 ,则不输出小数部分和小数点,原数据四舍五入取整。n, m 必须是整数。例:输出语句的例子 program shuchu;const s=pascal;var i:integer;r:real;c:char;b:boolean;begini

20、:=12345;r:=123.45c:=a;b:=true;writeln(i=);writeln(i:6);writeln(r=,r,r:6:1);writeln(c=,c,c:10);writeln(b=,b,b:10)end.复合语句复合语句是由若干语句组成的序列,语句之间用分号“;”隔开,并且以 begin 和 end 括起来,作为一条语句。复合语句的一般形式:begin语句 1;语句 2;语句 n;end; 例:变量值的交换 program swap;var a,b,t:integer;begin a:=10;b:=20;begint:=a;a:=b;b:=t;end;writeln

21、(a=,a,b=,b)end.例题 1 :输入圆的半径,求出圆的周长和面积:Progam CalCircle;var R,C,S:Real; 变量声明 beginwrite( 输入圆的半径 : );readln(R);C:=2*Pi*R;write( 周长 = ,C);readln;S:=Pi*sqr(R);sqr(R)=R*Rwrite( 面积 = ,S);readln;end.例题 2 :找出下面程序中的语法错误。Program Example1;R2R1R2R1计算圆环面积的程序, R2 表示外圆环的半径, R1 表示内圆环的半径, var R1,R2:Real;beginS=(R2+R

22、1)*(R2-R1)*Pi Pi=3.14 为常数 writeln(s)end;纠正以后的程序Program Example1;计算圆环面积的程序, R2 表示外圆环的半径, R1 表示内圆环的半径, var R1,R2:real;S:real; 每一个变量都必须声明 beginS=(R2+R1)*(R2-R1)*Pi; Pi=3.14 为常数 writeln(s);语句必须以;结束end. 主程序必须以“结尾练习: 编写程序实现以下功能:1、输入三角形三边的长,计算三角形的面积。计算公式:s Fp(p a)(p b)(p -c)a +b +cpPascal程序中计算平方根的函数为:sqrt(

23、x);x:real; x - 0基本要求:有友好的输入输出界面,不需要考虑输入的a,b,c是否可以构成三角形,假设输入的数据符合要求。第二节IF分支结构形式的判断在例题:输入一个考试分数,如果大于等于60就说恭喜你考试及格,如果小于60就说真差劲,要努力哦!program JudgeScore;输入分数t score;如果Score 60那么输出否则输出“恭喜你考试及格”“真差劲,要努力哦”“如果那么” 供选择的操作序列组成。 形式的ififPascal中使用If语句来实现。IF语句是由一个布尔表达式和两个 有两种运行时根据布尔表达式求值结果,选取其中之一的操作序列执行。IF语句:elseth

24、en ; then ;当布尔表达式的值为真,则执行 then后面的语句,值为假时有两种情况:要么什么也不做, 要么执行else后面的语句。注意 else前面没有分号,因为分号是两个语句之间的分隔符,而else并非语句。如果在该处添了分号,则在编译的时候就会认为if语句到此结束,而把 else当作另一句的开头,输出出错信息。 前面例题的Pascal程序代码:Program JudgeScore; var score:real; 声明分数变量 score beginreadln(score);输入分数if score=60 the n);begin score代表分数的变量writeln(恭喜你,

25、考试及格!end else begi n);writeln(真差劲,要努力哦!end; end if score=60 en d.例:求 y=f(x),当 x0 时,y=1,当 x=0 时,y=0,当 x0 the n y:=1;if x=0 the n y:=0;if x0时候,计算x*x,并且输出x和x*x。 program lia nxi;var x,x1:real;beginread ln( x=,x);if x= the nbeginx1:=x*x;writel n(x*x=,x1);writel n( x=,x);en d;en d.当if语句嵌套时,Turbo Pascal约定e

26、lse 总是和最近的一个if配对。前面介绍了 If语 句的使用情况,下面来概括if判断语句的使 用方法。分支结构的基本情况:if条件成立then begin处理;en d;下一语句;if条件成立then begin操作B;end else if 条件不成立 then begin操作A;en d;下一语句; 练习:写出下列关系表达式和逻辑表达式的Pascal语句:1、 区分合格和不合格:x = 602、 60 分到 70 分之间:(x = 60 ) and ( x =70 )3、 判别闰年的条件(年份能被4整除,并且不能被100整除;或者能被400整除的整数年份):(ymod 4 = 0) an

27、d ( y mod 100 0 ) or ( y mod 400 = 0)编写程序实现下列功能:1、从键盘读入一个数,判断它的正负。是正数,则输出 +,是负数,则输出-2、输入a,b,c三个不同的数,将它们按由小到大的顺序输出3、 铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤 0.15元计费;如超50公斤,超 过部分每公斤加收 0.10元。编一程序完成自动计费工作。4、 打印某年某月有多少天。(提示:A、闰年的计算方法:年数能被 4整除,并且不能被100整除; 或者能被400整除的整数年份。B、利用MOD运算可以判断一个数能否被另一个数整除)5、从键盘输入3个数a,b,c输出其中最

28、大的数。第三节Case分支结构case语句是由一个表达式和众多可选择的操作序列组成。运行时,根据表达式的求值结果, 在众多的分支中选取一个分支执行。其形式为:case 表达式 of常量1:语句1;常量2:语句2;常量n:语句n;else 语句n+1;可选项en d;表达式只能是顺序类型(除了实型以外的简单类型),其值必须是唯一确定并且和表达式类型相同。case语句执行和表达式值相匹配的case常数所指向的那条语句,如果没有相匹配的值,则执行else部分(如果有的话)或者什么也不做。在 else前面的语句末尾有分号,这是和 if语句不同的。 Case表达式的应用:例题:输入一个考试分数(整数),

29、根据分数情况报告相应的信息。0 Ex c60不及格丿60兰x =0)a nd(s=100)the ncase s div 10 of10,9:ch:=A;8:ch:=B;7,6:=C;else ch:=D;en d;writel n(s,- ,ch);en d.练习:1、 我们把字母作如下的分类:大写字母:A ;.小写字母:a数字z;0 ;其他字母,编 写一个程序,根据上述分类的方法,输入一个字母,报告该字母所属的类型。2、 某超市为了促销,规定:购物不足50元的按原价付款,超过 50不足100的按九折付款, 超过100元的,超过部分按八折付款。编一程序完成超市的自动计费的工作。第四节for循

30、环结构程序设计时我们经常要做一些重复的任务通过反复的执行某一个动作来完成任务,编写这一类程序我们使用循环结构来实现。 如计算1+2+3+-.+ 100。Pascal中循环结构通过使用 For、While、 Repeat三种语句来实现。For语句是形式最简单的循环语句。N瓦i例题1:输入正整数N,计算i4N送i分析: V = 1+2+31+N,因此我们必需重复的执行S:=S+i,其中S代表和,S=1i=1S=1+2i=2S=1+2+3i=3S=1+2+3+4i=4S=1+2+3+4+Ni=Ni从1变化到N,计算前I项的和:1+2+3+I,写成Pascal代码如下: For i:=1 to N D

31、O S:=S+i;i 从 1 变化到 N 重复执行 S:=S+i完整的程序如下:Program Example1_4VarN,I,S:i nteger;Begi nWrite(输入正整数 N: );Readln(N);S:=0;For I:=0 to n do S:=S+I;Writeln(1+2+3+ ,n, = ,s);End._I静入正整数1 +2+3+D 0=S05 0FOR循环有两种形式:升序形式:for 控制变量 := 初值 to 终值 do 语句降序形式:for 控制变量 := 初值 downto 终值 do 语句 for语句功能描述:虽然for循环形式简单,但是执行的机制却很复

32、杂。其基本过程如下:=4-1. 计算初值并记忆2. 判断初值是否超出终值、如果超过则执行步骤7,否则执行步骤33. 把初值赋给控制变量4. 执行do后面的语句(循环体)5. 判断控制变量的值是否达道终值,如果是则执行 步骤6,否则执行步骤76. 控制变量取下一个值(升序取后继,降序取前驱)7. (循环结束)执行下一语句.例题:编写程序输出序号从32到126的ASCII字符与对应#wp u z27272727272727272723344556677889900112! Aft * D 5 - - D I H s K lb 91 Q v 3 838383838_3 8_3-8 3-838333t

33、ft-556fi7 7 88 UJ-5fln23540话505560657D75# c _27AFK515661U717638B0SOP81qTUuV4z*111011061111161211261D0ms110115120125于控制换行,每行写 5个字符的对应关系。代码之间的对应关系。每行输出5个字符,输出结果如下如所示。(Example4_2)program example4_2;var i, j: byte;beginfor i := 32 to 126 dobeginif (j mod 5 = 0) the n write In;write(i: 5, chr(i): 2); j :

34、= j + 1;en d;en d.程序说明:标准函数chr(i)可以得到代码为i的字符。j mod 5 求 j 模 5 的余数。语句 if (j mod 5 = 0) then writeln;用语句 write(i: 5, chr(i): 2);用于格式化输出结果。编程元成下列计算:N1、4、i2 =12 22. N2i 41 1(-1)n 11 _ _ + _ _+ -_-23 n把数码1 , 2 , 3, 4 ,,9分成3组,每组构成一个 3位数,使这3个3位数恰好成1 : 2: 3 , 该怎样分?求出所有的解答来。(如:192 , 384 , 576就是一组解答)求出所有的三位数 x

35、yz,它除以11所得余数等于它的三个数字的平方和。第五节 while、repeat循环结构While语句是另外一种实现循环的语句,一般形式如下:While 条件 do 语句While循环的执行过程如下:1. 判断条件是否成立,条件成立时执行步骤2,否则执行步骤42. 执行do后面的语句(循环体)3. 返回步骤14. 结束循环,执行下一语句注意:一定要有使条件取假(False)的时候,否则会出现死循环。例题:从键盘输入一批学生考试数据,统计这些数据中大于80的数的个数。分析:因为学生的人数没有确定,因此不方便用for循环来完成此项工作,但是用while循环比较容易实现。(example4_3)w

36、hile score=0 do输入一个学生成绩t score;计算总分;Pascal 代码:while score = 0 dobeginreadl n( score);total := total + score;en d;完整的程序代码:program example4_3;varscore: in teger;total: in teger;c: char;beginwriteln(输入学生分数:);readl n( score);total:=0;while score = 0 dobeginreadl n( score);total := total + score;en d;wri

37、teln(总分为:,total);read(c);en d.Repeat语句与while语句基本类类似,只是while先判断条件,reapeat语句先执行循环体然后再判断。Repeat语句;循环体部分Un til 条件;循环结束条件执行过程如下:1. 执行循环体2. 判断条件,如果布满足重复1,否则 执行步骤33. 结束循环,执行下一语句例题:改写 Example4_3程序使用Repeat循环语句实现。(Example4_4)program example4_4;varscore: in teger;total: in teger;c: char;beginwriteln(输入学生分数:);t

38、otal := 0;repeatreadl n( score);total := total + score;un til score 0;writeln(总分为::total);read(c);en d.练习:1、计算下列式子的值:(1) 1+3+5+- +99(2) 1+2+4+8+ +128+256+512+1024(3) 1+(1+2)+(1+2+3)+ +(1+2+3+4+N)1 3 5 8 13 212、 有一分数序列:2 2 3 5 8 13求出这个数列的前20项的和。3333、 求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a b c - abc,则abc是水 仙花数

39、。4、 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)5、 输入一整数A,判断它是否质数。(提示:若从2到A的平方根的范围内,没有一个数能整除A,则A是质数。)6、 求两个数的最小公倍数和最大公约数。(提示:公约数一定小于等于两数中的小数,且能整除 两数中的大数。公倍数一定大于等于两数中的大数,且是大数的倍数,又能给两数中的小数整 除。)7、 编写一个译码程序,把一个英语句子译成数字代码。译码规则是以数字1代替字母A,数字2代替字母B ,26代替字母Z,如遇空格则打印一个星号竽英文句子以结束。8 百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买

40、一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多 少只?与之相似,有”鸡兔同笼”问题。9、输入一个正整数 N,把它分解成质因子相乘的形式。如:36=1 X 2 X 2X 3 X 3; 19=1 X 19(提示:设因子为I,从2开始到N,让N重复被I除,如果能整除,则用商取代N , I为一个因子; 如果不能整除,再将I增大,继续以上操作,直到I等于N。)10、编程实现:求 Sn =a aa aaa . aaaaaa之值,其中 a是一个数字。例如:222222222222222 (当 n=5 时),n 由键盘输入。11、一个数如果恰好等于它的因子之和,这个数就称

41、为“完数” 。例如:6的因子为1、2、3, 而6 = 1 + 2 + 3,因此6是“完数”。编程序找出1000以内的所有完数。aX bY 二 c12、编一程序,输入a,b,c,d, e,f,然后解出方程组dX- e丫二f的解。第六节数据类型简单数据类型Pascal 语言基本数据类型由:integer(longint,shortint,byte),real,char,Boolean.等构成。自定义数据类型:我们可以在基本数据类型的基础上定义新的数据类型,类型定义的保留字为“ Type ”,格式为:TYPE=如:TypeMyLon g=L ongint;枚举类型:“枚举”的意思就是把所需要的对象都

42、一个一个的列举出来。比方说星期是一个只有7个元素的数据,因此我们可以定义一种数据类型 TWeekDay代表星期,如果一个变量定义为 TWeekDay类 型,那么他的取值范围就是 Sunday.Saturday ,另外颜色TColor也一样。习惯上我们在 自定义类 型名称前加上“ T”,女口 TColor,TWeekDay,而且单词以大写字母开始。TypeTWeekDay=(S un day, Mon day,Tuesday,Wed nesday,Thursday,Friday,Saturday);TColor=(Red,Yellow,Blue,Gree n.P urple,White,Blac

43、k);枚举变量的第一个代表0 ,第二个 代表1,以此类推,如上面定义的TweekDay类型,Sunday=0 ,Monday=1 ,,Saturday=6 。例题:输入今天的日期数字:0= Su nday , 1 = Mon day , 6= Saturday,输出明天的日期,用英文单词表示。【xoi00_02.pas】program xoi00_02;Type TWeekDay=(S un day, Mon day,Tuesday,Wed nesday,Thursday,Friday,Saturday);var today,tomorrow:TWeekDay;nu mber,i:i nteg

44、er;beginwrite(E nter today nu mber:);read ln(nu mber);if (nu mber6) the nwrite In (Error nu mber)else beg intoday:=S un day;for i:=0 to number-1 do today:=succ(today);if today=Saturday thentomorrow:=Saturdayelsetomorrow:=succ(today);write(Tomorrow is:);case tomorrow ofSunday:writeln(Sunday);Monday:w

45、riteln(Monday);Thursday:writeln(Thusday);Wednesday:writeln(Wednesday);Thursday:writeln(Thursday);Friday:writeln(Friday); Saturday:writeln(Saturday);end;if today=saturday thenend;if (number6)end.子界类型: 子界类型是在其它的离散类型的值域中取出一部分构成独立的类型。 子界类型的一般定义形式如下:TYPE=.;如: TYPE Tmonth=1.12;TYPE Tscore=0.100;例 按月、日、年顺序

46、读入一日期,输出该日期是这一年中的第几天。program date;var year:0.2010;month,i:1.12;day:1.31;dayth:integer;beginread(month,day,year);dyath:=0;for i:=1 to month-1 docase i of1,3,5,7,8,10,12:dayth:=dayth+31;2:if (year mod 4=0)and(year mod 1000)or(year mod 400 =0)then dayth:=dayth+29else dayth=:=dayth+28;4,6,9,11:dayth:=da

47、yth+30;end;dayth:=dayth+day; writeln(dayth) end.数组类型:定义数组:Type数组类型标识符 =Array 下标类型 OF 数组元素类型 数组元素类型本身也可以是复杂的自定义类型,如子界类型,数组类型,记录等。 例如:定义存放学生姓名的字符数组:TYPE TName=Array1.20 of Char;定义一个存放班级学生 (50 人 ) 名单的数组:TYPE TStudents=Array1.50 of TName也可以这么定义:TYPE TStudents=Array1.50 of Array1.20 of Char;例 1:输入 5 个考分数

48、,计算它们的总分。 【 xoi00_03.pas 】 program xoi00_03;Type TScore=Array1.5 of integer;var score:TScore; i:integer;sum:integer;beginfor i:=1 to 5 dobeginwrite(Enter Number #,i);readln(scorei);end;sum:=0;for i:=1 to 5 dobeginsum:=sum+scorei;end;writeln(Total Score is:,sum);end.例 2 :从键盘输入 10 个数,将这 10 个数逆序输入,并求这

49、10 个数的和,输出这个和。 program p1;vara: array1.10 of integer;i, s: integer;beginfor i := 1 to 10 do read(ai);for i := 10 downto 1 do write(ai, );writeln;s := 0;for i := 1 to 10 dos := s + ai;writeln(s=, s);end.例 3 :用筛法求 100 以内的素数(质数) 。分析:素数是除了 1 和它本身以外没有其它约数的数。用筛法求素数的方法是:用质数筛去合数: 从第一个素数 2开始,把它的倍数去掉; 这样 2以后的

50、第一个非 0 数就一定也是素数, 把它的倍数 也删了重复这个删数过程,直到在所找到的素数后再也找不到一个非0数。把所有非0数输出。program p2;vara: array1.100 of integer;i, j, k: integer;beginfor i := 1 to 100 do ai := i;a1 := 0;i := 2;while i = 100 dobegin k := i;while k = 100 dobegink := k + i;ak := 0;end; 上面将所有 ai 的倍数清 0i := i + 1;while ai = 0 doi := i + 1; 查找接

51、下来的第一个非 0 数end;for i := 1 to 100 doif ai 0 then write(ai, );end.字符串类型: 如果数组存放的是字符,则成为字符数组。例如前面提到的学生姓名 :Tname 可以存放 20 个 字符。为了操作方便 Turbo Pascal 提供了字符串类型和操作函数。字符串类型 :String 。例如前面 的学生姓名可以定义为: Type TName=String20;字符串定义时,如不指定长度,则按该类型的最大长度( 255 个字符)分配空间,使用时最大 可用长度为 255 个;如果在中括号中给出一个具体的值(1 255 之间),则按这个值的大小分

52、配空间。使用时,最大的可用长度即为该值。字符串类型既可按数组方式输入、输出,也可直接输入、输出:readln(s); writeln(s) ;多个字符串输入时以回车作为数据间的分隔符;每个 readln 语句只能读入一个字符串。操作函数:连接函数:con cat(s1,s1,sn),相当于:S1+S2+Sn截取子字符串:copy(S,l,L),从字符串S左边第I个字符起连续截取 L个字符。 长度函数: length(S) ,计算字符串 S 的长度。 Length(S)=Ord(S0) 子串点的函数:pos(P,S),返回P在S中第一次出现的位置。删除子串过程: delete(S,I,L) ,在

53、 S 中从的 I 个字符起删除 L 个字符。 插入子串函数: insert(S,D,L) ,在 D 中的第 I 个字符位置插入字符串S。记录类型: 记录类型由固定数量的具有不同类型的成分组成,在实际的程序设计中,这种类型非常有用,比方说学生的信息包括:学号,姓名,语文,数学,英语成绩,平均分等组成,用一个简单的数据 类型无法表达。我们可以这样定义:TypeTScore=0.100;TScores=Array1.5 of TScore;TStudent=RecordNO:String5;Name:String16;Score:TScores;Avg:Real;End;End Type TStud

54、ent TStudents=Array1.50 of TStudent;在程序中可以使用 Var student:Tstudents; 定义一个学生变量, 可以使用 student1.Name 来访问学 生的姓名。集合类型: 集合是指相同类型的数据汇集在一起构成的数据结构,如学生集合,类似于数学中的集合,但是构成集合的数据类型必须是简单的离散类型,如:Byte , Shortint , Longint , char , Boolean ,枚举 ,子界类型。定义:Type= Set of ;例如:Type UperLetters= Set of A . Z;Type EvenDigits=Set of 0,2,4,6,8;集合的运算:并:+;差:;相等:=;不等: ;包含: =;包含于: =;属于:in ; 具体含义参考数学中的集合运算。例 4:传说中有一个残暴的国王,喜欢杀戮百姓。有一次,他抓到30 个百姓并要一一杀掉。在这30 个百姓中间有一个聪明人, 他站出来对国王说: “请国王大发慈悲, 赦免二人不死。 ”国王问: “赦 免哪二人不死? ”那个聪明人回答说: “我们 30个人围成一圈,从 1开始报数,凡数到 5 的人就拉 出去杀掉。剩下的人继续从 1 开始报数,循环反复,直到剩下两个人为止,这两个人被

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!