当前位置: 首页 > 文档资料 > C++大学教程 >

14.17 自助练习题

优质
小牛编辑
141浏览
2023-12-01

14.5 填空:

a) 计算机把大量的数据存储在二级存储设备(如——)上。
b) 一条——是由几个域组成的。
c) 可以包含数字、字母和空格的域称为——域。
d) 为了便于检索文件中的某条指定的记录,每条记录都有一个域被选作——。
e) 计算机系统的大多数信息存储在——文件中。
f) 表达了一定意义的一组相关的字符称为——。
g) 头文件 <iostream.h> 声明的标准流对象为——、——、——和——。
h) ostream成员函数——向流中写人一个字符。
i) ostream成员函数——通常用来向随机访问文件中写入数据。
j) istream成员函数——把文件位置指针重定位。

14.6 判断下列说法是否正确。如果不正确,请说明原因。

a) 从本质上说,计算机执行的是对0和1的操作。
b) 人们更愿意对位进行操作,而不愿意操作字符或域,原因是位更紧凑一些。
c) 人们把程序和数据项表示成字符.然后计算机把这些字符作为0和1的组合进行操作和处理。
d) 5位邮政编码是数值域的一个例子。
e) 在计算机应用程序中,一个人所住的街道地址通常被看作是由字母组成的域。
f) 计算机处理的数据项构成了数据的层次。在这个层次结构中,数据项按域、字符和位的顺序是越来越大.越来越复杂。
g) 记录关键字属于某个特定的域,它能够识别一条记录。
h)为了便于计算机处理信息,多数机构都把他们的信息存储在一个文件中。
i) C++程序总是通过名字来引用文件。
j) 程序建立一个文件后,计算机会自动保存这个文件以便将来引用。

14.7 练习14.3让读者编写了一组语句,实际上这些语句正好组成一类重要的文件处理程序(即文件匹配程序)的核心。在商业数据处理中,通常在每个系统中都有多个文件。例如,在应收账目系统中,一般有一个主文件,它包含了每个顾客的详细信息,如姓名、地址、电话号码、未付的欠款、信用额度、台同管理,还可能有近期购买和现金付款的简单记录。

事务发生时(即货物卖出、款额邮到),这些信息被输入到一个文件中。每个商业周期(有的公司是一个月,有的是一个星期,还有的是一天)结束时.这个事务文件(在练习14.3中称为"trans.dat")用于主文件(在练习14.3中称为"oldmast.dat")更新账户的购买和付款记录。每更新一次后,主文件就被重写成一个新文件("oldmast.dat"),它用 于在下一个商业周期快结束时执行更新过程。

文件匹配程序必须处理一些单文件程序中不存在的问题。例如,并非总是发生匹配,主文件名某位顾客可能没有在目前的商业周期中购货或付款,这样在事务文件中就没有这个顾客的记录。类似地,某位购货或付款的客户可能剐搬到这个社区来,公司可能来不及为这个顾客建立记录。
以练习14.3中的语句为基础.编写一个完整的文件匹配应收账目程序。为了进行匹配,可以用每个文件上的账号作为记录关键字。假设每个文件都是顺序文件,记录是按账号递增的顺序存储的。

当发生匹配时(即具有相同账号的记录在主文件和事务文件中同时出现),把事务文件上的美元数加到主文件的当前结算额上,并把记录写入newmast.dat中(假定购货在事务文件中用正数表示,付款在文件中用负数表示)。当某个特定的账户只有主记录但没有对应的事务记录时,只把主记录写入newmast.dat中。当只有事务记录而没有对应的主记录时,打印出消息"Unmastched transaction record for account number"(在省略号处填入事务记录的账号)。

14.8 编写好练习 14.7 中的程序后,编写一个简单的程序建立一组检验数据,测试练习14.7中的程序,使用如下的范例数据:

主文件:

账号姓名结算额
100Alan Jones348.17
300Mary Smith27.19
500Sam Sharp0.00
700Suzy Green-14.22
账号交易额
10027.14
30062.11
400100.56
90082.17

14.9 用练习14.8中建立的检验数据文件运行练习 14.7 中的程序,用第 14.7 节的程序打印一个新的主文件,仔细检查结果。

14.10 有时(很常见)几个事务记录的记录关键字相同,这是因为一个顾客在同一个商业周期内可能多次购货或付款。重写练习14.7中的应收账户文件匹配程序,使它能够处理具有相同关键字的多个事务记录。修改练习 14.8 中的检验数据,使它包含以下的事务记录:

帐号美元数
30083.89
70080.78
7001.53

14.11 写出完成如下要求的语句。假定已经定义了下面的结构并打开了用于写入数据的随机访问文件。

struct person{
char lastName[15];
char firstName[15];
char age[2];
};

a) 初始化文件 nameage.dat,使它拥有 100 个 lastName="unsigned"、firstName=""、age="0" 的记录。
b) 输入10个姓、名和年龄,并将它们写入文件。
c) 更新已有信息的文件.如果没有信息则告诉用户 No info。
d) 删除一条己有信息的记录(可以重新初始化这条记录)。

14.12 你是一家五金商店的店主。为了查看工具种类、工具数量以及每件工具的价格,你需要编制一份商品目录。编写一个程序,把文件"hardware.dat"初始化为100条空记录,输入每件工具的有关数据,能够列出所有工具的清单、删除某个工具不存在的记录以及更新文件中的任何信息。用工具标识号作为记录号,在文件中使用下列信息:

记录号工具名数量价格
3Electric sander77.98
17Hammer7611.99
24jig saw2111.00
39Lawn mower379.50
56Power saw1899.99
68Screwdriver1066.99
77Sledge hammer1121.50
83Wrench347.50

14.13 修改第4章编写的电话号码字产生程序,使其将输出写入一个文件,这样就可以方便地阅读文件。如果你有计算机化字典,则可以将程序修改成查找字典中的七字母单词。这个程序产生一些有趣的七字母单词组合,该组合可能包括两个或三个单词。例如,电话号码 8432677 产生 THEBOSS。将程序修改成用计算机化字典查找字典中的七字母单词,看看是否有一个字母的单词加六个字母的单词、两个字母的单词加五个字母的单词等等。

14.14 编写一个程序,用 sizeof 运算符确定自己的计算机系统中各种数据类型占用的字节数。为便于以后打印,把结果写入文件 datasize.dat 中。文件中的信息格式为:

charData typesize
unsigned char1
short int2
unsigned short int2
int4
unsigned int4
long int4
unsigned long int4
float4
double8
long double16

注意:读者计算机系统中的数据类型大小可能与上面列出的不一样。