当前位置:嗨网首页>书籍在线阅读

47-编程练习

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

14.18 编程练习

1.重新编写复习题5,用月份名的拼写代替月份号(别忘了使用 strcmp() )。在一个简单的程序中测试该函数。

2.编写一个函数,提示用户输入日、月和年。月份可以是月份号、月份名或月份名缩写。然后该程序应返回一年中到用户指定日子(包括这一天)的总天数。

3.修改程序清单14.2中的图书目录程序,使其按照输入图书的顺序输出图书的信息,然后按照书名的字母顺序输出图书的信息,最后按照价格的升序输出图书的信息。

4.编写一个程序,创建一个有两个成员的结构模板:

a.第1个成员是社会保险号,第2个成员是一个有3个成员的结构,第1个成员代表名,第2个成员代表中间名,第3个成员表示姓。创建并初始化一个内含5个该类型结构的数组。该程序以下面的格式打印数据:

           Dribble, Flossie M. –– 302039823

如果有中间名,只打印它的第1个字母,后面加一个点(.);如果没有中间名,则不用打印点。编写一个程序进行打印,把结构数组传递给这个函数。

b.修改 a 部分,传递结构的值而不是结构的地址。

5.编写一个程序满足下面的要求。

a.外部定义一个有两个成员的结构模板 name :一个字符串存储名,一个字符串存储姓。

b.外部定义一个有3个成员的结构模板 student :一个 name 类型的结构,一个 grade 数组存储3个浮点型分数,一个变量存储3个分数平均数。

c.在 main() 函数中声明一个内含 CSIZECSIZE = 4 )个 student 类型结构的数组,并初始化这些结构的名字部分。用函数执行 gefg 中描述的任务。

d.以交互的方式获取每个学生的成绩,提示用户输入学生的姓名和分数。把分数存储到 grade 数组相应的结构中。可以在 main() 函数或其他函数中用循环来完成。

e.计算每个结构的平均分,并把计算后的值赋给合适的成员。

f.打印每个结构的信息。

g.打印班级的平均分,即所有结构的数值成员的平均值。

6.一个文本文件中保存着一个垒球队的信息。每行数据都是这样排列:

   4 Jessie Joybat 5 2 1 1

第1项是球员号,为方便起见,其范围是0~18。第2项是球员的名。第3项是球员的姓。名和姓都是一个单词。第4项是官方统计的球员上场次数。接着3项分别是击中数、走垒数和打点(RBI)。文件可能包含多场比赛的数据,所以同一位球员可能有多行数据,而且同一位球员的多行数据之间可能有其他球员的数据。编写一个程序,把数据存储到一个结构数组中。该结构中的成员要分别表示球员的名、姓、上场次数、击中数、走垒数、打点和安打率(稍后计算)。可以使用球员号作为数组的索引。该程序要读到文件结尾,并统计每位球员的各项累计总和。

世界棒球统计与之相关。例如,一次走垒和触垒中的失误不计入上场次数,但是可能产生一个RBI。但是该程序要做的是像下面描述的一样读取和处理数据文件,不会关心数据的实际含义。

要实现这些功能,最简单的方法是把结构的内容都初始化为零,把文件中的数据读入临时变量中,然后将其加入相应的结构中。程序读完文件后,应计算每位球员的安打率,并把计算结果存储到结构的相应成员中。计算安打率是用球员的累计击中数除以上场累计次数。这是一个浮点数计算。最后,程序结合整个球队的统计数据,一行显示一位球员的累计数据。

7.修改程序清单14.14,从文件中读取每条记录并显示出来,允许用户删除记录或修改记录的内容。如果删除记录,把空出来的空间留给下一个要读入的记录。要修改现有的文件内容,必须用"r+b"模式,而不是"a+b"模式。而且,必须更加注意定位文件指针,防止新加入的记录覆盖现有记录。最简单的方法是改动存储在内存中的所有数据,然后再把最后的信息写入文件。跟踪的一个方法是在book结构中添加一个成员表示是否该项被删除。

8.巨人航空公司的机群由12个座位的飞机组成。它每天飞行一个航班。根据下面的要求,编写一个座位预订程序。

a.该程序使用一个内含 12 个结构的数组。每个结构中包括:一个成员表示座位编号、一个成员表示座位是否已被预订、一个成员表示预订人的名、一个成员表示预订人的姓。

b.该程序显示下面的菜单:

To choose a function, enter its letter label:

a) Show number of empty seats

b) Show list of empty seats

c) Show alphabetical list of seats

d) Assign a customer to a seat assignment

e) Delete a seat assignment

f) Quit

c.该程序能成功执行上面给出的菜单。选择 d)e) 要提示用户进行额外输入,每个选项都能让用户中止输入。

d.执行特定程序后,该程序再次显示菜单,除非用户选择 f)

9.巨人航空公司(编程练习8)需要另一架飞机(容量相同),每天飞4班(航班102、311、444和519)。把程序扩展为可以处理4个航班。用一个顶层菜单提供航班选择和退出。选择一个特定航班,就会出现和编程练习8类似的菜单。但是该菜单要添加一个新选项:确认座位分配。而且,菜单中的退出是返回顶层菜单。每次显示都要指明当前正在处理的航班号。另外,座位分配显示要指明确认状态。

10.编写一个程序,通过一个函数指针数组实现菜单。例如,选择菜单中的a,将激活由该数组第1个元素指向的函数。

11.编写一个名为 transform() 的函数,接受4个参数:内含 double 类型数据的源数组名、内含 double 类型数据的目标数组名、一个表示数组元素个数的 int 类型参数、函数名(或等价的函数指针)。 transform() 函数应把指定函数应用于源数组中的每个元素,并把返回值存储在目标数组中。例如:

     transform(source, target, 100, sin);

该声明会把 target[0] 设置为 sin(source[0]) ,等等,共有100个元素。在一个程序中调用 transform() 4次,以测试该函数。分别使用 math.h 函数库中的两个函数以及自定义的两个函数作为参数。

[1] 也被称为标记化结构初始化语法。——译者注

20200312EF9814C1.jpg