第11章习题答案.docx
- 文档编号:2844027
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:16
- 大小:18.60KB
第11章习题答案.docx
《第11章习题答案.docx》由会员分享,可在线阅读,更多相关《第11章习题答案.docx(16页珍藏版)》请在冰豆网上搜索。
第11章习题答案
11.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/%disthe%dthdayin%d.”,date.month,data.day,days,date,year);
}
11.2写一个函数days,实现上面的计算。
由主函数将年、月、日传递给days函数,计算后将日数传回主函数输出。
解:
structy_m_d
{intyear:
intmonth;
intday;
}date;
intdays(structy_m_ddate1)
{intsum;
switch(data.month)
{case1:
sum=date1.day;break;
case2:
sum=date1.day+31;break;
case3:
sum=date1.day+59;break;
case4:
sum=date1.day+90;break;
case5:
sum=date1.day+120;break;
case6:
sum=date1.day+151;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
}
};
11.3编写一个函数print,打印一个学生的成绩数,该数组中有5个学生的数据记录,每个记录包括num、name、sore[3],用主函数输入这些记录,用print函数输出这些记录。
解:
#defineN5
structstudent
{charnum[6];
charname[8];
intscore[4];
}stu[N];
main()
{intI,j;
for(I=0;I {printf(“\Inputscoreofstudent%d: \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”); } 11.4在上题的基础上,编写一个函数input,用来输入5个学生的数据记录。 解: #defineN5 structstudent {charnum[6]; charname[8]; intscore[4] }stu[N]; input(structstudentstu[]) {intI,j; for(I=0;I {printf(“inputscoresofstudent%d: \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++); scanf(“%d”,&stu[i].score[j]);} } printf(“\n”); } } 11.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(“\nInputscoresofstudent%d: \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.namescore1score2score3average\n”); for(I=0;I {printf(“%5s%10s”,stu[i].num,stu[i].name); for(j=0;j<3;j++) printf(“%9d”,stu[i].score[j]); printf(“%8.2f\n”,stu[i].avr); } printf(“average=%6.2f\n”,average); printf(“Thehighestscoreis: %s,scoretotal: %d.”stu[maxi].name,max); } 11.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); } 11.7写一函数free,将上题用new函数占用的空间释放。 Free(p)表示将p指向的单元以后的内存段释放。 解: #defineNullo #defineNEWSIZE1000 charnewbuf[NEWSIZE]; char*newp=newbuf; free(char*p) {if((p>=newbuf)&&(p newp=p; } 11.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(“\ninputlista: \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*)malloc(LEN); scanf(“%ld,,%d”,&p1->num,&p1->score); } p2-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 习题 答案