信息学初级教程(6)

2019-01-19 17:21

13、打印下列图案:(输入N值来控制图案的规模,下列图案均以N=3为例) & & & & & &

& & & *

& & &

* * *

# # #

@ *

@ @ * *

# # # @ @ @ * * * & & & * * * * *

15.pas 16.pas 17.pas 18.pas 14、打印下列图形: 19.pas 1 121 12321 1234321 12321 121 1

15、赵、钱、孙、李、周五人围着一张圆桌吃饭。饭后,周回忆说:“吃饭时,赵坐在钱旁边,钱的左边是孙或李”;李回忆说:“钱坐在孙左边,我挨着孙坐”。结果他们一句也没有说对。请问,他们在怎样坐的? 20.pas

16、找数。一个三位数,各位数字互不相同,十位数字比个位、百位数字之和还要大,且十位、百位数字之和不是质数。编程找出所有符合条件的三位数。 21.pas 注:1. 不能手算后直接打印结果。 2. “质数”即“素数”,

17、选人。一个小组共五人,分别为A、B、C、D、E。现有一项任务,要他们中的3个人去完成。已知:(1)A、C不能都去;(2)B、C不能都不去;(3)如果C去了,D、E就只能去一个,且必须去一个;(4)B、C、D不能都去;(5)如果B去了,D、E就不能都去。编程找出此项任务该由哪三人去完成的所有组合。 22.pas

18、截数: 任意一个自然数,我们将其平均截取成三个自然数。例如自然数135768,可以截取成13,57,68三个自然数。如某自然数不能平均截取(位数不能被3整除),可将该自然数高位补零后截取。现编程从键盘上输入一个自然数N(N的位数<12),计算截取后第一个数加第三个数减第二个数的结果。 23.pas 19、A,B,C,D,E五个人合伙夜间捕鱼,凌晨时都疲惫不堪,各自在河边的树丛中找地 方睡着了,日上三竿,E第一个醒来,他将鱼数了数,平分成五分,把多余的一条扔进河中, 拿走一份回家去了,D第二个醒来,他并不知道有人已经走了,照样将鱼平分成五分,又扔 掉多余的一条,拿走自己的一份,接着C,B,A依次醒来,也都按同样的办法分鱼(平分成 五份,扔掉多余的一条,拿走自己的一份),问五人至少合伙捕到多少条鱼。 24.pas

也许你能用数学办法推出鱼的条数,但我们的要求你编出一个程序,让

计算机帮你算出鱼的总数。

20、试编程找出能被各位数字之和整除的一切两位数。 25.pas

21、一个正整数的个位数字是6,如果把个位数字移到首位,所得到的数是原数的

4倍,试编程找出满足条件的最小正整数。 26.pas

22、某本书的页码从1开始,小明算了算,总共出现了202个数1,试编程求这本书一共有多少页? 27.pas

25

题目:从键盘输入2个整数,输出它们的和 Var a,b,c:integer; Begin

Readln(a,b); C:=a+b; Writeln(c); End.

问题:如果要输入10个、100个、1000个甚至更多的数求它们的和,怎么办?难道定义1000个变量?

第十三章、数组、集合与自定义数据类型

第一节、数组(重要)

在一个程序中,如果所要用到的常量、变量不多,并且彼此之间无序列化的联系,我们一般定义成不同的常/变量名即可。但如果要用到的常/变量个数很多,彼此之间有着序列化的联系时,我们就会把它们定义成一个数组。数组—即一序列的数(各种类型的数据)组成的一个数据的序列。这些数据共用一个名称,只不过下标不同。

例如:在我们的数学学习中,在解一元二次方程时,方程有两个解,我们会分别用X1、X2来表示。而在PASCAL语言中,我们用X[1]、X[2]来表示,即下标是放在中括号中的。

一、一维数组

数组如果要使用的话,就必须先在程序头部的常量/变量说明中先说明,说明语法是: 变量名:ARRAY[下标初值..下标终值] OF 数据类型;

如:VAR N:ARRAY[1..10] OF INTEGER;

作用是说明一个名为N的整数型数组,可用的下标为1至10,即可用10个变量。 再如:CONST M:ARRAY[1..5] OF CHAR=(‘A’,‘B’,‘C’,‘D’,‘E’);

作用是说明了一个名为M的字符型数组常量,下标范围为1至5,因为是常量,所以在后面指明了这五个常量的值分别为:‘A’,‘B’,‘C’,‘D’,‘E’。 在程序头部说明了数组后,在程序中就可以使用了,使用方法为:常/变量名[下标号]。如,M[1]即调用M[1]这个常量,其值为‘A’。

[例6、1]从键盘输入10个整数,然后把它们排序,从大到小打印出来。

分析:排序是各种语言中的一个必需掌握的要点。排序有很多种方法,但不论是哪种方法,都是把这些据存放在一个数组中,然后再对其进行排序操作。排序一般有以下几种方法:

1、 双数组法:再定义另一个与存放数据数组同类型的数组,然后把数据数组中最大的

一个数找出来,存放为另一数组中的第一个;再找第二、第三个等等。其中的细节问题就是:在数据数组中找到最大的一个后,就把它的值赋成一个非常小的值,然后再找最大的一个,这样就能顺序把数据从大到小存放到另一个数组中,也即排好了序。

2、 冒泡法:这是最常用的一种排序方法,其实质是:先把数据存放在数组中,然后从

第一个开始,分别与其后所有数据进行比较,如果第一个比其后某个数据小,则交换它们的值,一直到第一个与其后所有数据比较完,这时第一个数据就是最大的一个;然后再把第二个数据再与其后数据进行比较,比较完后,第二个数据则为第二

26

大的,这样直到倒数第二个数据比较完后,整个数组就已经按从大到小的顺序排列了。其作用示意如下:

假设我们已经把6个数据分别存放在N[1]至N[6]中,其值分别为:3,1,5,9,2,6。 交换前的值为: 3,1,5,9,2,6 第一步,把第一个值与其后第一个进行比较,这时3>1,所以值不变: 3,1,5,9,2,6 第二步:把第一个值与其后第二个进行比较,这时3<5,所以值交换: 5,1,3,9,2,6 第三步:把第一个值与其后第三个进行比较,这时5<9,所以值交换: 9,1,3,5,2,6 ?? ?? 当第一个值与其后所有值比较完后,第一个值已经是最大的,数组值9,1,3,5,2,6 为: 这时,重复上述第一步的操作,只是把第一个值换成第二个值,第一9,3,1,5,2,6 个值即第二个值与其后第一个值进行比较,这时1<3,所以交换其值: 第二个值与其后所有值比较完后,数组值为: 9,6,1,3,2,5 再重复进行第三个值与其后值的比较,直到第五个值与第六个值比较9,6,5,3,2,1 完后,这时数组的值已经变为: 至此,数组已经按从大到小的顺序排好了。 程序如下 :[例6、1] Var n:array[1..10] of integer; I,j,t:integer; Begin For I:=1 to 10 do Readln(n[I]); For I:=1 to 9 do begin For j:=I+1 to 10 do begin If n[I]

二、二维数组

1、 矩阵:我们在PASCAL语言中接触到的一般是数字矩阵,如:

1 2 3 4 5 6 3 4 5 6 7 9 1 5 8 9 4 2

7 5 3 2 1 7

如果要存放这样的矩阵数据,我们可以定义几个数组来存放,每个数组存放一行或一列,但最好的办法是定义一个二维数组来存放。二维数组有两个下标,可以分别对应矩阵中的行号、列号,从而能更加方便的存取数据。定义的语法是:

27

说明一个数组型变量 从键盘读入10个数据存放在数组N中 参加比较的第一个数据为第1至第9个。 第二个数据为第一个数据之后所有的数据 如果n[I]

数组A就可存放上述矩阵的所有数值。或者定义一个常量: CONST B:ARRAY[1..4,1..6] OF INTEGER=((1,2,3,4,5,6), (3,4,5,6,7,9), (1,5,8,9,4,2),

(7,5,3,2,1,7));

这样我们就能在程序直接使用,如:B[1,5]是指第一行的第五个数据,即5;B[3,2]指第三行第二个数据,即5,等等。

第二节、集合(用的较少,但是有时能事半功倍)

集合是一序列有共同性质或联系的数据组成的一个集体。如日常生活中所说的:一个班的全体同学;一个书架上所有的书等。而在PASCAL语言中,集合一般都是指一系列的数值或字符等数据,如:小于10的正整数;26个英语字母等。集合也象常/变量一样有自己的名字,即集合名,它是在程序头部象定义变量一样来定义的。

定义集合:VAR 集合名:SET OF 数据类型;

这里需要注意的是:集合只能定义成整数、布尔型或CHAR型的。 如:VAR S:SET OF byte;

其作用是定义了一个整数型的集合S。

集合的赋值:集合的值实际上应该是一些数据的总和。一个集合的值(元素)是用中括号“[]”括起来的。如:

S:=[];是把S赋成一个空集合。

S:=[1,2,4];是把S赋成一个有三个元素的集合。 集合的运算:集合的并、交、差运算及关系运算。

1、 并:用运算符“+”:即把两个集合的元素合并。如:S:=[1,2]+[4,5];是把S赋

值成四个元素。 2、 交:用运算符“*”:即取两个集合的相同元素。如:S:=[1,2,3]*[3,4,5];这

时S的值被赋成了一个元素[3]。 3、 差:用运算符“-”:即取属于前一集合但不属于后一集合的元素。如:S:=[1,2,3]-[2,5,6];这时S的值被赋成了[1,3]。 4、 关系运算:这是在PASCAL语言中集合概念最重要的部分,是用来判断集合之间或

集合与元素之间关系的运算。有以下几种:

A、=:判断两个集合的元素是否完全相同; B、<>:判断两个集合是否不相等; C、>=:包含; D、<=:包含于;

E、IN:存在于。即用来判断一个元素是否存在于一个集合中。

第三节、自定义数据类型

PASCAL语言不仅直接提供大量的可直接使用的数据类型,还提供了功能强大的扩展自定义功能,用户可以自己定义适合自己程序中使用的数据类型。这种自定义数据类型同样是在程序头部加以说明,引导字是TYPE,定义好类型后,就可能把常/变量定义成这种类型了。

28

这样的自定义数据类型有两种定义方式,分别是:枚举类型、子界类型。

一、

日常生活中的一个星期中的每天的名称:SUNDAY、MONDAY等,颜色的名称:RED、BLUE等,如果我们的PASCAL程序中要使用这些数据的话是很不方便的,所以我们可以使用自定义枚举类型来使它运用起来更加方便。

定义语法如下:TYPE 类型名=(标志符);

如:TYPE COLOR=(RED,BLUE,GREEN,YELLOW,BLACK,WHITE); WEEKDAY=(SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY);

MONTH=(JAN,FEB,MAR,APR,MAY,JUN,AUG,SEP,OCT,NOV,DEC);

这样,我们就能在定义常/变量时把常/变量定义成这些类型。如:

VAR C:COLOR; W:WEEKDAY;

M,N:MONTH;

在程序中,我们使用上述四个变量时,它们的值只能是对应的类型中的值。如:C这个变量的值就只能是:RED,BLUE,GREEN,YELLOW,BLACK,WHITE。

注意:枚举类型的数据是有序的。即可用函数:PRED()前趋;SUCC()后续。这两个函数的用法我们将在下面介绍。

枚举类型数据的运算:

1、 赋值:如:C:=BLUE;

W:=FRIDAY;

2、 判断:如:BLUE>GREEN的值为TRUE;

3、 函数:PRED()、SUCC()、ORD()。因为枚举类型是有序的,所以可以使用上

述三个和序数有关的函数。如: A、 SUCC(FRIDAY)的值为SATURDAY;即FRIDAY之后的一个值。

B、 PRED(YELLOW)的值为GREEN。即YELLOW之前的一个值。 C、 ORD(BLUE)的值为1;即BLUE在其对应的枚举类型中排在第二位。

二、子界类型

子界类型也是自定义数据类型中的一种。在上一节的枚举类型中我们知道,枚举类型是把一种数据类型所有的值都列举出来。而当需要自定义的类型是一序列连续的数据,并且数量很大时,枚举类型就不适合了,这时,我们就会采用子界类型。子界类型,顾名思义,就是当数据是连续的时,可以指定其上界及下界来定义。定义方法与枚举类型相似。

TYPE 类型名称=上界..下界; 如:TYPE YEAR=1900..2000;是定义一个名为YEAR的数据类型,其值可取为1900—2000。

再如:TYPE NUMBER=1..9;

枚举类型

29


信息学初级教程(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:宁波市紧固件重点企业名录

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: