全国青少年信息学奥林匹克联赛培训习题

更新时间:2024-05-09 18:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

成都树德实验中学Pascal程序设计 - 1 -

第一章 计算机基础知识

1、我国先后自行研制成功“银河”系列的巨型计算机,其中: “银河”于1983年问世,其运算速度为每秒 1亿 次; ―银河Ⅱ‖于1992年诞生,其运算速度为每秒 10亿 次;

“银河Ⅲ”于1997年通过国家鉴定,其运算速度为每秒 130亿 次。

2、计算机的特点: 运算速度快 、 计算精度高,可靠性好 、 有记忆和逻辑判断能力 、 有自动招待程序的能力 、 可处理各种类型的数据与信息 。

3、计算机应用于: 数字计算 、 信息处理 、辅助设计(CAD)和辅助教学(CAI) 、工业控制 、多媒体应用 、 网络技术 。

4、下列软件均属于操作系统的是: B (因为WPS、WORD、FOXBASE是应用软件) (A)WPS与PC DOS (B)WINDOWS与MS DOS (C)WORD与WINDOWS (C)FOXBASE与OS/2

5、操作系统是重要的系统软件,下面几个软件中不属于操作系统的是 C (A)MS-DOS (B)UCDOS (C)PASCAL (D)WINDOWS95

6、MS-DOS系统对磁盘信息进行管理和使用是以 A 为单位的。【对磁盘信息的存取必须以访问文件方式进行】

(A)文件 (B)盘片 (C)字节 (D)命令

7、在计算机内部用来传送、存贮、加工处理的数据或指令(命令)都是以 C 形式进行的(计算机内部无论是数据还是命令都需要转换成二进制码才能传送、存贮、加工处理)

(A)十进制码 (B)智能拼音码 (C)二进制码 (D)五笔字型码

8、微机内的存储器的地址是以( B )编址的。【字长表示一个存储单元由多少位数组成,八位机的一个字长是1B,十六位机的一个字长是2B,字长位越多,可访问的存储器的地址也越多】

(A)二进制位 (B)字长 (C)字节 (D)微处理器的型号 9、下列诸因素中,对微机工作影响最小的是( B ) (A)尘土 (B)噪声 (C)温度 (D)湿度

10、在24*24点阵的字库中,汉字“一”与“编”的字模占用字节数分别是( C ) (A)32、32 (B)32、72 (C)72、72 (D)72、32

【在汉字编码中,字模汉字占用字节数与笔画的多少无关,因每行24点需要3B存储空间,24行共需要72B存储空间】

11、将DOS系统盘插入A驱动器启动机器,随后使用一批应用软件,在此过程中,DOS系统盘(C)

(A)必须始终插入在A驱动器中 (B)不必再用

(C)可能有时要插入A驱动器中 (D)可能有时要插入B驱动器中

- 2 - 成都树德实验中学Pascal程序设计

【因机器启动成功后,常用命令常驻内存中,当需要调用操作系统中的外部命令时,需要再次再次插入A盘】

12、计算机能直接执行的指令包括两部分,它们是(B)

(A)源操作数与目标操作数 (B)操作码与操作数(C)ASCII码与汉字代码(D)数字与字符

【因计算机指令系统由操作码和操作数组成】 13、在微机中,通用寄存器的位数是( C )

(A)8位 (B)16位 (C)计算机字长 (D)32位 【因微机寄存器的位数与机器有关,取决于计算机字长】 14、在计算机中,ASCII码是( B )位二进制代码

(A)8 (B)7 (C)12 (D)16

【表示27个状态,用128个不同的二进制编码来表示控制符号、十进制数、字符、大小写英文字母,最高位设置为0】

15、计算机的软件系统通常分为( A )

(A)系统软件与应用软件 (B)高级软件与一般软件 (C)军用软件与民用软件 (D)管理软件与控制软件 16、启动计算机引导DOS是将操作系统( D )

(A)从磁盘调入中央处理器 (B)从内存储器调入高速缓冲存储器 (C)从软盘调入硬盘 (D)从系统盘调入内存储器 17、不同的计算机,其指令系统也不相同,这主取决于( C )

(A)所用的操作系统 (B)系统的总体结构(C)所用的CPU (D)所用程序设计语言 【CPU包括运算器、控制器,所有的控制的运算操作,均由控制器中的微指令进行操作。】 18、在外部设备中,绘图仪属于( B )

(A)输入设备 (B)输出设备 (C)辅(外)存储器 (D)主(内)存储器 19、RAM中的信息是( B )【RAM随机存储器】

(A)生产厂家预先写入的 (B)计算机工作时随机写入的

(C)防止计算机病毒侵入所使用的(D)专门用于计算机开机时自检用的 20、计算机主机是由CPU与(D)构成的

(A)控制器 (B)运算器 (C)输入、输出设备 (D)内存储器 21、计算机病毒的特点是( C )

(A)传播性、潜伏性、易读性与隐蔽性(B)破坏性、传播性、潜伏性与安全性 (C)传播性、潜伏性、破坏性与隐蔽性(D)传播性、潜伏性、破坏性与易读性

【计算机病毒是一种人为编制的程序,通过自我复制来传播,这是衡量病毒的首要条件,破坏性是主要目的,隐蔽性和潜伏性是显著特点】

22、WINDOWS 9X是一种(D)操作系统【可同时打开多个窗口,执行多个任务】 (A)单任务字符方式 (B)单任务图形方式 (C)多任务字符方式 (D)多任务图形方式

成都树德实验中学Pascal程序设计 - 3 -

23、某种计算机的内存容量是640K,这里的640K容量是指(C)字节【1K=1024B】 (A)640 (B)640*1000 (C)640*1024 (D)640*1000*1000

24、不同类型的存储器组成了多层次结构的存储器体系,按存取速度从快到慢的排序是(C) (A)快存/辅存/主存(B)外存/主存/辅存(C)快存/主存/辅存 (D)主存/辅存/外存 【辅存就是外存,快存是高速缓存,主存就是通常说的内存】 25、执行①C>DIR命令后。屏幕上显示如下画面: FORMAT COM 12145 SYS COM 4878 PUC BAE 126 XCOPY EAE 11216

4 FILE(S) 123456 BYTES FREE 接着又顺序执行了如下几条DOS命令:

② C>DIR>DF.TXT //表示将列表显示的目录作为文件写盘// ③ C>TYPE DF.TXT ④ C>DIR

试问:执行命令③和④在屏幕上显示的结果是否与①相同?

【命令②表示将列表显示的目录作为文件写入DF.TXT文件中,屏幕不显示;命令③显示DF.TXT文件的内容,所以执行命令③在屏幕上显示的结果与①相同。执行命令④在屏幕上显示的结果与①不同,多了一个DF.TXT文件。】

26、 已知A盘上的目录和文件组织如下: O ———TP———D11———F1.TXT

T

DOS——D31———F3.DOC F4.DOC

FORMAT.COM O TB F2.TXT R

其中TP、TB、DOS、D11、D31、都是子目录名。设当前命令提示符为A:\\TB>,请写出完成如下操作的DOS命令:

①将F1.TXT移到D31子目录中去;【A:\\TB>MOVE A:\\TP\\D11\\F1.TXT A:\\DOS\\D31】 ② 删除子目录TB;【A:\\TB>CD.. A:\\>RD TB或DELETE A:\\TB】 27、 执行命令时,屏幕上显示如下出错信息:

WRITE PROTECT ERROR WRITING DRIVE A

ABORT,RETRY,FAIL?

请说明这是什么错误?应如何校正?

【A盘被写保护,是退出,再试,放弃?应取出磁盘,去掉写保护,再再插入磁盘,输入R】 28、在MS DOS的根目录中,有如下文件: TIMF.EXE TIME.COM TIME.BAT

试问:C:\\>TIME<回车>执行的是什么命令?【执行内部命令,屏幕显示当前时间】 29、已知在计算机C:\\DOS下有一个正确的FORMAT.COM文件,当执行如下命令:

- 4 - 成都树德实验中学Pascal程序设计

C:\\>FORMAT A:<回车>得到的回答是BAD COMMAND OR FILE NAME提示信息,下面解释正确的是__D___ 【命令失败或文件名错误,若文件名正确,则是路径不对】

(A)根目录中没有AUTOEXEC.BAT文件;【自动批处理文件】

(B)在执行该命令前操作者没执行过PATH命令;【如果执行过PATH,系统自动搜索】

(C)C:\\DOS中的FORMAT.COM文件有错;

(D)由于AUTOEXEC.BAT或操作者最后执行过的PATH命令缺少路径C:\\DOS,或者根本没有执行PATH命令。

30、将A盘上50个文件用C:\\>COPY A:*.*命令复制C盘的当前目录中,在复制到某个文件时,由于读数据出错,屏幕显示:

ABORT,RETRY, IGNORE,FAIL?

键入“I”后,继续复制没再出现过错误信息,最后复制的结果是_A_。

(A)读数据出错的文件不正确,其他文件正确;

(B)读数据出错的文件不正确,其他文件也不正确;

(C)读数据出错的文件正确,其他文件不正确;

(D)复制的文件完全正确。

【因键入“I”后,忽略错误,继续复制,错误文件无法复制,其它文件正确复制】 31、以下DOS命令中,有可能在磁盘上建立子目录的是(C) (A)TYPE (B)DIR (C) (D)CD 【XCOPY能复制文件夹及子文件夹的内容】

32、在CONFIG.SYS文件中,装入特定可安装设备驱动程序的命令是( C ) (A)BUFFER (B)FILES (C)DRIVER (D)DEVICE

【BUFFER是开辟缓冲区,FILES是数据库系统中定义所需要建立的文件数,DEVICE是指装置数,只有DRIVER是驱动程序命令】

33、执行DOS命令:C:\\ATTRIB A:*·*的功能是( B )

(A)查看A盘上所有文件属性 (B)查看A盘上当前目录中所有文件属性 (C)查看A盘上所有系统文件属性 (D)删去A盘上所有隐含文件的属性 【ATTRIB的作用是查看当前目录下的所有文件属性】 34、执行下列DOS命令,效果等价的是( D )组 (A)COPY *.FOR 与 COPY *.FOR CON (B)COPY A:* . * B: 与 XCOYP A:* . * B:

(C)COPY FILE1.TXT+FILE2.TXT 与 COPY FILE2.TXT+FILE1.TXT (D)XCOPY A:* . * B:/S 与 DISKCOPY A: B:

【A组的左边是错误命令,右边是将文件内容复制到外设,这里是显示器;B组错,因左边的COPY命令只能复制文件,不能复制文件和带目录路径的文件夹;C组错,因文件的联接复制与文件的先后顺序有关;D组操作效果是将A盘中包括系统在内的所有文件自制到B盘】 35、下列文件名中,属于DOS中的保留设备名的为( C ) (A) AUX (B) COM (C)CON1 (D)PRN1 【 CON1表示接外设端口,其他和保留设备名无关 】

成都树德实验中学Pascal程序设计 - 5 -

36、对具有隐含属性(H)的当前目录下的文件AB.TXT,能成功执行的DOS命令是 (A)TYPE AB.TXT (B)COPY AB.TXT XY.TXT

(C)DIR AB.TXT (D)REN AB.TXT XY.TXT

【A 只有TYPE显示文本文件内容的命令,能够成功执行DOS命令,其他命令都说没有发现该文件】

37、INTERNET的规范译名应为( B ) (A)英特尔网 (B)因特网 (C)万维网 (D)以太网

【因特网又称国际互联网。我国1994年正式联入,1997年7月18日全国科学技术名词审定委员会作出命名,中文名词为“因特网”注译是“指全球最大的、开放的、由众多网络相互连接而成的计算机网络。万维网是WWW的中文命名,英文是WORLD WIDE WEB广泛联络世界的网,这里是指基于超文本的、方便用户信息浏览和信息搜索的信息服务系统。以太网ETHERNET是一种可以随机存取的计算机局域网】

38、请用等号或不等号联接表示下列不同进位制数值的大小。

例如:(3)10<(4)10=(100)2<(A)16

其中圆括号外右下角的下标,表示圆括号内数的进位制。 (98.375)10 (142.3)8 (56.5)16 (1011000.0101)2

【答案:(98.375)10 = (142.3)8 > (56.5)16 > (1011000.0101)2 因为:

(142.3)8 = 1×82+4×81 +2×80 +3×8-1 = (98.375) 10 (56.5)16 =5×161 +6×160 +5×16-1 = (88.3125) 10

(1011000.0101)2= 1×26+1×24 +1×23 +1×2-2 +1×2-4= (56.3125) 10】

39、已知ASCII码表中的大写字母后有6个其他字符,接着便是小写字母。现已知:A字母的ASCII码为(41)16{表示16进制数41},试写出如下字母用十进制表示的ASCII码:

G →( )10 b → ( )10 t →( )10

【答案:A的ASCII码为(41)16 →4×101 +1×100= (65) 10

G的ASCII码为(65+7)10→(72)10, b的ASCII码为(65+26+6+1)10 →(98)10, t的ASCII码为(98+19)10→(117)10】

40、一个汉字的机内码目前通常用2个字节来表示:第一个字节是区码的区号加(160)10;第二个字节是区位码的位码加(160)10。

已知:汉字“却”的区位码是4020,试写出机内码两个字节的二进制的代码:

1

1 1 0 0 1 0 1 1 0 0 1 0 0 0 0 【因为:“却”的机内区码为160+40=200,对应的二进制的代码为11001000 “却”的机内位码为160+20=180,对应的二进制的代码为10110100】

41、下面四个不同进制的数,最小的一个数是_____ C_____。

(A) (11011001)2 (B)(75)10 (C)(37)8 (D)(A7)16 【因为:(11011001)2→ 1×27+1×26+1×24 +1×23 +1×20 = (217) 10 (37)8→ 3×81+7×80= (31) 10 (A7)16→10×161+7×160= (167) 10】 42、小张用十六进制、八进制和十进制写了如下的一个等式:52 – 19=33 式中三个数是各不相同进位制的数,试问52、19、33,分别是___B____。

- 6 - 成都树德实验中学Pascal程序设计

(A)八进制,十进制 ,十六进制 (B)十进制,十六进制,八进制 (C)八进制,十六时制,十进制 (D)十进制,八进制,十六进制

【因为:如果52是十进制数,19只能是十六进制数,33只能是八进制数,都统一成十进制数有52-25=27符合题意。如果52是十六或八进制数,19只能是十进制数,33是八或十六进制数,都统一成十进制数有82-19=63(不是27)或42-19=23都不合题意。】

43、如果用一个字节来表示整数,最高位用作符号位,其他位表示数值。例如:

0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 表示+1 表示-1 ↑符号位表示正 ↑符号位表示负 ① 试问这样表示法的整数A的范围应该是_____A____。

(A)- 127≤A≤127 (B) - 128≤A≤128 (C)- 128≤A<128 (D) - 128

【因为:正整数的范围仅能用7位位二进制数表示,7位全为1时表示127】 ② 在这样表示法中,以下___D___说法是正确的

(A) 范围内的每一个数都只有惟一的格式 (B) 范围内每一个数都有两种格式 (C) 范围内的一半数有两种格式 (D) 范围内只有一个数有两种表示格式

【因为:正负数都只有唯一的表示格式,而0可以有两种格式,即:10000000和00000000】

44、已知小写字母“m”的十六进制的ASCII码值是6D,则小写字母“c”的十六进制数的ASCII码值是( D )

(A) 98 (B)62 (C)99 (D)63

【因为:“c”的十六进制数的ASCII码值是6D-A=63或6×161 +13×160 -10×160 】 45、计算机中的数有浮点与定点数两种,其中用浮点数表示的数,通常由( C )这两部分组成。

(A) 指数与基数 (B)尾数与小数 (C)阶码与尾数 (D)整数与小数

【因为:浮点数的表示与数学中的科学计数法有相似之处,由小数及10的N次幂表示,计算机中的浮点数将小数部分表示为尾数,将10的N次幂的N作为阶码】

46、十进制算术表达式:3*512+7*64+4*8+5的运算结果,用二进制表示为( B ) (A) 1011100101 (B) 11111100101 (C) 11110100101 (D) 11111101101

【因为:3*512=(21+20)*29=210+29,7*64=(22+21+20)*26=28+27+26,4*8=22*23=25,5=22+20 3*512+7*64+4*8+5=210+29+28+27+26+25+22+20=11111100101】

47、组成“教授”(JIAO SHOU),“副教授”(FU JIAO SHOU)与“讲师”(JIANG SHI)这三个词的汉字在GB2312-80字符集中都是一级汉字,对这三个词排序的结果是( D )

(A) 教授、副教授、讲师 (B)副教授、教授、讲师 (C)讲师、副教授、教授 (D)副教授、讲师、教授

【因为:计算机对字符的排序是按照字符的ASCII码值的大小进行排序的,FJIAN

48、下列无符号数中最小的数是( C )【同41题】

成都树德实验中学Pascal程序设计 - 7 -

(A)(1101001)2 (B)(75)10 (C) (37)8 (D)(2A)16

49、GB2313-80规定了一级汉字3755个 ,二级汉字3008个,其中二级汉字字库中的汉字是以( B )为序排列的。

(A) 以笔画多少 (B) 以部首 (C) 以ASCII码 (D) 以机内码

【因为:GB2313-80方案是我国于1981年颁布的《信息交换用汉字编码字符集》,共收录了6763个汉字,其中一级汉字3775个是按拼音排序,二级汉字3008个,按照部首排序,另外还有682个图文符号。】

第二章 算法及算法描述

1、什么是算法?它有哪些性质?

【算法是指为解决某一特定特定类型问题而选取的一系列方法和实施步骤。具有有限性、确定性、可行性和输入输出的特性】

2、算法常用的描述方法有哪些?

【算法常用的描述方法有自然语言、N-S图和程序设计语言】

3、N-S图包括哪三种基本结构?【N-S图包括顺序、选择和循环三种基本结构】 4、判断一个数a是不是奇数,如果是b=1,否则b=0,画出N-S图:

输入a odd(a) T b←1 输出b

F b←0 5、画出求a,b的最小公倍数的N-S图

输入a,b m ← a*b a mod b≠0 a ← b b ← a mod b 输入a,b m ← a*b a ← b b ← a mod b a mod b=0 输出m/b的商

输出m/b的商 - 8 - 成都树德实验中学Pascal程序设计

第三章 Pascal程序设计语言基础

1、 Pascal语言程序的基本结构: 程序部首、程序说明、程序体(语句部分)

2、Pascal语言中数据类型有简单类型(包括整型、实型、字符型、布尔型)、结构类型、指针类型。

3、Pascal语言程序的基本符号:

字母符号:26个大小写英文字母: A??Z,a??z 数字符号:0??9

专用符号:Pascal语言允许使用的符号。

符号 + - * / > < >= <= = <> := ; 含义 加法号 减法号 乘法号 除法号 大于 小于 大于等于 小于等于 等于 不等于 赋值号 语句分隔符 符号 , ∶ ˊ ‥ ^或↑ ( ) [ ] {或(* }或*) · 含义 参数变量分隔符 变量与类型名分隔符 字符常量或字符串常量限定符 子界说明下界与上界分隔符 指针变量批示符 参数或嵌套表达式开始标志符 参数或嵌套表达式结束标志符 下标或集合表达式开始标志符 下标或集合表达式结束标志符 注释行开始标志符 注释行结束标志符 记录域分隔符程序结束符小数 4、Pascal语言程序的保留字 Pascal语言中具有特殊含义的词和用法的专用英语单词或缩写,不允许作其它使用。使用时大小写均可。Pascal使用的保留字有:

and array begin case const div do end file for orward function if

in

downto else label mod while with

nil not of or packed procedure program record repeat set string then to type until var

5、标准标识符:

以字母开头,由字母和数字组合表示常量、变量、类型、文件、函数、过程或程序名字的字符串。 Pascal语言中具有特殊含义的标识符共39个。

标准常量 标准类型 标准文件 标准函数 标准过程 6、标准函数 算术函数:

false true maxint integer boolean real char text input output abs arctan chr cos eof eoln exp in odd ord pred random round sin sqr sqrt succ trunk assign append dispose close exit new read readln reset rewrite write writeln 成都树德实验中学Pascal程序设计 - 9 -

函数名称 函数标识符 绝对值 平方值 平方根 正弦 余弦 反正切 指数 abs(x) sqr(x) sqrt(x) sin(x) cos(x) arctan(x) exp(x) 自然对数 ln(x) 函数类型 说明 integer integer real 求x的绝对值 real integer integer real 求x的平方值 real integer(≥0) real(≥0) 求x的平方根 real(≥0) integer real 求x的正弦 real integer real 求x的余弦 real integer real 求x的反正切 real integer real exp(x)=ex real integer(>0) real 求x的自然对数 real(>0) 自变量类型 转换函数: 函数名称 函数标识符 自变量类型 截尾 trunc(x) real 舍入 round(x) real integer char 序号 ord(x) boolean 枚举 字符 chr(x) integer 顺序函数: 函数名称 函数标识符 自变量类型 integer char 前趋 pred(x) boolean 枚举 integer char 后继 succ(x) boolean 枚举 逻辑判断函数: 函数名称 函数标识符 自变量类型 奇函数 odd(x) 行结束函数 eoln(x) 文件结束函数 eof(x) integer 文件 文件 函数类型 integer integer integer char 说明 去掉实数的小数部分 将实数四舍五入到整数 求x的序号 函数值是以x为序号的字符 函数类型 integer char boolean 枚举 integer char boolean 枚举 说明 取自变量x的前一个数据(若x是第一项,则函数无意义) 取自变量x的后一个数据(若x是最后一项,则函数无意义) 函数类型 说明 boolean 判断自变量的奇偶性 boolean 判断文件位置指针是否指向换行符 boolean 判断文件位置指针是否指向文件结束标志 - 10 - 成都树德实验中学Pascal程序设计

第四章 程序设计初步

一、填空题

1、已知:a,b是整型变量,c是实型变量,对以下各组输入,执行readln(a,b,c)后的结果为:

⑴ 正常输入 ⑵ 出错 ⑶ 等待输入。 分别写出理由。 ⑴ 41 3.7 7 ⑵ 41 37 ⑶ 41.0 37 7 ⑷ 41 37 0.7 ⑸ 41 3 0.7 ⑹ ’41’ 3 0.7

2、已知a1、a2和a3的布尔值分别是:true、false、false。 ⑴ not al and not a2 =____ ____。 ⑵ al or a2 and a3 =____ ____。

⑶ ( not al or a2 )and ( a2 or a3 ) =____ ____。 3、根据以下叙述内容,选择相应题号归类填写: ① 当布尔表达式的值为true时不再执行循环体。 ② 当布尔表达式的值为false时不再执行循环体。

③ 循环的特点是先判断,后执行,可能一次也不执行循环体。 ④ 循环的特点是先执行,后判断,至少执行一次循环体。 ⑤ 循环体中的语句成份个数超过一个的时候,必须构成复合语句。 ⑥ 循环体中的语句成份个数超过一个的时候,不需要构成复合语句。 归类填写:

⑴ 当型循环while ________________。 ⑵ 直到型循环repeat ___________________。 4、case语句的执行过程是什么?

【先计算出case后的表达式的值,再寻找与之相对应的标号所指的语句执行,执行结束后退出case语句】

5、语句标号与情况标号的区别是什么?

【 语句标号作为转向使用,情况标号只局限于case语句内】 6、结构化程序对使用goto语句的原则是什么?

【不允许在多个语句前出现相同标号,不允许转到结构语句的内部。】

7、对于什么样的问题,用for循环比较合适。而对于什么样的问题,需要使用while和repear循环来处理。【循环次数确定时比较合适用for循环,否则使用while和repear循环】

成都树德实验中学Pascal程序设计 - 11 -

8、设k为整型变量,用case语句重写下面的程序段。 if ( k<=10 ) and ( k>0 ) then

if k>5 then if k<8 then x:=0

else x:=1 else if k>2 then x:=3 else x:=4;

二、选择题

1、算法是指 _______。(B)

(A) 为解决问题而编写的计算机程序 (B) 为解决问题而采取的方法与步骤 (C) 为解决问题而需要采用的计算机语言 (D) 为解决问题而采用的计算方法

【算法是指人们为了解决问题而选取的方法和实施步骤,而程序设计只是用计算机去实现问题求解的一种手段。计算机语言则是程序设计的基础,计算方法是在解决问题过程中所需要的数学模式等.】

2、下列 _______ 程序行是对的。(C)

(A) x:=y:=5; (B) a+b:=c3; (C) y:=1; y: =y+1; (D) i: =x10’’;

【赋值号的左边只能是变量,一个赋值语句只能给一个变量赋值。被赋值的变量本身可以作为因子参与运算。】

3、下列程序段运行后,变量value的值为 ________。 x:=20;

if x>=10 then value:=5*x else value:=4*x; (A) 100 (B) 80 (C) 90 (D) 70 4、下列程序段运行后,变量max的值为 ________。 a:=5; b:=10; max:=a; if b>max then max:=b;

(A) 5 (B) 10 (C) 5和10 (D) 以上都不是 5、下列程序段运行后,变量a,b的值为 ________。 a:=3; b:=4;

if a>b then begin t:=a; a: =b; b:=t;end; (A) 3,4 (B) 4,3 (C) 3,3 (D) 4,4

6、下列if语句中,试指出:当x=80时,运行的结果是 ___ ,x=5时结果为 ___。 (A) y=9 (B) y=5 (C) y=10 (D) y=100 (E) y=200 y:=0;

if x<0 then y:=5;

else if x<10 then begin y:=10; if x<100 then y=100 end else y=200;

7、请从供选择的程序行中选出能计算下列各算式的正确程序行: begin

a:=1; x:=1 repeat

_______ ; x:=x+2;

- 12 - 成都树德实验中学Pascal程序设计

until x=21; writeln(’s=’,s); end.

① s=1+3+5+7+?+19 ② s=-1+3-5+7-9+?+19 ③ s=1/(1*3)+1/(3*5)+1/(5*7)+?+1/(17*19) ④s=1+(1+3)+(1+3+5)+?+(1+3+5+?19)

(A) a*x; s:=s+a; a:=a* (=a); (B) s:=s+x; (C) a:=-a; s:=s+a*x;

(D) b:=b+x; s:=s+b; (E) a:=x* (x+2); s:=s+1/a; (F) b:=b+x; a:=-a;8、下列程序是计算 ___ 公式的。 s:=0; t:=1; for i:=1 to 10 do

begin t:=t*i;s:=s+t end;

(A) s=1+2+3+4+?+10 (B) s=1*2*3*4* ?* 10 (C) s=1!+2!+3!+4!+?+10! (D) s=1+2*3+3*4+4*5+?+9*10 三、判断题

1、Pascal的语句分为两大类:基本语句和复合语句。 2、整型数据可以赋给实型变量。 3、自定义场宽分为标准场宽和指定场宽。 4、写语句必须带有输出项。

5、一个变量或常量可以看成为一个表达式。 6、程序中read;readln;均为合法语句。 7、未定义场宽时,按隐含场宽输出。

8、复合语句与程序执行部分的“begin?end”意义不同。 9、布尔型数据是顺序型数据。 10、not true的值是false。 11、Pascal中可以输入、输出一个布尔型数据。

12、复合语句是一种构造型的语句,它的地位和一个基本语句相同。 13、情况常量也必须在说明部分说明。

14、同一情况常量不能在同一个case语句中出现二次以上。 15、情况常量在程序执行部分出现的次序可以是任意的。 16、可用字符作为情况标号。 17、判断下列语句的正误: ⑴ x:=3,y:=4 ,e:=5 ⑵ x*2:=y;

⑶ x+1:=y-2; ⑷ readln(a、b、c、d);

*b); s:=s+1/(a 成都树德实验中学Pascal程序设计 - 13 -

⑸ readln(a+b,c); ⑹ writeln(a:=sin(30)); 四、阅读程序写出运行结果。

⑴ program ex1(input,output);

var a,b,c,d:integer; L,e,g:boolean;

begin

a:=3; b:=7;s:=a+b;

d:=a div b;

L:=ab; write(’s=’,s:5); writeln(’d=’,d:5); writeln(’l=’,l);

writeln(’e=’,e, ’g=’,g); writeln(b/a:5:5)

end.

⑵ program ex2(input);

var a,b:integer; c,d:boolean; begin

a:=8; b:=7;

c:=odd(a); d:=odd(b); writeln(’c=’,c); writeln(’d=’,d); if a>b then begin

if c=d then write(c) else write(d) end

end

⑶ program ex3(input,output);

label 10;

var c:char; begin

for c:=’a’ to ’z’ do begin

if c>’s’ then goto 10; write(c,’’); end; 10:

end.

⑷ program ex4(input,output); var t,s,i:integer;

begin

t:=0; s:=0; for i:=-5 to 5 do begin

t:=t+1;

- 14 - 成都树德实验中学Pascal程序设计

s:=s+t+i; end;

writeln(’t,s=’,t,s:10); end.

⑸ program ex5(input,output); var t,n,s:integer; begin

t:=1; n:=3; s:=0; while s < 10 do

begin t:=t*n;s:=s+t;end; write(’s=’,s);

end.

⑹ program ex6(input,output); var p,m:integer;

begin

p:=20; m:=2;

repeat

p:=p-m; m:=m+3; until m>p;

write(’m, p=’,m,’’,p);

end.

⑺ program ex7(input,output); var n,a:integer;

begin

n:=6; a:=0; while n>1 do begin a:=1; repeat

write(’ *’); a:=a+1; until a>=n; writeln; n:=n-1; end

end.

⑻ program ex8(input,output);

var i,j,k,s:integer; begin s:=0;

for i:=3 downto 1 do begin

for j:=1 to 3 do begin

成都树德实验中学Pascal程序设计 - 15 -

k:=0; repeat

k:=k+1; s:=s+k; until k=j; end; s:=s-(k+1); end;

write(’s=’,s); end.

⑼ program ex9(input,output); var r,c,i:integer;

begin i:=20;

for r:=1 to 5 do begin

write(’’:i);

for c:=1 to r*2-1 do write(c:1); writeln; i:=i-1 end

end.

10、阅读程序,写出运行后变量x的值。 program ex10(input,output); var x, x1,x2,i:integer; begin x1:=3; x2:=8;

for i:=1 to 5 do begin

x:=(x1+x2) *2;

x1:=x2; x2:=x; end;

writeln(’x=’,x); end.

11、阅读程序段,并写出计算公式(假设x的值已给出)。 e:=1; a:=1;

for n:=1 to 10 do begin

a:=a*x/n; e:=e+a; end;

五、完善程序

1、完善程序,使其能输出如下图形:

- 16 - 成都树德实验中学Pascal程序设计

* * * * * * * * * * * * * * * program ex4_5_1(input,output); var

i,j:integer;

begin

for i:=1 to ① do begin

write(’ ’: ② ); for j:=1 to ③ do write( ④ ); writeln; end;

end.

2、下面是一个求:1/1+1/2+2/3+3/5+5/8+8/13+13/21+21/32+?前20项的和的程序段,试将程序补充完整:

s:=0; a:=1; b:=1; for k:=1 to 10 do begin

s:=_____①______; a:=_____②______; s:=_____③______; b:=_____④______; end; writeln(s);

3、求出满足下列条件的二位数:

将此二位数的个位数字与十位数字进行交换,可以得到一个新的数,要求新数与原数之和小于100(每行输出6个满足要求的数)。

begin

k:=0;

for i:=____①_____ to 99 do begin

x:=____②_____; y:=____③_____; j:=x*10+y;

if ____④_____ then begin

k:=k+1; write(i:4);

__⑤__ then writeln; end; end; end.

六、编写程序

1、编写程序,分别用字符打印如下图形:

成都树德实验中学Pascal程序设计 - 17 -

⑴ * * * * * ⑵ @ * * * * * @ @ * * * * * @ @ @

2、键入a,b二个变量的值,打印输出a+b的横式与竖式。 3、键入三个变量值a,b,c,将它们交换值打印输出。. 4、求一个长方形的周长和面积。

5、键入一个四位整数(如3529),将其各位数字倒序(如9253)打印。 6、输入一个字符,输出该字符及其序数值。

7、输入两个字符,分别打印它们的前导值,后续值和字符码。 8、输入圆的半径,分别打印周长和面积值。

9、输入两个整数,输出它们的平方和及它们的平方根。

10、输入两个整数,输出它们相除的整数商及余数。(用算式表示) 11、输入一个时间的秒数,分别将其换算为下述时间单位输出: * 小时 * 天 * 星期

12、读入二个整数a,b,输出其中最小的数。 13、判断读入的整数a是奇数还是偶数。

14、读入二个字符,若这两个字符的ascⅡ码之差是奇数,打印这两个字符的后续字符;否则打印它们的前趋字符。

15、将字母A、B、C、D或a、b、c、d转换成1、2、3、4,其余的字符转换成5。 16、输入三个数a,b,c, 打印出最大者。 ⑴ 不嵌套的if语句; ⑵ 嵌套的if语句。 17、读一组整数,用0作为终止标志,打印其中正、负数的个数及各自的总和。 18、找出被2、3、5除时余数为1的最小的十个数。

19、选票统计:有a、b、c、d四位候选人,n位投票人,统计时,a、b、c、d以外的字符为弃权,按得票多少打印出候选人代号及得票数。

20、按字母表的顺序和逆序每隔一个字母打印输出。 21、打印输入的n个整数中的最大、最小数及其字号。 22、打印以下各式的值:

⑴ s=1+3+5+?+99

⑵ s=1+1/2+1/3+?+1/100

⑶ s=1x2+2x3+3x4+?+nx(n+1)

23、猴子吃枣问题。猴子摘了一堆枣,第一天吃了一半,还嫌不过瘾,又吃了一个;第二天又吃了剩下的一半零一个;以后每天如此。到第十天,猴子一看只剩下一个了。问最初有多少个枣子?

24、求e=1+1/2!+1/3!+?+1/n!

25、齐王点兵的故事,相传齐王韩信才智过人,从不直接点数自己军队的人数,只是让士兵先后以三人一排,五人一排,七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了(不超过100人)。

26、警察局抓了a、b、c、d四名偷窃嫌疑犯,其中有一人是小偷。审问中: a说:“我不是小偷。” b说:“c是小偷。”

- 18 - 成都树德实验中学Pascal程序设计

c说:“小偷肯定是d。” d说:“c冤枉人!”

现在已经知道四人中三人说的是真话,一人说的假话。问到底谁是小偷。

27、甲乙丙丁戊五个人在运动会上分获百米、二百米、跳高、跳远和铅球冠军,有四个人猜测比赛结果:

a说:乙获铅球冠军,丁获跳高冠军。 b说:甲获百米冠军,戊获跳远冠军。 c说:丙获跳远冠军,丁获二百米冠军。d说:乙获跳高冠军,戊获铅球冠军。 其中每个人都只说对一句,说错一句。求五人各获哪项冠军。 28、编程求出下式中n的最大值:22+42+62+?+n2<1500。

29、打印以下图形:(键入n,控制图形的行数,以下图形均为n=3)⑴ * * * * * * * *

* * * * * * * * * * * * * * * * ⑵ + +

++ ++ +++ +++ ⑶ e d c b a

c b a a

⑷ 1 3 5 7 9 1 3 5 7

30、把一张一元钞票换成一分,二分和五分的硬币(每种至少一枚)。问有哪几种换法? 31、求二个正整数的最大公约数和最小公倍数。

32、任给一个自然数n,求出这个自然数不同因数的个数。

例如n=6时,因为1,2,3,6这四个数均是6的因数,故输出为total=4。

33、有A、B、C、D、E五本书,要分给张、王、刘、赵、钱五位同学,每人只能选一本,事先让每人把自己喜爱的书填于下表,编程找出每人都满意的方案。

张 王 刘 赵 钱 A √ √ B √ √ √ √ C √ √ D √ √ E √ √ 成都树德实验中学Pascal程序设计 - 19 -

第五章 枚举类型和子界类型

一、选择题

1、指出正确的枚举类型定义语句:

(A) type ktype=( ’a ’, ’b’ , ’ c ’ , ’d ’); (B) type ktype=( 1,2,3,4,5 );

(C) type ktype=( class1 , classl2 , class3 , class4 ); (D) type ktype=( red, blue, green, red ); 2、指出正确的子界类型定义语句:

(A) type stype= ’a ’..’k’; (B) type stype= 100..50; (C) type stype= ’z ’..’a’; (D) type stype= 2.5..4.5; 3、变量定义如下:

var

s1, s2:( red , blue , green , yellow); k:integer; 则正确的语句是:

(A) k:=succ(red); (B) read(s1, s2,); (C) s2:=green; (D) writeln(s1, s2,); 4、变量定义如下: var

s1, s2:’A ’..’ Z ’; ch1,ch2:char; 则正确的语句是:

(A) ch1:=succ(K); (B) read(ch1, ch2,); (C) s1:= ’ a ’; (D) s2:= ’ ABC ’; 5、变量定义如下: var

num1: -10 ..10; num2:integer; 则有可能出错的语句是:

(A) num2:= num1; (B) num1:= ads(num2) div 2; (C) num2:= num1*num1; (D) num1:= num2; 二、判断下列类型定义哪些是正确的,哪些是错误的 1、type atype=10..10 * 10; 2、type atype=1. 2 ..2. 0; 3、type atype=a .. z; 4、type atype= ’ 1 ’..’ 5 ’; 5、type atype=( ’a ’, ’ b ’, ’ c ’, ’d’, ’ e ’); 6、type atype=(m,n,p,q); 7、type atype=(ch1, ch2, char); 8、type atype=( ’ k ’..’ e ’);

- 20 - 成都树德实验中学Pascal程序设计

9、type atype=(1a , 2a , 3a , 4a , 5a); 10、type atype=(tue , mon , fri , sun);

三、类型定义如下

type name=(Cara , Jane , John , Mali , Tom); 计算以下表达式的值:

1、succ(Jane) = John 2、pred(Tom)= Mali 3、ord(Cara)= 0

4、succ(succ(John))= Tom

5、suee(pred(pred(Mali))= John 6、ord(pred(succ(John))= 2 四、编程

1、变量s已定义如下:

var s:(knife , rule , pen , rubber);

且s中已有值,试写一程序片段,输出s中的值。

2、定义枚举类型monthtype表示十二个月,输入1~12中的某一个数,输出对应月份的英文缩写和表示下一个月的数字。如

输入6

输出jun next month:7。

3、由五个字符组成一个字符串,规定前四个字符为小写字母,第五个字符为数字,问有多少种排列方法。

4、类型定义

type ren= ’ A ’..’ F ’;

用A至F表示6个人,输出6个人相互握手的各种情况, 并统计握手的次数。

第六章 数 组

一、选择题

1、设数组a[10..100,20..100]以行优先的方式顺序存储,每个元素占4个字节,且已知a[10,20]的地址为1000,则a[50,90]的地址是______。

(A) 14350 (B) 14240 (C) 15340 (D) 13250

2、在待排序的数据表已经为有序时,下列排序算法中花费时间反而多的是___。 (A) 堆排序 (B) 希尔排序 (C) 冒泡排序 (D)快速排序

3、某数列有1000个各不相同的单元,由低至高按序排列,现要对该数列进行二分法检索,在最坏的情况下,需要检索________单元。

(A) 1000 (B) 10 (C) 100 (D) 500

- 26 - 成都树德实验中学Pascal程序设计

var a, b, c:integer; procedure pro; var c: integer;

begin a:=1;b:=2;c:=3; end; begin

a:=100;b:=200;c:=300; pro;

writeln(a, b, c) end.

运行结果是:

(A) 100 200 300 (B) 1 2 3 (C) 1 2 300 (D) 100 200 3 3、程序:

program lx7-2-3(output); var x, y:integer;

procedure pd(a: integer;var b: integer); begin a:=1; b:=a+b; end; begin

x:=10;y:=20; pd(x, y); writeln(x, y:5) end.

运行结果是:

(A) 10 20 (B) 1 20 (C) 1 21 (D) 10 21 4、程序:

program lx7-2-4(output); var x:integer;

procedure pr(var z:integer);

begin z:=z+100; write( ’x=’,x); end; begin x:=10; pr(x); x:=100;

writeln(’x=’,x) end.

运行结果是:

(A) x=110 x=100 (B) x=10 x=100 (C) x=110 x=110 (D) x=100 x=100 5、程序: program lx7-2-5(output); var x:integer;

function f1(m: integer): integer); function f2(n: integer): integer); begin f2:=n+1; end;

begin f1:=m * f2(m); end; begin x:=5;

x:=f1(x)+x; write(’x=’,x)

成都树德实验中学Pascal程序设计 - 27 -

end.

运行结果是:

(A) x=5 (B) x=6 (C) x=35 (D) x=30 6、程序:

program lx7-2-6(output);

var x:integer;

procedure pp(m: integer) ; var i, j: integer;

function f (n: integer): integer; begin f:=n+1; end; begin

for i:=m downto 1 do begin

for j:=1 to f(i) do write( ’ * ’ ); writeln; end; begin x:=5; pp(x); end.

运行结果是:

(A) * (B) * * * * * * (C) * * (D) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 三、阅读程序

1、指出下列程序中的全程变量、局部变量、值参、变参,并写出程序运行后的输出结果。 program lx7-3-1(input, output);

var a, b, c:integer;

procedure suan(var x:integer;y: integer) ; var m, n: integer; begin

m:=x * y;x:=x+1; y:=y+10;n:=x+y;

writeln( ’x=’,x,’y=’: 4,y,’m=’: 4,m,’n=’: 4,n) end; begin

a:=3;b:=3; suan(a, b); suan(a, b); suan(a, b) end.

2、程序: program lx7-3-2(input, output);

var s, n:integer;

function f(n:integer):integer; begin

if n=1 then f:=1

- 28 - 成都树德实验中学Pascal程序设计

else f:=n * n+f(n-1); end; begin

write( ’input n:’);readln(n); s:=f(n);

writeln( ’f( ’,n,’)=’,s) end. 该程序的功能是:

当n的值为6时,程序的运行结果是: 3、程序:

program lx7-3-3(input, output);

var a, b, c, d:integer;

procedure p(a:integer;var b:integer) ; var c:integer; begin

a:=a+1;b:=b+1;c:=2;d:=d+1; writeln( ’m ’,a, b, c, d); if a<3 then p(a, b); writeln( ’n ’,a, b, c, d) end; begin

a:=1;b:=1;c:=1;d:=1; writeln( ’x ’,a, b, c, d); p(a, b);

writeln( ’y ’,a, b, c, d) end.

该程序的运行结果是:

四、已知函数ack的计算公式如下:

n+1 m=0; ack(m, n)= ack (m-1,1) n=0;

ack (m-1, ack (m, n-1)) m≠0且n≠0. 计算ack (1, 2) 和ack (2, 2)的值。

五、完善程序

数组a中有n个按升序排列的元素,现要插入一个元素,且插入后a中元素仍是升序。定义过程p对给定的值y,首先找插入位置,然后插入。

程序:

program chashu (input, output);

const n=50;

type atype=array[1..n] of integer; var a:atype;

i, count, y:integer;

procedure p(var x:atype;y:integer;var m:integer) ;

var i, k:integer; {定义局部变量} begin

if m>=n then writeln( ’out range’) {若数组长度超过50,结束调用} else begin

① _ k:=1;__ { k控制数组的下标}

成都树德实验中学Pascal程序设计 - 29 -

while ② _(y>x[k]) and (k<=m) _do k:=k+1;{找插入点}

③ for i:=m downto k do {插入点后面的元素后移} x[i+1]:=x[i];

④___x[k]:=y; {插入y} m:=m+1 {数组长度加1} end; end;

begin {主程序} readln(count);

for i:=1 to count do {为数组赋初值} a[i]=3 * i;

for i:=1 to count do {输出数组初值} write(a[i]: 4);

write( ’y=’);readln(y); {输入待插入的数}

⑤ _ p(a, y, count); {过程调用,变参x、m在过程中的变化将影响a和count值} for i:=1 to count do {输出结果,} write(a[i]: 4); writeln end. 六、编程

1、有程序中定义一函数digit(n, k),它能分离出整数n从右边数第k个数字,如digit(31859, 3)=8,digit(32076, 5)=0。

2、有程序中定义一个函数check(n, d),如果数字d在整数n中出现,则函数值为true,否则为假,如check(9687, 7)=true, check(10345, 6)=false。

3、根据公式

arctanx(x)=x-x3/3+x5/5-x7/7+?和л=6arctanx(

13)

定义函数arctanx (x),求当最后一项小于10-6时的值。 4、已知 m?max(a, b, c) ,

max(a?b, b, c) ? max(a, b, b?c)输入a, b, c,求m。把求三个数的最大数max(x, y, z)分别定义成函数和过程来求做。

5、对6~1000内的偶数验证哥德巴赫猜想:任何一个大于6的偶数总可以分解为两个素数之和. 6、用递归的方法求1+2+3+4+?+(n-1) +n的值。 7、用递归的方法求Hermite多项式的值 1 n=0 hn(x) 2x, n=1 2xhn-1(x) -2 (n-1)hn-2(x)。 n>1 对给定的x和正整数n, 求多项式的值。 8、写一递归程序,把读入的正整数倒序输出。

- 30 - 成都树德实验中学Pascal程序设计

9、已知f(x,n)?xn?(n?1)?(n?2)???xxxx1?x用递归函数和递归过程两种方法求解

10、已知f(x,n)?n?(n?1)?(n?2)???2?1?x

计算x=4.2, n=10以及x=2.5, n=15时f的值。

11、有52张扑克牌,使它们全部正面朝上。从第2张牌开始,把凡是2的倍数位置上的牌翻成正面朝下,接着从第3张牌开始,把凡是3的倍数位置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上,接着从第4张牌开始,把凡是4的倍数位置上的牌按此规律翻转。依此类推,直到第1张要翻的牌是第52张牌为止。统计最后有几张牌正面朝上,并打印出它们的位置。

第八章 集合和记录

一、问答题

1、设有集合a=[1,3,5,7,9],b=[2,4,6,8,10],c=[1,2,3,4,5] ,d=[5],e=[ ],求下列表达式的结果。

① (a+b)-c ② (a * c)=d ③ (a+e) * (b+d) ④ 7 in(((a-b)-c)-d) ⑤ c<=(a+b) ⑥ a>=b * e-c 2、列出下列集合类型的全体元素: ① color=set of ( red, green, blue )

② num=set of 1..5

二、填空题

1、某人事登记表包括以下几个数据项:姓名最多用15个字符表示,性别用male, female分别表示男女,出生日期用年月日表示,年份在1900到1999之间,家庭住址最多用40个字符表示,以下是用一个记录来表示的数据结构,请将程序予以完善。 type sexs=( ① ); date=record

year; ② ; month: ③ ; day: ④ ; end;

personal = ⑤ ; name: ⑥ ;

成都树德实验中学Pascal程序设计 - 31 -

sex: ⑦ ; birthdate: ⑧ ; home: ⑨ ;

2、输入5个学生的出生日期(年月日)和今天的日期,然后用计算机计算并输出每个人的年龄。注意是满多少岁,如某人出生于1975 10 1,今天的日期为1994 11 1,则他的年龄为19岁;如果某人出生于1975 12 1,则他的年龄应为18岁(因为他未满19岁);如果某人出生于1975 11 2,则他的年龄也为18岁。请完善下列程序。

Program lx8-2-2(input, output); typedate=record

year:1900..1999;

month:1..12; day:1..31;

emd;

var stu : array[1..5] of date; today : date; i, age : integer;

begin

writeln( ’input 5 students birthday(yyyy mm dd):’); for i:=1 to 5 do readln( ① ); writeln( ’input 5today (yyyy mm dd):’); readln( ② ); for i:=1 to 5 do begin

age:= ③ ;

if ④ then age:=age-1; writeln( ’no,’,i,’ age: ’,age); emd; readln end.

三、编程题

1、编写一个程序读入一系列字符,将它们分别放在英文字母、数字、其他符号三个集合中,统计出各个集合中元素的个数(区分大小写),并分别输出这3个集合中的元素。

2、利用随机函数产生2个整数数列A,B,每个数列包含20个数(0到50之间),程序要求:

① 找出在B中出现而在A中没有出现的那些数,并输出。 ② 找出在B中出现而在A中也出现的那些数,并输出。

3、输入一个大写字母字符串,找出未在此串中出现的所有大写字母。

4、编写一个译码程序,将输入的一串字符(只有小写字母、数字和空格,输入时以句号结束)翻译成原码。译码规则是:

① 数字0,1,2,3,?,9分别和字母a, b, c,?, j 交换; ② 字母k, m, p, t, y分别和后继交换; ③ 其他字母和空格保持不变。

- 32 - 成都树德实验中学Pascal程序设计

5、读入两个小写字母字符串,然后输出如下信息: ① 出现在某一行字符串中至少一次的小写字母; ② 同时出现在两个字符串中至少一次的小写字母;

③ 出现在一个字符串中而不出现在另一个字符串中的小写字母; ④ 不出现在任何一个字符串中的小写字母。

6、下列竖式中不同字母代表不同数字,请编程破译每个字母所代表的数字。

s e n d

+ m o r e m o n e y

7、输入20个学生的5门功课成绩及姓名、学号,算出总分并且进行排序,最后从高到低输出这些数据。

8、编程从键盘输入两个日期,比较它们的迟早。日期格式为:mm dd yyyy,其中mm 为2位的月份,dd为2位的日子,yyyy为2位的年份,月日年之间用空格隔开。如03 31 1995表示1995年3月31日。

9、定义一个记录类型,它的每个值表示X-Y坐标上的一个点,X,Y的取值范围是1到100之间的整数。编一程序,顺序读入一个四边形的各点a, b, c, d,并判断它是否能构成正方形、矩形或者其他四边形。

第十二章 常用算法介绍

一、基本知识

1、什么是算法?算法有哪些特性? 2、评价算法优劣的两个基本要素是什么? 3、写出下列程序算法的时间复杂性或空间复杂性。 ⑴

procedure prime(n) {n的值为一个正整数} begin x=2;

while((n mid x)<>0)and(x

if x>sqrt(n)then writln(n:6,’is a prime number’)

else writln(n:6,’is not a prime number’) end;

时间复杂性___由于循环时间取决于x

function suml(n):real; begin

p:=1;sum:=0; for x:=1 to n do begin

p:=p*x;sum:=sum+p;

成都树德实验中学Pascal程序设计 - 33 -

end;

sum1:=sum; end;

时间复杂性_由于本题算法的主要操作在于循环结构中的重复操作的次数,所以其时间复杂性是0(n)_。

function sum2(n):real; begin

sum:=0;

for x:=1 to n do begin p:=1;

for y:=1 to x do p:=p*y; sum:=sum+p; end;

sum2:=sum; end;

时间复杂性__本题主要操作在于一个双重循环结构,其时间复杂性计划:_。 for x:=1 to n do begin p:=1;

for y:=1 to x do p:=p*y; sum:=sum+p; end;

x=1 y=1 O(1)=1 x=2 y=2 O(2)=2 x=3 y=3 O(3)=3

………………………………………….

x=n y=n 1+2+3+4+5…+n=n(n+1)/2≈n2 所以时间复杂性是:O(n2)。 ⑷

procedure sort(a,n); begin

for x:=1 to n-1 do begin

k:=x;

for y:=x+1 to n do

if a[y] x then交换a[x]与a[k] end;

时间的复杂性_________,空间复杂性_________。 ⑸

procedure matrimult(a,b,c); begin

for x:=1 to m do

- 34 - 成都树德实验中学Pascal程序设计

for y:=1 to n do c[x,y]:=0; for x:=1 to m do for y:=1 to n do for k:=1 to t do

c[x,y]:= c[x,y]+a[x,k]*b[k,y] end;

计算该问题的时间复杂性_________,时间复杂性_________。 ⑹ 有n×n个数据组成如下方阵:

a11 a12 a13 … a1n a21 a22 a23 … a2n a31 a32 a33 … a3n

an1 an2 an3 … ann

并已知:aij = aji,现将a11, a21,a22,a31, a32, a33,… ,存储在一维数组a[1],a[2],… ,[n*(n+1)/2]中。试问:任给i,j怎样求出k来,使得a[k]的值正好是aij,请写出由i,j计算k值的表达式。

二、写出下列程序的运行结果 1、

Program exp2_1;

var x,y,w,r,q:integer; begin

readln(x,y); r:=x; w:=y;

while wy do begin

w:=w div 2; q:=q+q;

if r>=w then begin

q:=q+1; r:=r-w; end; end;

writeln(x,’/’,y,’=’,q,’…’,r); end.

当程序运行后输入356 23

输出___________ 。 2、

Program exp2_2;

type arr=array[1..1000] of integer; var b,c,d:arr;

da,x,xl,k,max,num,y:integer; begin

max:=0;num:=1000;

成都树德实验中学Pascal程序设计 - 35 -

for x:=2 to num do b[x] :=x; for x:=2 to num do if b[x] <>0 then begin

k:=x+x; while k

b[k]:=0;k:=k+x; end; end;

for x:=2 to num-1 do if b[x] <>0 then begin

y:=1;d[y]:=b[x]; for xl:=x+1 to num do if b[xl] <>0 then begin

da:=b[xl] -b[x];k:=da;

while (x+k<=num) and (b[x+k] <>0 )do bdgin

y:=y+1; d[y]:=x+k; k:=k+da; end;

if y>max then begin max:=y;c:=d;end; y:=1; end; end;

writeln(’print is:’,max); write(’the string is:’);

for x:=1 to max do write(c[x]:4); writeln; end.

输出结果是__________。 3、

Program exp2_3; const n=4;

type tt=array[1..100] of char; var inp,t:tt;

k,num:integer;

procedure push(out,s:tt;it,ot,st:integer); var k:integer; c:tt; begin

if it>0 then begin

c:=s;

c[st+1]:=inp[it];

push(out,c,it-1,ot,st+1);

- 36 - 成都树德实验中学Pascal程序设计

end; if st>0 then begin

c:=out;

c[ot+1]:=s[st];

push(c,s,it,ot+1,st-1); end; if ot=n then begin

num:= num+1; for k:=1 to n do write(out[k]); write(’’:5); end; end; begin

for k:=n downto 1 do

inp[k] :=chr(65-k+n); num:=0;

push(t,t,n,0,0); writeln(’num=’,num); readln; end.

当程序运行后,其输出结果是__________。 4、

program exp2_4; var n:integer;

function d(n:integer):longint; begin

case n of

1:d:=0; 2:d:=1;

else d:=(n-1)*(d(n-1)+d(n-2)); end; end; begin repeat

write(’n=’); readln(n);

if n<=0 then writeln(’Once more!’); until n>0;

writeln(’d=’,d(n)); readln; end.

当程序运行后,其输出结果是__________。 三、完善程序

1、求子串位置。从键盘输入两个字符串x1,x2,要求查找出x2在x1字符串中的位置(起始位置)。

【算法分析】

⑴用两个变量分别表示输入的字符串,并求出两个字符串的长度;

成都树德实验中学Pascal程序设计 - 37 -

⑵利用i,j变量作为扫描两个字符串的指针;

⑶扫描两个字符串,当其相等时,将指针向下一个字符,当j的值大于len2时,则输出x2在x1中的位置。

⑷若子串位置不匹配,则使I的指针回溯,j指针重新指向子串的第一个字符。 Program exp3_1;

var x1,x2:string;

i,j,len1,len2,ps:integer;

function pos1(r1,r2:string;l1,l2:integer):integer; var i,j:integer; begin

i:=1;j:=1;

while (i<=l1) and ( j<=l2) do

if r1[i]= r2[j] then begin ③ ; ④ end

else begin ⑤ ; ⑥ end; if j>12 then ⑦ else ⑧ ; end; begin

readln(x1); readln(x2); writeln(x1); writeln(x2);

len1:= ① ; len2:= ② ;

ps:=pos1(x1,x2,len1,len2); writeln(ps:5); end.

2、背包问题 【问题描述】

设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为xk,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于xk,而价值的和为最大。

【算法分析】

① 记w(1), w(2), ?, w(n)每种物品的重量,u(1), u(2), ?, u(n)为每种物品的价值,x(1), x(2), ?, x(n)为每种物品选取的数量,问题成为满足条件∑x(i)w(i)≤xk,而且∑x(i)u(i)为最大。

② 记fk(y)为取前k种物品,限制重量为y时取得价值最大,则:f0(y)=0,即对一切y,一件物品都不取时,最大价值为0;fk(0)=0时,即最大重量限制为0时,不能取得任何物品,所以最大价值也为0;f1(y)=[y/w1]u1,即仅取第一种物品,则最大价值为尽可能多的装第一种物品,所以能装的数量为[y/w1],而得到的价值为[y/w1]u1。

下面用一个具体的例子来说明求解的过程。 n=4, xk=10

w1=2, w2=3, w3=4, w4=7 u1=1, u2=3, u3=5, u4=9 下面列出fk(y):

- 38 - 成都树德实验中学Pascal程序设计

y x 1 2 3 4 1 0 0 0 0 2 1 1 1 1 3 1 3 3 3 4 2 3 5 5 5 2 4 5 5 6 3 6 6 6 7 3 6 8 9 8 4 7 10 10 9 4 9 10 10 10 5 9 11 12 ③ 图中第1行表示k=1,即取第一种物品,当y=1时,无法取,所以f1(1)=0,当y=2时,可取1个第一种物品,价值为1,…,当y=10(即xk),此时,可取5个第一种物品,价值为5。

④ 当可以取2种物品时。若y=1则为0(什么都不能取);当y=2时,仅能取第一种物品,所以f2(2)=1;当y=3时,有2种取法。取一个第一种物品,价值为1;取一个第二种物品价值为3,取大者,所以f2(3)=3。以此类推。计算f2(10)时,有2种考虑,第一种是全部取第一种,即f1(10)=5;第二种是由f2(7)+3=6+9,取大者,得到f2(10)=9。

⑤ 上面给出的是计算f(i , j)的方法,但是还不能确定每种物品的选取个数。下面我们用倒推法来求出每种物品的个数。

记f(n, xk)为目标,检查:f(n-1, xk)与f(n, xk-wn)+un,若前者大,则无输出,由f(n, xk) → f(n-1, xk)。若后者大,则输出wn,计算f(n, xk-wn)。当n-1, n-2,…,到达1时,则全部输出。

Program package;

const maxxk=400;maxn=20; type tlist=array [1..maxn] of byte;

tmake=array[0..maxn,0..maxxk] of integer; var n,xk:integer; w,u:tlist; f:tmake; procedure init; var i:byte; begin

fillchar(w,sizeof(w),0); fillchar(u,sizeof(u),0); readln(n,xk); for i:=1 to n do

① ; end;

procedure make; xar i,j:byte; begin

for i:=1 to n do begin

for j:=1 to w[i] -1 do f[i,j]:=f[i-1,j]; for j:= w[i] to xk do

if f[i-1,j] >f[i,j-w[i]]+u[i] then ② ; else ③ ; end; end;

procedure print; var get:tlist;

成都树德实验中学Pascal程序设计 - 39 -

i,j:byte; begin

fillchar(get,sizeof(get),0);

i:= ④ ;j:= ⑤ ; while i>0 do

if f[i,j]=f[i-1,j] then dec(i) else begin

dec(j,w[i]); ⑥ ; end;

writeln(’n=’,n,’’,’xk=’,xk); writeln(’max worth=’, ⑦ ); for i:=1 to n do

writeln(’no.’,i',weight:’,w[i]:2,’worth:’,u[i]:2,’get’,get[i]:2); end; begin init; make; print; end.

四、编写下列程序(要求先写出问题的算法,再编写程序代码)

1、将1,2,…,9共9个数,排列成下列三角形(图1),其中a~i分别表示1,2,…,9中的一个数字,并要求同时满足下列条件:

a b c d e f g h i

图1

⑴ a

⑵ b

⑶ a+b+d+f=f+g+h+i=i+e+c+a=p。

程序要求:根据输入的边长之和P,输出所有满足上述条件的三角形的个数以及其中的一种方案。

2、如图2所示的数字三角形,请编写一个程序计算从顶到底的某处的一条路径,使该路径的数字和最大,并输出路径。

数据的输入采用:首先输入总行数,再按照每行进行数据输入。 5

7 7

3 8 3 8

8 1 0 8 1 0

2 7 4 4 2 7 4 4

4 5 2 6 5 4 5 2 6 5

图2

3、设函数定义如下: f(0)=0,f(1)=1;

f(2n)=f(n):f(2n+1)=f(n)+f(n+1),n=1,2,3,…要求对给定的n>=0,计算函数f(n)的值。

- 40 - 成都树德实验中学Pascal程序设计

采用两种编程方法,递归设计和非递归程序设计。

4、设计一个算法,从n项不同价值不同重量的物件中选取一部分,在不超过规定重量的原则下,使所选物品的总价值最大。

5、从三个元素(例如1,2,3)的字符表中选取字符,生成一个有n个符号的序列,使得其中没有2个相邻的子序列相等。如长度n=5的序列“12321”是合格的,而“12323”和“12123”都是不合格的。

6、输入一个十进制数,将其转换成十六进制的数。十六进制数中的0—9,用十进制的0—9表示,而10—15则分别用A,B,C,D,E,F表示。例如:

11150=2×(16)3+11×(16)2+8×(16)1+14×(16)0 则其十六进制数表示为:2B8E。

7、已知6个城市,用c[i, j]表示从城市i到城市j是否有单向的直达汽车(1≤i≤6,1≤j≤6)。

1 城市i到城市j有单向直达汽车; c[i, j]={

0 城市i到城市j无单向直达汽车。

编写一个程序,给出城市代号i,打印出从该城市出发乘汽车(包括转车)可以到达的所有城市。

其城市之间直达汽车情况如下图: 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0

8、求多精度a除以多精度b的商和余数。 9、四塔问题

三塔问题是大家非常熟悉的问题,下面详细说明四塔问题。设有A,B,C,D四个柱子(有时称塔),在A柱上有由小到大堆放的n个盘子,如图所示。

今将a柱上的盘子移动到d柱上去。可以利用b,c柱作为工作栈用,移动的规则如下: ① 一次只能移动一个盘子;

② 在移动的过程中,小盘子只能放到大盘子的上面; 编写一个程序,输出需要移动的盘子数和移动的步数。

本文来源:https://www.bwwdw.com/article/048g.html

Top