完整版C语言程序设计第四版第九章答案谭浩强.docx

上传人:b****2 文档编号:1908551 上传时间:2022-10-25 格式:DOCX 页数:20 大小:18.79KB
下载 相关 举报
完整版C语言程序设计第四版第九章答案谭浩强.docx_第1页
第1页 / 共20页
完整版C语言程序设计第四版第九章答案谭浩强.docx_第2页
第2页 / 共20页
完整版C语言程序设计第四版第九章答案谭浩强.docx_第3页
第3页 / 共20页
完整版C语言程序设计第四版第九章答案谭浩强.docx_第4页
第4页 / 共20页
完整版C语言程序设计第四版第九章答案谭浩强.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

完整版C语言程序设计第四版第九章答案谭浩强.docx

《完整版C语言程序设计第四版第九章答案谭浩强.docx》由会员分享,可在线阅读,更多相关《完整版C语言程序设计第四版第九章答案谭浩强.docx(20页珍藏版)》请在冰豆网上搜索。

完整版C语言程序设计第四版第九章答案谭浩强.docx

完整版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)&&(p

newp=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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1