完整版C语言程序设计第四版第九章答案谭浩强.docx
《完整版C语言程序设计第四版第九章答案谭浩强.docx》由会员分享,可在线阅读,更多相关《完整版C语言程序设计第四版第九章答案谭浩强.docx(20页珍藏版)》请在冰豆网上搜索。
完整版C语言程序设计第四版第九章答案谭浩强
第九章
9.1定义一个结构体变量(包括年、月、日)。
计算该日在本年中是第几天,
注意闰年问题。
解:
Struct
{intyear;
intmonth;
intday;
}date;
main()
{intdays;
printf(“Inputyear,month,day:
”);
scanf(“%d,%D,%d”,&date.year,&date.month,&date.day);switch(date.month)
{case1:
days=date.day;break;
case2:
days=date.day+31;break;
case3:
days=date.day+59;break;
case4:
days=date.day+90;break;
case5:
days=date.day+120;break;
case6:
days=date.day+31;break;
case7:
days=date.day+181;break;
case8:
days=date.day+212;break;
case9:
days=date.day+243;break;
case10:
days=date.day+273;break;
case11:
days=date.day+304;break;
case12:
days=date.day+334;break;
}
if((date.year%4==0&&date.year%100!
=0||date.year%400==0)&&date.month>=3)days+=1;
printf(
n%d/%d“isthe%dthdayin%d.
”,date.month,data.day,days,date,year);
}
9.2写一个函数
days,实现上面的计算。
由主函数将年、月、日传递给
days
函数,计算后将
日数传回主函数输出。
解:
structy_m_d
{intyear:
intmonth;
intday;
}date;
intdays(structy_m_ddate1)
{intsum;
switch(data.month)
{case1:
sum=date1.day;
case2:
sum=date1.day+31;
case3:
sum=date1.day+59;
case4:
sum=date1.day+90;
case5:
sum=date1.day+120;
case6:
sum=date1.day+151;
break;
break;
break;
break;
break;
break;
case7:
sum=date1.day+181;break;
case8:
sum=date1.day+212;break;
case9:
sum=date1.day+243;break
case10:
sum=date1.day+243;break
case11:
sum=date1.day+243;break
case12:
sum=date1.day+243;break
}
};
9.3编写一个函数print,打印一个学生的成绩数,该数组中有
录包括num、name、sore[3],用主函数输入这些记录,用
解:
5个学生的数据记录,每个记
print函数输出这些记录。
#defineN5
structstudent
{charnum[6];
charname[8];
intscore[4];
}stu[N];
main()
{intI,j;
for(I=0;I{printf(
“
n”,I+1);
printf(
“no.:
”);
scanf(
“%s”,stu[i].num);
printf(
“name:
”);
scanf(“%s”,stu[i].name);
for(j=0;j<3;j++)
{printf(“score%d:
”j+1);
scanf(“%d”,&stu[i].score[j]);
}
printf(n“”);
}
print(stu);
}
print(structstudentstu[6])
{intI,j;
printf(“%5s%10s”,stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf(
“%9d”,stu[i].score[j]);
print(
“n”);
}
9.4在上题的基础上,编写一个函数
input,
用来输入
5个学生的数据记录。
解:
#defineN5
structstudent
{charnum[6];
charname[8];
intscore[4]
}stu[N];
input(structstudentstu[])
{intI,j;
for(I=0;I{printf(“inputscoresofstudentn”,I+1);
printf(“NO.:
”);
scanf(“%s”,stu[i].num);
printf(“name:
”);
scanf(“%s”,stu[i].name);
for(j=0;j<3;j++)
{printf(“score%d:
”,j++);
scanf(“%d”,&stu[i].score[j]);}
}
printf(n“”);
}
}
9.5有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生
的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3
门课成绩)
解:
#defineN10
structstudent
{charnum[6]
charname[8]
intscore[4]
floatavr;
}stu[N];
main()
{intI,j,max,maxi,sum;
floataverage;
for(I=0;I{printf(
“
n”,I+1);
printf(“NO.:
”);
scanf(“%s”,stu[i].num);
printf(“name”);
scanf(“%s”,stu[i].name);
for(j=0;j<3;j++)
{printf(“score%d:
”,j+1);
scanf(“%d”,&stu[i].score[j]);
}
}
average=0;
max=0;
maxi=0;
for(i=0;i<3;i++)
{sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{max=sum;
maxi=I;
}
}
average/=N;
printf(“NO.namescore1score2score3averagen”);
for(I=0;I{printf(“%5s%10s”,stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf(
printf(
“%9d”,stu[i].score[j]);
“%8.n2f”,stu[i].avr);
}
printf(
printf(
“average=%6.2fn”,average);
“Thehighestscoreis:
%s,scoretotal:
%d.
”stu[maxi].name,max);
}
9.6编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针,指向字符串开始的空间。
New(n)表示分配n个字节的内存空间。
解:
new函数如下:
#defineNULL0
#defineNEWSIZE1000
charnewbuf[NEWSIZE];
char*newp=newbuf;
char*new(intn)
{if(newp+n<=newbuf+NEWSIZE)
{newp=newp+n;return(newp-n);
}
else
return(NULL);
}
9.7写一函数free,将上题用new函数占用的空间释放。
Free(p)表示将p指向的单元以后的
内存段释放。
解:
#defineNullo
#defineNEWSIZE1000
charnewbuf[NEWSIZE];
char*newp=newbuf;
free(char*p)
{if((p>=newbuf)&&(pnewp=p;
}
9.8已有a、b亮光链表,每个链表中的结点包括学好、成绩。
要求把两个链表合并,按学
号升序排列。
解:
#include
#defineNULL0
#defineLENsizeof(structstudent)
strutstudent
{longnum;
intscor;
structstudent*next
};
structstudentlistA,listB;
intn,sum=0;
main()
{structstudent*creat(void);
structstudent*insert(structstudent*,structstudent*);
voidprint(structstudent*);
stuctstudent*ahead,*bhead,*abh;
printf(“n”);
ahead=creat();
sum=sum+|n;
abh=insert(ahead,bhead);
print(abh);
}
structstudent*creat(void)
{structstudent*p1,*p2,*head;
n=0;
p1=p2=(structstudent*)malloc(LEN);
printf(“inputnumber&scoresofstudent:
n”);
printf(“ifnumberIs0,stopinputing.n”);
scanf(“%ld,%d”,&p1->num,&p1->score);
head=NULL;
while(p1->num!
=0)
{n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
p1=(structstudent*)mall