noip初赛复习——程序设计基础.docx.pdf

上传人:tbuqq 文档编号:5616182 上传时间:2020-07-02 格式:PDF 页数:22 大小:264.42KB
返回 下载 相关 举报
noip初赛复习——程序设计基础.docx.pdf_第1页
第1页 / 共22页
noip初赛复习——程序设计基础.docx.pdf_第2页
第2页 / 共22页
noip初赛复习——程序设计基础.docx.pdf_第3页
第3页 / 共22页
noip初赛复习——程序设计基础.docx.pdf_第4页
第4页 / 共22页
noip初赛复习——程序设计基础.docx.pdf_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《noip初赛复习——程序设计基础.docx.pdf》由会员分享,可在线阅读,更多相关《noip初赛复习——程序设计基础.docx.pdf(22页珍藏版)》请在三一文库上搜索。

1、OK备战NO IP 2010提高组初赛复习程序设计基础篇 第一章简单程序 2 第一节Pascal程序结构和基本语句 2 第二节顺序结构程序与基本数据类型 4 第二章分支程序 6 第一节条件语句与复合语句. 6 第二节情况语句与算术标准函数. 7 第三章循环程序 9 第一节for循环. 9 第二节Repeat 循环 13 第三节While循坏 . 14 第四章函数与过程. 16 第一节函数 . 16 第二节自定义过程 . 17 第五章Pascal的自定义数据类型 18 第一节 数组与子界类型 18 第二节二维数组 . 21 第一章简单程序 程序设计语言,是一组用来定义计算机程序的语法规则。它是一

2、种被标准化的交流技巧, 用来向计算机发出指令。按语言级别有低级语言和高级语言之分。 低级语言包括机器语言和汇编语言。它的特点是与特定的机器有关, 功效高,但使用 复杂、 繁琐、费时、易出差错。 高级语言的表示方法要比低级语言更接近于待解问题的表示方法,其特点是在一定程度上 与具体机器无关,易学、易用、易维护。由于当高级语言程序翻译成相应的低级语言程序时, 一般说来,一个高级语言程序单位要对应多条机器指令,相应的编译程序所产生的目标程序往 往功效较低。 ( 例:Pascal C、C+、Java等) 第一节 Pascal 程序结构和基本语句 在未系统学习Pascal语言之前,暂II绕过那些繁琐的语

3、法规则细节,通过下面的简单例题, 初步掌握Pascal程序的基本组成和基本语句的用法。 例1.1编程在屏幕上显示 a Hello World! Pascal 程序: Program exll; Begin Writeln(Hello World!*); Readln; End. 这个简单样例程序,希望大家的程序设计学习能有一个良好的开端。程序中的Writein是一 个输 出语句,它能命令计算机在屏幕上输出相应的内容,而紧跟Writein语句后是一对圆括号,其中 用单引号引起的部分将被原原本本地显示出来。 例1? 2已知一辆自行车的售价是300元,请编程计算mim辆自行车的总价是多少 ? 解:若

4、 总售价用m來表示,则这个问题可分为以下儿步处理: 从键盘输入自行车的数目a; 用公式m=300*a计算总售价 ; 输出计算结果。 Pascal 程序: Program Exl2; Var num9total: integer; Begin ReadLn(num); total := 300*num; Writeln( ftotal=total); Readln; End. 此题程序结构完整,从中可看11!一个Pascal程序由三部分组成 : 程序首部 说明部分 语句部分 输入自行车数 目 计算总售价 (1)程序首部 由保留字Pegram开头,后面跟:个程序名(如:Exll );其格式为:Pr

5、ogram程序名; 程序名由用户自己取,它的第一个字符必须是英文字母,其后的字符只能是字母或数字 和下划线组成,程序名中不能出现运算符、标点符和空格。 (2)说明部分 程序中所用的常量、变量,或类型、及过程与自定义函数,需在使用之前预先说明,定 义数据的属性(类型)。 例1.2程序中VarS, R, C: Real;是变量说明,此处说明S, R, C三个变量均为实数类型 变量。只有被说明为某一类型的变量,在程序屮才能将与该变量同类型的数值赋给该变量。 变量说明的格式为 : 指由保留字Begin (开始)至End.(结尾)Z间的语句系列,是解决问题的具体处理步 骤,也是程序的执行部分。 Pasc

6、al程序不管是哪部分,每句末尾都必须有分号(;),但允许最接近End的那个语句末尾 的分号省略;程序结朿的End末尾必须有圆点( . ),是整个程序的结朿标志。 程序中花括号“”之间的部分为注释部分。 Pascal程序结构可归纳用如下的示意图来表示: Program程序名;程序首部 标号说明;(Label)常量说 明;(Const)类型说明; (Type)变量说明;(Var) 过程或函数说明; 说明部分 Begin 语句系列; End. 程序体(主程序) 语句部分 图1.1 Pascal程序的结构 把处理问题的步骤编成能从上到下顺序执行的程序,是简单稈序的基本特征。再来分析下面 两道例题的Pa

7、scal程序结构和继续学习基本语句。 例1.3编程计算半径为R的圆的面积和周长。 解:这是一个简单问题,按数学方法可分以下儿步进行处理: 从键盘输入半径的值R;要求告诉圆的半径R 用公式S=nR2计算圆面积; 用公式C=2HR计算圆周长; 输出计算结果。 Pascal 程序: Program Exl3; Var r,s: Real; (3) 语句部分 程序首 部 Begin Readln(r); s := Pi*r*r; c := 2*Pi*r; 语句部分 输入半径 圆面积公式S= H R2 圆周长公式C=2 n R Writeln (*s= s:5:l/ c=c:5:l ); 输出结果 Re

8、adln; End. 程序中Pi是Pascal提供的标准函数 , 它返回圆周率的近似值:3.1415926, (:= )是赋值符号,赋值语句的格式为: 变量:二表达式 ; _ 赋值语句的作用是将 : 二右边表达式的值记录到左边的变量屮。 Writein是输出语句,输出语句有三种格式: 执行输出后光标不换行 执行输出后光标换到下一行 仅输出空白且光标换到下一行 Writein语句后面的圆括号以内部分均为输出项,可以是多项,各项间用逗号分隔;对单引号 里的内容按照引号内的原样(字符)输出显示。如果输出项是表达式,则只输出表达式的值,而 不是表达式本身。 例1? 4输出两个自然数相除的商和余数。 解

9、: 设被除数、除数、商和余数,分别为A, B, C, D,均为变量,且都是整数类型。题中未给11! 具体的自然数A、B,可采用键盘输入方式。 显示两数相除的数学形式; 求出a除以b的商c; 求出a除以b的余数d; 紧接等式后面输出显示商和余数。 Pascal 程序: Program Exl4; Var a,b ,d : integer; Begin Readln(a9b); c:=a div b; d:=a mod b; Writeln( ,c=,c; d=d); Readln; End. 第二节顺序结构程序与基本数据类型 前面的简单程序已体现出处理问题步骤、思路的顺序关系,这就是顺序结构程序

10、。 例1.5交换两个变量的值:由键盘输入两个正整数A和B,编程交换这两个变量的 值。 Write (输出项1,输出项2); Writein (输出项1,输出项2); Writein 输入a, b 整除运算,取商的整数部分 相除求余运算,取商的余数部分 输出后自动换行 解:交换两个变量的值,可以想象成交换两盒录咅带(称为A和B)的内容,可以按以下 步骤处理: 步骤:拿一盒空白录音带C为过渡,先将A翻录至C; 步骤:再将B翻录至A; 步骤:最后将C翻录至B。 这样操作,可达到题目要求。 Pascal 程序: Program Examl5; Var a,b,c : integer; Begin Re

11、adln(a9b); c:= a; a:= b; b := c; Writeln (a= ,a, b=*,b); Readin; End. Pascal定义了五个标准整数类型,如下表所示: 类型取值范围占字节数格式 Shortint (短整型)-128127 1 带符号8位 Integer (整型) -32768.32767 2 带符号16位 Longint (长整型) -214748364821474836474 带符号32位 Byte (字节型) 02551 无符号8位 Word (字型)0655352无符号16位 在前面程序中常用的数据类型除整数类型,还有实数类型。Pascal还定义了五

12、个标准实 数类型,列表所示如下 : 类型取值范围占字节数有效数字 Real2.9X10* 39-1.7X1038 6 78位 Single 1.5X10來?3.4X10昭 4 11?12位 Double5.OX1O 3241.7X1O308 8 15?16位 Exten ded 1.9X10-4 ?1.1X104932 10 19?20位 Comp ? 263+K 38-l 8 19?20位 第二章分支程序 在程序设计中,许多问题是在一定条件下才选择某种处理方式的,这就需要用条件判断语句 或情况选择语句进行处理。程序执行中将出现选择(分支),根据条件只选择执行部分语句, 不 一定都是按原顺序从

13、头到尾地执行所有语句,这样的程序称为分支程序。 第一节 条件语句与复合语句 例2? 1某服装公司为了推销产品,采取这样的批发销售方案: 凡订购超过100套的,每 套定价为50元,否则每套价格为80元。编程由键盘输入订购套数,输出应付款的金额数。 解: 设X为订购套数,Y为付款金额,贝9: 如果100就用丫二5BX计算 否则用Y=80*X计算 输入X; 判断X值; 根据判断结杲选择符合条件的那种方法计算Y值; 输出计算结果。 Pascal 程序: Program Exam21; Var x,y: integer; Begin Readln(x); if x 100 then y:=50*x el

14、se y:=80*x; WritelnCy=y); Readln; End. 程序中的if语句常称为条件语句,它的一般格式为: (1)if条件then语句; (2)if条件then语句1 else语句2; IF语句的功能是按条件在两种可能中选择其中一种。习惯上把讦后面的表达式称为条件, then后面的语句称为真项,else后面的语句称为假项。若条件成立(为真)就执行真项,然后执 行讦语句的后继语句;若条件不成立(为假)就跳过真项而执行假项,然后执行后继语句。而第 一种格式只有真项,没有假项,当条件不成立(为假)就什么也不需做,直接往下去执行后继语 句。 例2? 2读入三个不同的数,编程按由小到

15、大的顺序排列打印出来。 解: 设读入的三个数为a, b, c,为了把较小的数排在前面,可作如下处理: 如果ab就交换a、b的值,将较大的值换至后面; 50*X Y = 180 *X (X 100) (Xc就交换a、c的值,将较大的值换至后面; 如果bc就交换b、c的值,将较大的值换至后面; 输出处理后的a,b,c。 Pascal 程序: Readln; End. 讦语句规定它的真项或假项位置上只能是一个基本语句,如果需要写一组语句,就应当使用 复合语句。本程序中有三处用到复合语句。每个复合语句的范围是从Begin开始到与它相对应的 End为止。 复合语句的地位和一个基本语句相同;其一般格式为:

16、 Begin 语句系列 End; 第二节 情况语句与算术标准函数 如果有多种(两种或两种以上)选择,常用情况语句编程。 例2? 3对某产品征收税金,在产值1万元以上征收税5%;在1万元以下但在5000元 以上的 征收税3%;在5000元以下但在1000元以上征收税2%; 1000元以下的免收税。编程计算该产品 的收税金额。 解: 设x为产值,tax为税金,用P表示情况常量各值,以题意中每1000元为情况分界: p=():tax=()(x 10000) Program Exam22; Var abt: Integer; Begin Readln(a9b9c); if ab then begin

17、t:=a; a:=b; b:=t end; if ac then begin t:=a; a:=c; c:=t end; if bc then begin t:=b; b:=c; c:=t end; Writeln(a:6, b:6, c:6); 复合语 句 复合语 句 复合语 句 佼换 这里的P是“情况”值,用产值X除以1000的整数值作为P,如果P10也归入P二10 的情 况。Pascal语言用P=trunc(x/1000)取整计算 , Pascal 程序: Program Exam23; Var x,p: integer; Tax : real; Begin readln(x); P:=

18、trunc(x/1000); if P 9 then p:=10; Case p of 0 : tax:=0; 1 4 : tax:=x*0.02; 5 9 : tax:=x*0.03; 10 : tax:=x*0.05 end; Writeln(tax:6:l); Readin; End. 程序屮的Case-end语句为情况语句,是多路分支控制,一般格式为: Case表达式of 情况常量表1:语句1; 情况常量表2:语句2;情况常量表n:语句n end; 执行情况语句时,先计算Case后面表达式的值,然后根据该值在情况常量表中的“对应安 排”,选择其对应的语句执行,执行完所选择语句后就结束C

19、ase语句;如果常量表中没有一个 与表达式值对应的语句,则什么也不做就结束本Case语句。 Case语句的另一种应用格式为: Case表达式of 情况常量表1:语句1; 情况常量表2: ? ? 语句 2; ? ? 情况常量表n: 语句 n; else 语句n+1 end; 这种格式的前面部分是相同的,所不同的是:如果常量表中没有一个与表达式值对应的语 句,则执行与else对应的语句,然后结束Case语句。 程序中的trunc(x)为取整函数,是PascaI的算术标准函数之一。Pascal常用的算术标准函数有 19个: (1)abs(x)求x 的绝对值(|x|); (2)exp (x)求ex 的

20、值;( e 为无理数2. 71828-) (3)frac(x)求x的小数部分; (4)int(x)求x的整数部分 ( 不舍入,函数值为实型 ) ; (5)ln(x) 求以e为底的x的对数(log ex ): (6)odd (x)判断x的奇偶数 (当x为奇数时odd (x)值为true,否则为fa I se): ( 刀ord(x)求x的序号,结果为整型(x为有序类型量 ) ; (8)pi n值(3.1415926535897932-); (9)pred (x)求x (有序类型 ) 的前趋值; (10)succ(x)求x(有序类型 ) 的后继值; (11)random随机函数,产生0?1的随机值;

21、 (12)random(n)产生0?n的随机数(n为word类型,先执行randomize,才能得 到随机整 数) ; (13)round (x)求x的四舍五入整数; (14)trunc(x)求x的整数部分 ( 截掉小数部分,结果为整型) ; (15)sqr (x)求x 的平方值(x2 ): (16)sqrt (x)求x的开平方根值; (17)sin(x)求x的正弦函数(x为弧度 ) ; (18)cox (x)求x的余弦函数(x为弧度 ); (19)arctan(x)正切的反三角函数( x为数值 ) ; 第三章循环程序 在编程中经常遇到需要多次规律相同的重复处理,这就是循环问题。Pascal釆

22、用不同的循环 方式來实现,常用的环循有三种:for、repeat、while. 第一节 for 循环 for循环是一种自动计数型循环。 例3? 1试打印出120的自然数。 解:用a代表1?2()各数,同时也用a兼作计数,以控制循环次数; 让a从1开始; 输出a; a自动计数 ( 加1),如果未超越所规定的循环范围则重复步骤,否则结束循环。 Pascal 程序: Program Exam31; Var a: byte; Begin for a:=l to 20 do Writein (a); Readln; End. 程序屮for a:= 1 to 20 do Writein;是for循环语句。

23、 for循环语句有两种格式: (1) for循环变量 : 二初值To终值do语句; (2) for循环变量 : 二初值downto终值do语句; 第(1)种格式的初值小于等于终值,循环变量值按自动加1递增变化; 第(2)种格式的初值大于或等于终值,循环变量值按自动减1递减变化。for循环是(以递 增1或以递减1)计数型循环。 比如:若将例3.1程序改为倒计数(递减)循环,则输出20?1的自然数数: Program Exam31; Var a: byte; Begin for a:=20 downto 1 do Writeln (a); Readln; End. 例3.2打印岀30至60的偶数。

24、 解: 设a表示30至60的所有的数,可用for循环列出; 用式子a mod 2=0筛选出其中的偶数并输出。 Pascal 程序: Program ex32; Var a : integer; Begin For a := 30 to 60 do If a mod 2=0 then vvriteln (a); Readln; End. 在这个程序中,for循坏后的循坏语句是一个条件分支语句。 例3? 3自然数求和:编一个程序,求从1至100的自然数的和。 解:令S=0; 令a表示1至100的自然数,用循环列出; 将这些自然数用公式S:=S+a逐一累加到S屮去; 循坏结束后,S即为1至100的自

25、然数的和,输出即可。 Pascal 程序: Program ex33; var s,a : integer; Begin For a := 1 to 100 do S := S+a; WriteIn( ,S=S); Readln; End. 例3.4-个两位数x,将它的个位数字与十位数字对调后得到一个新数y,此时y恰好 比x大 36,请编程求出所有这样的两位数。 解:用for循环列举岀所有的两位数,x为循环变量; 用公式a:= x div 10分离出x的十位数字; 用公式b:= x mod 10分离出x的个位数字; 用公式y:= b*10+a合成新数y; 用式子y-x=36筛选出符合条件的数x

26、并输出。 Pascal 程序: Program ex34; var x,a,b,y:integer; Begin For x := 10 to 99 do Begin a := x div 10; b := x mod 10; y := b*10+a; if y-x=36 then writeln(x); End; Readln; End. 例3? 5用号打印出如下的长方形图案。 解: 上面给出的图例共有4行,我们可以用一个循坏控制行的变化; 在每行中又有9歹U,我们可以在前面控制行的循环中再套一个循环来控制列的变 化。 Pascal 程序: Program ex35; var ij:inte

27、ger; Begin Fori := 1 to 4 do Begin For j := 1 to 4 do write( ,*1); Writein; 外循环控制行的变化 内循环控制列的变 化 End; Readln; End. 程序屮的循环对于a的每个值都包含着一个b=(l?9)次的内循环。夕卜循环for a将内循 环forb 包含在里面,称为for循环的嵌套。 嵌套形式如: for a:=nl to n2 do for b:=m 1 to m2 do 循环体语句; 例3? 6用“*”号打印岀如下的长方形图案。 * * * * Pascal 程序: Program Exam36; var i

28、, j:integer; Begin For i := 1 to 4 do Begin For j := 1 to i do Writein; End; Readln; End. 根据这种格式还可以实现多层循环嵌套,例如: for i:= ml to m2 do for j:= nl to n2 do for k=k 1 to k2 do 循环体语句; 例3? 7数学上把除了1和它本身 , 没有别的数能够整除它的自然数叫做素数(或质 数)。 现在由键盘输入一个自然数N,编程判断N是否是素数,是则输出“Yes”,否则输出“No ”。 解:根据定义,对于给定的自然数N,只需判断除1和它本身外,述有

29、没有第三个自然数即 可。 令K从2循环至N; 根据N modK是否为0,如果为0则判定N不是素数;如果都不为0则判定N是素数。Pascal 程 序: Program Exam37; Var n,m,k: integer; 外循环控制行的变化 内循环控制列的变 化 flag: boolean; Begin ReadLn(n); flag:=true; for k:=2 to n-1 do 外循环 if n mod k=0 then flag := false; if flag then writeln (Yes) else writeln( tNo,); readln; End. 程序中的变量y

30、es为布尔(或逻辑)类型(Boolean)o布尔值只有两个: True (真)False (假) 布尔值与条件判断结果为真(条件成立)或为假(条件不成立)的作用相同,常用于条件语 句 和循环语句中。 Pascal共有四种逻辑运算符: and (与) 两条件都为True时,其结果值为True;否则为Fa I se; or (或) 两条件中只要有一个为True ; 其结果值为True;否则为False; xor (异或)两条件的逻辑值不相同时,其结果值为True;否则为False; not (非) 条件为True时,其结果值为False;否则为True;(取反) 第二节 Repeat 循环 Rep

31、eat循环是直到型循环。 程序中的Repeat循环格式为: repeat 循环体语句; until条件表达式;直到条件为真 Repeat循环首先执行由Repeat和Until括起來的循环体语句,然后检查Until后面的条件表达 式:如果表达式结果为假,则继续执行循环体,接着继续检查Until后面的条件表达式 , 如此反复 执行直到这个表达式结果为真时结束循环。Repeat循环体语句必须有能改变Until 后面条件表达式 值的语句,并最终使这个条件表达式的值为真,使循环白动结束。 例3? 9猜价格:中央电视台的“购物街”栏目深受观众喜爱,其中的“猜商品价格” 的节目更是脍炙人口,现在请你编一个程

32、序模拟这一游戏:由计算机随机产生200至5000 之间的 一个整数,作为某件商品的价格,然后由你去猜是多少,若你猜的数大了,则计算机输出提示 “Gao ” ,若你猜的数小了,则计算机输出提示“Di”,然后你根据提示继续猜,直到你猜对了,计 算机会提示“Ok ”,并统计你猜的总次数。 解:本题的游戏规则大家都清楚,要完成程序,必须把处理步骤理清: (1)用随机函数Random产生200至5000之间的一个整数X; (2)你猜一个数A; (3)若AX,则输出“High“ ; (4)若AVX,则输出“Low”; (5)若A=X则输出“Ok”; (6)重复直到A=Xo Pascal 程序: Progr

33、am ex39; Var t,x,a : integer; Begin Randomize; x := Random(4800)+200; t := 0; Repeat readln(a); if ax then writelnCHigh); if a0为真时 (D不能整除B )就做D二D+A,重复; 当(D mod B)0就做n二a; a=b; b=n mod b,重复和; (3)当余数二0就结束循环,并输出b值。 比如a=18, b二12时,处理步骤为: (1)18/12 = 1 , 得余数为6; (2)此余数不为零,让a = 12, b = 6; (3)重复12/6 = 2 , 得余数为

34、0; (4)结束循环,输出6 ( 余数为零时的b值即是所求的最大公约数) 。 此方法称为辗转相除法求最大公约数。 Pascal 程序: program Exam313; var a, b, n : integer; begin readln (a, b); whi.le a mod b 0 do begin n:=x; x:=y; y:=n mod y end; GCD:=y Begin readln(al, a2, a3); al:=GCD(al, a2); al :=GCD (al, a3); Writeln(al); Readln; End. 函数的结果是一个具体的值,在函数体中必须将所

35、得到的运算结果赋给函数名;主程序通 过调用函数得到函数的运算结果。调用函数的一般格式为: 函数名(实在参数表) 调用函数时, 函数名后而圆括号内的参数必须有确定的值,称为实在参数。 调用时即把 这些 实际值传送给函数形参表中的相应形参变量。函数不是单独的语句,只能作为运算赋值或出现 在表达式屮。 第二节自定义过程 自定义函数通常被设计成求一个函数值,一个函数只能得到一个运算结果。若要设计成能 得到若干个运算结果,或完成一系列处理,就需要自定义“过程”来实现。 例4.3把前面例2.2 (输入三个不同的整数, 按由小到大排序)改为下面用自定义过 程编写的Pascal程序: 主程序 调用函数 Pro

36、gram exam42; Var a, b, c: integer; Procedure Swap (var x, y: Var t : integer; Begin t:=x; x:=y; y:=t end; Begin Readln(a, b, c); integer); 自定义交换两个变量值的过程 过程体 交换两个变量的值 if ab then swap (a, b); if ac then swap (a, c); if bc then swap (b,c); Writeln (a:6, b:6, c:6); Readln; End. 主程序 调用自定义过 程序-pProcedure

37、Swap是定义过程名,从作用来看,过程与函数是相似的,都能将复杂的问 题划分成一些目标明确的小问题来求解,只不过函数有值返回而过程则没有。自定义过程的一 般格式如下: Procedure St程名(形式参数表);过程首部 局部变量说明部分; begin 语句部分;过程体部分 end; 第五章Pascal的自定义数据类型 Pascal系统允许用户自定义的数据类型有:数组类型、子界类型、枚举类型、集合类型、 记录类型、文件类型、指针类型。 第一节数组与子界类型 数组必须在说明部分进行定义:确定数组名,数组分量(元素)的个数及类型。一般格式 有: Var数组名:array 下标类型of数组元素类型;

38、 数组常量说明格式为: Const数组名:array 下标类型of数组元素类型二(常量表); 程序屮对数组的输入、输出处理,常用循环语句控制下标,进行有序地直接操作每个数组 元素。 例5.1编程输入五个正整数,然后自动按从大到小的顺序输出。 解:用循环把十个数输入到A数组中; 从Al至IJAC1O,相邻的两个数两两相比较, 即:Al与A比 ,A2与 A比,A与A10比。 只需知道两个数中的前面那元素的标号,就能进行与后一个序号元素(相邻数)比较,可 写成通用形式A i 与A i+1比较,那么,比较的次数又可用1?(n - i )循环进行控制 (即循环次数与两两相比较时前面那个元素序号有关);

39、在每次的比较中,若较大的数在后面,就把前后两个对换,把较大的数调到前面, 否则不需调换位置。 下面例举5个数来说明两两相比较和交换位置的具体情形: F 6 4375和6比较, 6 0 4375和4比较, 6 0 4374和3比较, 6 L 4373和7比较, 6473 经过(1? 交换位置,排成下行的顺序;不交 换,维持同样的顺序;不交换,顺序 不变 交换位置,排成下行的顺序; (5-1)次比较后,将3调到了末 经过笫一轮的1?(N-1)次比较,就能把十个数屮的最小数调到最末尾位置,第二轮比较1? (N-2)次进行同样处理,又把这一轮所比较的“最小数”调到所比较范围的“最末尾” 位置;每进行一

40、轮两两比较后,其下一轮的比较范围就减少一个。最后一轮仅有一次比 较。在比较过程中,每次都有一个“最小数”往下“掉”,用这种方法排列顺序,常被称之为 “冒泡法”排序。 Pascal 程序: Program Exam51; const N二10; Var a: array1 N of integer; i,j: integer; procedure Swap(Var x, y: integer); Var t:integer; begin Begin for i:=l to N do begin write(i,; Readln(ai) write(a i :6); 程序中定义 const N二1

41、00; type xx=l N; 自定义子界类型xx ( 类型名 ) Var a: arrayxx of boolean; 定义数组 交换两数位置的过程 输入十个数 end; for j:=l to N-l do for i:=l to N-j do if a i ai+l then swap(a for i:=1 to N do 冒泡法排序 两两相比较 i 1, ai+l); 比较与交换 输出排序后的十个 2 3 4 5 6 7 8 9 10 11 12 13 14 15 98 99 100 2 3 4 5 6 7 8 9 1011 12 13U 15.9899 100 2 3 4 5 6

42、7 8 9 10 11 1213 14 15.9899 100 置数 筛去被2整除的 数 筛去被整除的数 i,j: integer; Begin Fill char (a, sizeof (a), true); al := False; for i:=2 to Trunc(sqrt(N) do if ai then for j := 2 to N div i do ai*j:= False; t:=0; for i:=2 to N do if ai then Begin write(a i :5); inc(t); if t mod 5=0 then writein end; readln E

43、nd. 程序中自定义的子界类型,在用法上与标准类型( 如integer)相同,只是值域上界、下界在 说明中作了规定,而标准类型的值域由系统内部规定,其上界、下界定义是隐含的, 可直接使 用。例如: Type integer= -32768 ? 3276 ch为字符类型(char) 单个字 符; (1)copy (str, n, m)从字符串str的左边第n个开始截取m个字符; 如:copy ( Pascal , 3, 2)的结果为sc ; (2)concat (str1, str2)将两个字串连接成为一个新的字串; 如:s:=str1+str2;同等于两串字符相加 (3)Length (str

44、)求字串str的长度 ( 字符个数 ) ; (4)chr (x) 求x (x为1-255整数) 的ASII代码对应的字符; 如:chr (65)结果为A。 (5)ord (ch)求字符ch对应的ASCII代码值;如ord ( A) 结果为65; (6)pos (str1, str2)求字串str1在字串中开始的位置; 如:pos (sea, pascal)结果为3; (7)upcase(ch)将字符ch转为大写字母,如upcase( a) 结果为A ; Pascal常用的字符串处理标准过程有4个: (1) Vai (str, x, code)将数字型字串转为数字并存入变量x中; 如:Vai e

45、768,,x, code), x值为768, code为检测错误代码,若code=0表示没有错误; (2)str(n, s)将数字n转化为字串存入s中,如str (768, s)s的结果为 768* ; (3)insert (str1, str2, n)把字串插入在字串str2的第n个字符之前,结果在str2中;此过程 中的str2为变量形参,具有传入传出的功能; (4)delete (str, n, m)从字串str的第n个开始,删除m个字符,把剩余的字符存在str中, 此过程中的str为变量形参,具有传入传出的功能; 第二节二维数组 程序中定义二维组方式与一维数组形式相同。二维数组的元素由

46、两个下标确定。二维数组 元素的格式如下: 数组名下标1,下标夕亍 常用下标1代表数据在二维表格中的行序号,下标2代表所在表格中列的序号。 例5? 3竞赛小组共有20位同学,这学期每位同学共参与了三项比赛,请统计每位同 学的平均分。 分析:定义一个20行3列的二维数组来存放这些成绩。定义一个20个元素的一维数组來 存放平均分。 program Exam53; a:array 1. ? 20, 1 3 of integer; b:array 1 20 of real; i,j:integer; begin for i:=l to 20 do 从键盘上读入20个同学的三次竞赛成绩begin for j:=l to 3 do read(ai, j); readln; end; for i:=l to 20 do bi :=0; 先将平均分数组清0 for i:=l to 20 do begin for j:=l to 3 do bi :=bi+ai, j; 计算总分bi:二bi/3; 计算平均分 end; for i:=l to 20 do write(bi :5:1); 输出平均分 writeln;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1