最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

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

来源:动视网 责编:小OO 时间:2025-09-22 23:10: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;
推荐度:
导读第九章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;
第九章

9.1定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。

解:Struct

{int year;

int month;

int day;

}date;

main()

{int days;  

     printf(“Input year,month,day:”);

     scanf(“%d,%D,%d”,&date.year,&date.month,&date.day);

     switch(date.month)

{case 1: days=date.day;         break;

      case 2: days=date.day+31;      break;

      case 3: days=date.day+59;      break;

      case 4: days=date.day+90;      break;

      case 5: days=date.day+120;     break;

case 6: days=date.day+31;      break;

        case 7: days=date.day+181;      break;

        case 8: days=date.day+212;      break;

case 9: days=date.day+243;      break;

case 10: days=date.day+273;      break;

case 11: days=date.day+304;      break;

case 12: 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 is the %dth day in%d.”,date.month,data.day,days,date,year);

}

9.2写一个函数days,实现上面的计算。由主函数将年、月、日传递给days 函数,计算后将日数传回主函数输出。

解:struct y_m_d

{int year:

int month;

int day;

}date;

intdays(struct y_m_d date1)

{int sum;

switch(data.month)

{case 1:sum=date1.day;            break;

case 2:sum=date1.day+31;         break;

case 3:sum=date1.day+59;         break;

case 4:sum=date1.day+90;         break;

case 5:sum=date1.day+120;        break;

case 6:sum=date1.day+151;        break;

case 7:sum=date1.day+181;        break;

case 8:sum=date1.day+212;         break;

case 9:sum=date1.day+243;         break

case 10:sum=date1.day+243;         break

case 11:sum=date1.day+243;         break

case 12:sum=date1.day+243;         break

}

};

9.3编写一个函数print,打印一个学生的成绩数,该数组中有5个学生的数据记录,每个记录包括num、name、sore[3],用主函数输入这些记录,用print函数输出这些记录。

解:

#define N 5

struct student

{char num[6];

   char name[8];

   int score[4];

}stu[N];

main()

{int I,j ;

for(I=0;I{printf(“\\Input score of student %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(struct student stu[6])

{int I,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个学生的数据记录。

解:

      #define N 5

   struct student

   {char num[6];

    char name[8];

int score[4]

}stu[N];

input(struct student stu[])

{int I,j;

for(I=0;I{printf(“input scores of student %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”);

}

}

9.5 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)

解:#define N 10

struct student

{char num[6]

char name[8]

int score[4]

float avr;

}stu[N];

main()

{int I,j,max,maxi,sum;

float average;

for(I=0;I{printf(“\\nInput scores of student %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. name score1 score2 score3 average\\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(“The highest score is:%s,score total:%d.”stu[maxi].name,max);

}

9.6 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针,指向字符串开始的空间。New(n)表示分配n个字节的内存空间。

解:new函数如下:

#define NULL 0

#define NEWSIZE 1000

char newbuf[NEWSIZE];

char *newp=newbuf;

char *new(int n)

{if (newp+n<=newbuf+ NEWSIZE)

   { newp= newp+n;

    return(newp-n);

}

else

    return(NULL);

}

9.7写一函数free,将上题用new函数占用的空间释放。Free(p)表示将p指向的单元以后的内存段释放。

解:

   #define Null o

   #define NEWSIZE 1000

char newbuf[NEWSIZE];

char *newp=newbuf;

free(char *p)

{if((p>=newbuf)&&(p   newp=p;

}

9.8已有a、b亮光链表,每个链表中的结点包括学好、成绩。要求把两个链表合并,按学号升序排列。

解:

#include

#define NULL 0

#define LENsizeof(struct student)

strut student

{long num;

int scor;

struct student *next  

};

struct student listA,listB;

int n,sum=0;

main()

{struct student *creat(void);

struct student *insert(struct student *,struct student *);

void print(struct student *);

stuct student *ahead , *bhead,*abh;

printf(“\\ninput list a:\\n”);

ahead=creat();

sum=sum+|n;

abh=insert(ahead,bhead);

print(abh);

}

struct student *creat(void)

{struct student *p1,*p2,*head;

n=0;

p1=p2=(struct student *)malloc(LEN);

printf(“input number&scores of student:\\n”);

printf(“if number Is 0,stop inputing.\\n”);

scanf(“%ld,%d”,&p1->num,&p1->score);

head=NULL;

while(p1->num!=0)

{n=n+1;

if(n==1)head=p1;

else p2->next =p1;

p2=p1;

p1=(struct student *)malloc(LEN);

scanf(“%ld,,%d”,&p1->num,&p1->score);

}

p2->next=NULL;

return(head);

}

struct student *insert(struct student *ah,struct student *bh)

{struct student *pa1 , *pa2,*pb1,*pb2;

pa2=pa1=ah;

pb2=pb1=bh;

do  

{while((pb1->num>pa1->num)&&(pa1->next!=NULL))

{pa2=pa1;

pa1=pa1->next;

}

if(pb->num<=pa1->num)

{if(ah=pa1)

ah=pb1;

else pa2->next=pb1;

pb1=pb1->next;

pb2->next=pa1;

pa2=pb2;

pb2=pb1;

}

}

while((pa1->next!=NULL)||(pa1==NULL&&pb1!=NULL));

if((pb1->num>pa1->num)&&(pa1->next==NULl))

ap1->next=pb1;

return(ah);

}

void print(struct student *head)

{struct student *p;

printf(“%ld%d\\n”,p->num,p->score);

p=p->next;

while(p!=NULL);

}

9.9 13个人围成一圈,从第1个人开始顺序报号1、2、3。凡报到“3”者退出圈子。找出最后留在圈子中的人原来的序号。

解:

#define N 13

struct person

{int number;

int nextop;

}link[N+1];

main()

{int I,count,h;

for(I=1;I<=N;I++)

{if(I==N)

    link[i].nextp=1;

   else  

    link[i].nextp=I+1;

   link[i].number=I;

}

printf(“\\n”);

count=0;

h=N;

printf(“sequence that person2 leave the circle:\\n”);

while(count{I=0;

   while(I!=3)

   {h=link[h].nextp;

    if(link[h].number)

    I++;

}

printf(“%4d”,link[h].number);

link[h].number=0;

count++;

}

printf(“\\nThe last one is”);

for(I=1;ii<=N;I++)

     if(link[i].number)

printf(“%3d”,lin[i].number);

}

9.10有两个链表a和b,设结点中包含学号、姓名。从1链表中删去与b链表中有相同学号的那些结点。

解:

#define LA 4

#define LB 5

#define NULL 0

struct student

{char nump[6];

   char name[8];

   struct student *next;

}A[LA],b[LB];

main()

{struct student a[LA]={{“101”,”Wang”},{“102”,”LI”},{“105”,”zhang”},{“106”,”Wei”}};

struct studentb[LB]={{“103”,”Zhang”},{“104”,”Ma”},{“105”,”Chen”},{“107”,”Guo”},

{“108”,”Lui”}};

int I,j;

struct student *p, *p1,*p2,*pt,*head1,*head2;  

head1=a;

head2=b;

printf(“list a :\\n”);

for(p1=head1,i=1;p1{p=p1;

p1->next=a+I;

printf(“%8s%8s\\n”,p1->num,p1->name);

p1=p1->next;

}

p->next=NULL;

printf(“\\n list b:\\n”);

for(p2=head2,I=1;p2{p=p2;

p2->next=b+I;

printf(“%8s%8s\\n”,p2->num,p2->name);

p2=pa->next;

}

p->next=NULL;

printf(“\\n”);

p1=head1;

while(p1!=NULL)

{p2=head2;

while(p2!=NULL&&strcmp(p1->num,p2->num)!=0)

p2=p2->next;

if(strcmp(p1->num,p2->num==0))

   if(p1==head1)

head1=p1->next;

   else

p->next=p1->next;

p=p1;

p1=p1->next;

}

p1=hedad1;

printf{“\\n result:\\n”};

while(p1!=NULL)

{printf(“%7s %7s\\n”,p1->num,p1->name);

p1=p1->next;

}

}

9.11建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

解:#define NULL 0

    #define LEN sizeof(struct student)

    struct student

    {char num[6];

     char name[8];

     char sex[2];

     int age;

     stuct student *next;

}stu[10];

main()

{struct student *p,*pt,*head;

int I,length,iage,flag=1;

int find=0;

while(flag==1)

{printf(“input length of list(<10):”);

scanf(“%d”,&length);

if(length<10)

flag=0;

}

for(I=0;I   {p=(struct student *)malloc(LEN);

      if(I==0)

         head=pt=p;

      else

pt->next=p;

      pt=p;

      ptintf(“NO:”);

scanf(“%s”,p->num);

prntf(“name:”);

scanf(“%s”,p->name);

printf(“sex:”);

scanf(“%s”,p->sex);

printf(“age:”);

scanf(“%s”,p->age);

}

p->next=NULL;

p=head;

printf(“\\n NO. name sex age\\n”);

while(p!=NULL)

{printf(“%4s%8s%6s%6d\\n”,p->num, p->name, p->sex, p->age);

p=p->next;

}

    printf(“Input age:”);

scanf(“%d”,&iage);

pt=head;

p=pt;

if(pt->age==iage)

{p=pt->next;

head=pt=p;

find=1;

}

else  

pt=pt->next;

while(pt!=NULL)

{if(pt->age==iage)

{p->next=pt->next;

find=1;

}

else p=pt;

pt=pt->next;

}

   if(!find)

printf(“Not found%d.”,iage);

   p=head;

   printf(“\\n NO.name sex age\\n”);

   while(p!=NULL)

   {

printf(“%4s%8s”,p->num,p->name);

printf(“%6s%6d”,p->sex,p->age);

p=p->next;

}

}

9.12将一个链表按逆序排列,即将链头当链尾,链尾当链头。

解:

# define NULL 0

struct stu

{int num;

   struct stu *next;

}

main()

{int len=1l

struct stu *p1,*p2,*head,*new,*newhead;

p1=p2=head=(struct stu * )malloc(sizeof(strct stu));

printf(“input number(0:list end):”);

scanf(“%d”,&p1->num);

while(p1->num!=o)

{p1=(struct stu*)malloc(sizeof(struct stu));

printf(“input number(n:listend):”);

scanf(“%d”,&p1->num);

if(p1->num==0)

p2->next=null;

else

{p2=>next=p1;

p2=p1;

len++;

}

}

p1=head;

pritnf(“\\n the original list:\\n”);

do

{printf(“%4d”,p1->num);

if(p1->next!=NULL)

p1=p1->next;

}

while(p1->next!=NULL)

{p2=p1;

p1=p1->next;

}

if(I==0)

newhead=new=p1;

else

new=nes->next=p1;

p2->next=NULL;

}

printf(\\n\\n The new listL\\n);

p1=newhead;

for(I=0l;I{pritf(“4d,p1->num”);

p1=p1->next,

}

printf(“\\n”);

}

文档

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;
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top