预计阅读本页时间:-
1.重做复习题3,但用月份名的拼写代替月份号(别忘了可以使用strcmp())。
2.编写一个程序。请求用户键入日、月和年。月份可以是月份号、月份名或月份缩写。然后程序返回一年中到给定日子(包括这一天)的总天数。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
3.修改程序清单14.2中的书目列表程序,使它首先按照输入的顺序输出图书的描述,然后按照标题的字母升序输出图书的描述,最后按照value值的升序输出图书的描述。
4.编写一个程序。按照下列要求,创建一个含有两个成员的结构模板:
a.第一个成员是社会保障号;第二个成员是一个含三个成员的结构。它的第一个成员是名,第二个成员是名和姓中间的名字,最后一个成员是姓。创建并初始化一个含有5个此类结构的数组。程序以下列形式输出数据:
名和姓中间的名字只输出了它的第一个字母,后面加了一个句点。如果姓名中间的名字为空,那么它的第一个字母和句点都不会输出(当然喽)。写一个函数来实现输出,把结构数组传递给这个函数。
b.修改a部分,传递结构的值而不是结构地址。
5.写一个程序,满足下列要求:
a.外部定义一个name结构模板,它含有2个成员:一个字符串用于存放名字,另一个字符串用于存放姓氏。
b.外部定义一个student结构模板,它含有3个成员:一个name结构,一个存放3个浮点数分数的grade数组,以及一个存放这3个分数的平均分的变量。
c.使main()函数声明一个具有CSIZE(CSIZE=4)个student结构的数组,并随意初始化这些结构的名字部分。使用函数来执行d、e、f以及g部分所描述的任务。
d.请求用户输入学生姓名和分数,以交互地获取每个学生的成绩。将分数放到相应结构的grade数组成员中。您可以自主选择在main()或一个函数中实现这个循环。
e.为每个结构计算平均分,并把这个值赋给适合的成员。
f.输出每个结构中的信息。
g.输出结构的每个数值成员的班级平均分。
6.一个文本文件中存放着一个棒球队的信息。每一行的数据都是这样排列的:
第一项是球员号码,为了方便,范围是0到18。第二项是球员的名,第三项是姓。姓和名都是单个的单词。下一项是官方统计的球员上场次数,紧跟着是击中数、走垒数和跑点数(RBI)。文件可能包括超过一场比赛的数据,因此同一个球员可能会有多于一行的数据,而且在不同的行之间有可能有别的球员的数据。写一个程序,把这些数据存储到一个结构数组中。结构中必须含有姓、名、上场次数、击中数、走垒数和跑点数,以及击球平均成功率(稍后计算)。可以使用球员号码作为数组索引。程序应该读到文件末尾,并且应该保存每个球员的累计总和。
这个棒球运动中的统计方法是相关的。例如,一次走垒和触垒中的失误并不会记作上场次数,但是这可能产生一个RBI。可是,该程序所要做的只是处理数据文件,而不必关心数据的实际含义。
要实现这些功能,最简单的方法是把结构的内容初始化为零值,将文件数据读入临时变量中,然后把它们加到相应结构的内容中。程序读完文件后,应该计算每个球员的击球平均成功率,并把它保存到相应的结构成员里。计算击球平均成功率是用球员的累计击中数除以上场累计次数;这是个浮点数计算。然后程序要显示每个球员的累计数据,并且对整个时期显示一行综合统计数据。
7.修改程序清单14.14,在从文件中读出每个记录并且显示它时,允许用户选择删除该记录或修改该记录的内容。如果删除记录,把空出来的数组空间留给下一个要读入的记录。要能够改变现有的文件内容,必须使用“r+b”模式,而不是“a+b”模式。要注意文件指针的定位,以便追加的记录不会覆盖已有的记录。最简单的方法是对存储在程序内存中的数据做所有的改变,然后再把最后的信息集写入文件中。
8.巨人航空公司的机群由座位容量为12的飞机组成。它每天飞行一个航班。按照下面的功能,写一个座位预订程序:
a.程序使用一个含12个结构的数组。每个结构要包括一个用于标识座位的编号、一个表示座位是否已分配出去的标记、座位预订人的姓和座位预订人的名。
b.程序显示下面的菜单:
c.程序应能执行菜单所给出的功能。选择d)和e)需要额外的输入,每一个选项都应当允许用户终止输入。
d.执行完一个特定的功能之后,程序再次显示菜单,除非选择了f)。
e.每次运行程序都把数据保存到一个文件中。当程序再次运行时,首先从文件中载入数据(如果有的话)。
9.巨人航空公司(见第8题)需要另一架飞机(同样容量),并使它每天服务4个航班(航班102、311、444和519)。把程序扩展为能够处理4个航班。有一个顶层菜单可供选择航班和退出。选择了一个特定的航班,就会调出和第7题相似的菜单,但要加上一个新项:确认一个座位分配;并用一个退回顶层菜单的选项代替退出选项。每个显示要指明现在正在处理哪个航班。座位分配显示必须要指明确认状态。
10.编写一个程序,用指向函数的指针数组执行菜单。例如,在菜单中选择a会激活由数组第一个元素指向的函数。
11.编写一个transform()函数,它接受4个参数:包含double类型数据的源数组名,double类型的目标数组名,表示数组元素个数的int变量以及一个函数名(或者,等价的指向函数的指针)。transform()函数把指定的函数作用于源数组的每个元素,并将返回值放到目标数组中。例如:
这个函数调用把sin(source[0])赋给target[0],等等,共有100个元素。在一个程序中测试该函数,调用4次transform(),分别使用math.h函数库中的两个函数以及自己设计的两个适合的函数作为参数。