PASCAL语言基础及基础训练 第 21 页 共 48页
编程求需要各种马多少匹?
5、 有三种纪念邮票,第一种每套一张售价2元,第二种每套一张售价4元,第三种每套9张
售价2元。现用100元买了100张邮票,问这三种邮票各买几张? 6、 赵、钱、孙、李、周五人围着一张圆桌吃饭。饭后,周回忆说:“吃饭时,赵坐在钱旁边,
钱的左边是孙或李”;李回忆说:“钱坐在孙左边,我挨着孙坐”。结果他们一句也没有说对。请问,他们在怎样坐的?
7、找数。一个三位数,各位数字互不相同,十位数字比个位、百位数字之和还要大,且十位、百位数字之和不是质数。编程找出所有符合条件的三位数。 注:1. 不能手算后直接打印结果。 2. “质数”即“素数”,是指除1和自身外,再没有其它因数的大于1的自然数。
8、选人。一个小组共五人,分别为A、B、C、D、E。现有一项任务,要他们中的3个人去完成。已知:(1)A、C不能都去;(2)B、C不能都不去;(3)如果C去了,D、E就只能去一个,且必须去一个;(4)B、C、D不能都去;(5)如果B去了,D、E就不能都去。编程找出此项任务该由哪三人去完成的所有组合。
9、输入一个字符串,内有数字和非数字字符。如A123X456Y7A,302ATB567BC,打印字符串中所有连续(指不含非数字字符)的数字所组成的整数,并统计共有多少个整数。
10、A、B、C三人进入决赛,赛前A说:“B和C得第二,我得第一”;B说:“我进入前两名,丙得第三名”;C说:“A不是第二,B不是第一”。比赛产生了一、二、三名,比赛结果显示:获得第一的选手全说对了,获得第二的选手说对了一句,获得第三的选手全说错了。编程求出A、B、C三名选手的名次。
11、甲、乙、丙、丁四人共有糖若干块,甲先拿出一些糖分给另外三人,使他们三人的糖数加倍;乙拿出一些糖分给另外三人,也使他们三人的糖数加倍;丙、丁也照此办理,此时甲、乙、丙、丁四人各有16块,编程求出四个人开始各有糖多少块。(此题可用循环,也可不用笔循环做)
12、截数问题: 任意一个自然数,我们可以将其平均截取成三个自然数。例如自然数135768,可以截取成13,57,68三个自然数。如果某自然数不能平均截取(位数不能被3整除),可将该自然数高位补零后截取。现编程从键盘上输入一个自然数N(N的位数<12),计算截取后第一个数加第三个数减第二个数的结果。
13、从键盘输入一段英文,将其中的英文单词分离出来:已知单词之间的分隔符包括空格、 问号、句号(小数点)和分号。
例如:输入:There are apples; oranges and peaches on the table. 输出:there are apples oranges and peaches on the table
14、山乡希望小学收到一箱捐赠图书,邮件上署名是“兴华中学高二班”,山乡希望小学校 长送来了感谢信,可是兴华中学高二年级有四个班,校长找来了四个班的班长,问他们是哪 个班做的这件好事。一班的班长说:“是四班做的。”二班的班长说:“是三班做的好事。”三 班的班长说:“不是我们班。” 四班的班长说:“三班的班长说的不对。”
四个班的班长都说不是自己班做的,这就难坏了校长,后来得知四个班的班长中有两个 说得是真话,有两个没有说真话,请你利用计算机的逻辑判断编一个程序,找出究竟是哪个 班做了这件好事。不能手算后直接打印结果。
15、A,B,C,D,E五个人合伙夜间捕鱼,凌晨时都疲惫不堪,各自在河边的树丛中找地 方睡着了,日上三竿,E第一个醒来,他将鱼数了数,平分成五分,把多余的一条扔进河中, 拿走一份回家去了,D第二个醒来,他并不知道有人已经走了,照样将鱼平分成五分,又扔 掉多余的一条,拿走自己的一份,接着C,B,A依次醒来,也都按同样的办法分鱼(平分成 五份,扔掉多余的一条,拿走自己的一份),问五人至少合伙捕到多少条鱼。 也许你能用数学办法推出鱼的条数,但我们的要求你编出一个程序,让计算机帮你算出鱼的总数。
16、试编程找出能被各位数字之和整除的一切两位数。
17、一个正整数的个位数字是6,如果把个位数字移到首位,所得到的数是原数的4倍,试编程找出满足条件的最小正整数。
21
PASCAL语言基础及基础训练 第 22 页 共 48页
18、某本书的页码从1开始,小明算了算,总共出现了202个数1,试编程求这本书一共有多少页?
19、从键盘上输入两个不超过32767的整数,试编程序用竖式加法形式显示计算结果。 例如: 输入 123, 85 显示: 123 + 85 --------- 208
20、有30个男人女人和小孩同在一家饭馆进餐,共花了五十先令,其中男宾3先令,女宾2先令,小孩1先令。试编程求出男人女人小孩各多少人?
第七章、数组、集合与自定义数据类型
第一节、数组
在一个程序中,如果所要用到的常量、变量不多,并且彼此之间无序列化的联系,我们一般定义成不同的常/变量名即可。但如果要用到的常/变量个数很多,彼此之间有着序列化的联系时,我们就会把它们定义成一个数组。数组—即一序列的数(各种类型的数据)组成的一个数据的序列。这些数据共用一个名称,只不过下标不同。
例如:在我们的数学学习中,在解一元二次方程时,方程有两个解,我们会分别用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、 冒泡法:这是最常用的一种排序方法,其实质是:先把数据存放在数组中,然后从第一个
开始,分别与其后所有数据进行比较,如果第一个比其后某个数据小,则交换它们的值,一直到第一个与其后所有数据比较完,这时第一个数据就是最大的一个;然后再把第二个数据再与其后数据进行比较,比较完后,第二个数据则为第二大的,这样直到倒数第二个数据比较完后,整个数组就已经按从大到小的顺序排列了。其作用示意如下:
假设我们已经把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
22
PASCAL语言基础及基础训练 第 23 页 共 48页
第三步:把第一个值与其后第三个进行比较,这时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]); 从键盘读入10个数据存放在数组N中 For I:=1 to 9 do begin 参加比较的第一个数据为第1至第9个。 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 如果要存放这样的矩阵数据,我们可以定义几个数组来存放,每个数组存放一行或一列,但最好的办法是定义一个二维数组来存放。二维数组有两个下标,可以分别对应矩阵中的行号、列号,从而能更加方便的存取数据。定义的语法是: 变量名:ARRAY[下标初值1..下标终值1,下标初值2..下标终值2] OF 数据类型; 例如:VAR A;ARRAY[1..4,1..6] OF INTEGER; 数组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个英语字母等。集合也象常/变量一样有自己的名字,即集合名,它是在程序头部象定义变量一样来定义的。 23 PASCAL语言基础及基础训练 第 24 页 共 48页 定义集合:VAR 集合名:SET OF 数据类型; 这里需要注意的是:集合只能定义成整数(byte)、布尔型或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,定义好类型后,就可能把常/变量定义成这种类型了。这样的自定义数据类型有两种定义方式,分别是:枚举类型、子界类型。 一、 枚举类型 日常生活中的一个星期中的每天的名称: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; 24 PASCAL语言基础及基础训练 第 25 页 共 48页 3、 函数:PRED()、SUCC()、ORD()。因为枚举类型是有序的,所以可以使用上述三个和序 数有关的函数。如: A、 SUCC(FRIDAY)的值为SATURDAY;即FRIDAY之后的一个值。 B、 PRED(YELLOW)的值为GREEN。即YELLOW之前的一个值。 C、 ORD(BLUE)的值为2;即BLUE在其对应的枚举类型中排在第二位。 二、子界类型 子界类型也是自定义数据类型中的一种。在上一节的枚举类型中我们知道,枚举类型是把一种数据类型所有的值都列举出来。而当需要自定义的类型是一序列连续的数据,并且数量很大时,枚举类型就不适合了,这时,我们就会采用子界类型。子界类型,顾名思义,就是当数据是连续的时,可以指定其上界及下界来定义。定义方法与枚举类型相似。 TYPE 类型名称=上界..下界; 如:TYPE YEAR=1900..2000;是定义一个名为YEAR的数据类型,其值可取为1900—2000。 再如:TYPE NUMBER=1..9; CHARACTER=?a?..?z?; 上述语句定义了两个子界类型的变量,第一个NUMBER的取值为1至9;第二个CHARACTER的取值为小写字母‘a’至‘z’。 三、记录类型 记录型数据类型是PASCAL语言中做搜索问题中一定要用到的数据类型,所以,它在PASCAL语言中占着非常重要的地位。学过数据库管理软件的人都知道,在数据库文件中,有一个非常重要的概念—记录,例如:一个人的各门成绩,一个人的各种信息(姓名、性别等等),我们都把它们存放成一条记录而给予一个统一的名称。 1、 记录说明:记录类型和枚举类型一样,都要在程序头部用TYPE引导说明。语法如下: TYPE 类型名称=RECORD 域变量1:基类型; 域变量2:基类型; ???? END; 然后在常/变量说明中就要以用这种类型了。在程序中使用必须指定变量名与域名。 [例6、2]编一程序,用来记录20个学生的姓名、年级、班级、性别、语文成绩、数学成绩、总分,平均分。 Type student=record Name:string; Grade,class,chinese,mathe,sum:integer; Average:real; Male:boolean; End; Var s:array[1..20] of student; I,j:integer; Begin For I:=1 to 20 do begin Write(?please input the student?s name,grade,class,male,chinese,mathe); Readln(s[I].name); Readln(s[I].grade); Readln(s[I].class); Readln(s[I].male); Readln(s[I].chinese); Readln(s[I].mathe); 25 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PASCAL语言基础总成含题目(5)在线全文阅读。
相关推荐: