好文档 - 专业文书写作范文服务资料分享网站

C primer plus课后编程练习答案

天下 分享 时间: 加入收藏 我要投稿 点赞

} } }

void get_score(struct student *p) { int i,j;

for (i = 0; i < CSIZE; i++) {

printf(\ for (j=0; j

scanf(\ }

printf(\ }

void calculate_average(struct student *p) { int i,j; float total;

for (i = 0; i < CSIZE; i++) {

for (j=0,total=0; jscore[j] ; (p+i)->average = total / SCORE ; }

printf(\ }

void print_each(struct student *p) { int i,j; float total;

for (i = 0; i < CSIZE; i++) {

printf(\ for (j=0,total=0; j

printf(\ printf(\ } }

void print_class_average(struct student *p)

{ int i; float total;

for (i = 0, total=0; i < CSIZE; i++) total += (p+i)->average ;

printf(\ }

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

4 Jessie Joybat 5 2 1 1

第一项是球员号码,为了方便,范围是0到18。第二项是球员的名,第三项是姓。姓和名都是单个的单词。下一项是官方统计的球员上场次数,紧跟着是击中数、走垒数和跑点数( RBI)。文件可能包括超过一场比赛的数据,因此同一个球员可能会有多于一行的数据,而且在不同的行之间有可能有别的球员的数据。写一个程序,把这些数据存储到一个结构数组中。结构中必须含有姓、名、上场次数、击中数、走垒数和跑点数,以及击球平均成功率(稍后计算)。可以使用球员号码作为数组索引。程序应该读到文件末尾,并且应该保存每个球员的累计总和。

这个棒球运动中的统计方法是相关的。例如,一次走垒和触垒中的失误并不会记作上场次数,但是这可能产生一个RBI。可是,该程序所要做的只是处理数据文件,而不必关心数据的实际含义。

要实现这些功能,最简单的方法是把结构的内容初始化为零值,将文件数据读入临时变量中,然后把它们加到相应结构的内容中。程序读完文件后,应该计算每个球员的击球平均成功率,并把它保存到相应的结构成员里。计算击球平均成功率是用球员的累计击中数除以上场累计次数;这是个浮点数计算。然后程序要显示每个球员的累计数据,并且对整个时期显示一行综合统计数据。

irstname, \

strcpy(p[i].lastname, \ p[i].bat = 0; p[i].hit = 0; p[i].walk = 0; p[i].RBI = 0; p[i].average = 0; } }

void get_info(struct member *p) {

int number,bat,hit,walk,RBI;

char firstname[20],lastname[20],filename[20]=\ FILE *fp;

printf(\ scanf(\

while ( (fp = fopen(filename,\ {

printf(\ scanf(\ }

while ( fscanf(fp, \%s %s %d %d %d %d\\n\firstname, lastname, &bat, &hit, &walk, &RBI) == 7 )

{

strcpy(p[number].firstname, firstname); strcpy(p[number].lastname, lastname); p[number].bat += bat; p[number].hit += hit; p[number].walk += walk; p[number].RBI += RBI; }

fclose(fp); }

void cal_average(struct member *p) { int i;

for(i=0; i

p[i].average = (float)p[i].hit / (float)p[i].bat ; }

void display(struct member *p) { int i;

struct member total={\

printf(\\

for(i=0; i

printf(\p[i].firstname, p[i].lastname, p[i].bat, p[i].hit, p[i].walk, p[i].RBI, p[i].average);

+= p[i].bat; += p[i].hit; += p[i].walk;

+= p[i].RBI; }

if = (float) / (float) ;

printf(\ }

第14章 结构和其他数据形式 (中)

编程练习

7.修改程序清单,在从文件中读出每个记录并且显示它时,允许用户选择删除该记录或修改该记录的内容。如果删除记录,把空出来的数组空间留给下一个要读入的记录。要能够改变现有的文件内容,必须使用\模式,而不是\模式。要注意文件指针的定位,以便追加的记录不会覆盖已有的记录。最简单的方法是对存储在程序内存中的数据做所有的改变,然后再把最后的信息集写入文件中。

#include <> #include <> #include <>

int count=0;n\ }

void display(struct book *p) { int i;

if ( count == 0 ) printf(\ printf(\ for(i=0; i

printf(\ }

void change(struct book *p) { int i;

char title[MAXTITL];

printf(\ gets(title);

for(i=0; i

if ( strcmp(p[i].title, title) == 0 ) {

puts(\ gets(p[i].title);

puts(\ gets(p[i].author);

puts(\ scanf(\ getchar();

printf(\ return; }

printf(\ return; }

void reduce(struct book *p) { int i;

char title[MAXTITL]; if(count == 0) {

printf(\ return; }

3ty247x5vm0a6ri16ozy38gut0xsx2013u8
领取福利

微信扫码领取福利

微信扫码分享