C语言程序设计教程第九章习题答案.docx
《C语言程序设计教程第九章习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程第九章习题答案.docx(17页珍藏版)》请在冰豆网上搜索。
C语言程序设计教程第九章习题答案
1、
li45300.0
chang30200.0
chang
2、
#include
structstudents
{
charsid[100];
charname[100];
floatscore[3];
}student;
voidmain()
{inti;floatj;
printf("\nPleaseinputsid:
");
scanf("%s",student.sid);
printf("\nPleaseinputname:
");
scanf("%s",student.name);
printf("\nPleaseinput3score:
(like1,1,1)");/*输入逗号隔开*/
scanf("%f,%f,%f",&student.score[0],&student.score[1],&student.score[2]);
printf("\nsid=%s",student.sid);
printf("\nname=%s",student.name);
j=(student.score[0]+student.score[1]+student.score[2])/3.0;
printf("\naverage=%.2f",j);
getch();
}
3、
#include
#include
#defineFsizeof(student)
#defineNULL0
typedefstructscores
{intenglish;
intmath;
intc_language;
intall;
}TP;
typedefstructstudents
{charsid[15];
charname[15];
TPscore;
structstudents*next;
}student;
student*input()
{student*head,*p1,*p2;
intn=0;charch;
clrscr();
head=(student*)malloc(F);head->next=NULL;
do
{n++;
printf("\n\nPleaseinput%dstudentmessage:
\n\n",n);
printf("\t%dstudentsid:
",n);
p1=(student*)malloc(F);p1->next=NULL;
scanf("%s",p1->sid);
printf("\n\t%dstudentname:
",n);
scanf("%s",p1->name);
printf("\n\t%dstudentscores(englesh,math,c_language):
",n);
scanf("%d,%d,%d",&p1->score.english,&p1->score.math,&p1->score.c_language);
p1->score.all=p1->score.english+p1->score.math+p1->score.c_language;
if(n==1)
{head->next=p1;p2=p1;}
else
{p2->next=p1;
p2=p1;
}
printf("\n\n\t\t\tContinueorback(pressy/n):
");
ch=getch();
}while(ch=='y'||ch=='Y');
returnhead;
}
voidaverage1(student*head)
{student*p;intj;
clrscr();
p=head->next;
while(p)
{j=p->score.all/3;
printf("\n\nname:
%s\taverage:
%d",p->name,j);
p=p->next;
}
printf("\n\n\nPressenykeyreturn.");
getch();
}
voidaverage2(student*head)
{
student*p;intn=0,temp1=0,temp2=0,temp3=0;
p=head->next;
while(p)
{temp1+=p->score.english;
temp2+=p->score.math;
temp3+=p->score.c_language;
p=p->next;n++;
}
printf("\n\naverageenglishis:
%d\naveragemathis:
%d\naveragec_languageis:
%d\t",temp1/n,temp2/n,temp3/n);
}
student*sort(student*head)
{student*head1,*p,*q,*r;inttemp1=0,temp2=0,temp3=0,temp4;chars[15],n[15];
head1=head;
for(p=head1->next;p->next!
=NULL;p=p->next)
{r=p;
for(q=p->next;q;q=q->next)
if(q->score.all>r->score.all)
r=q;
if(r!
=p)
{strcpy(s,p->sid);strcpy(n,p->name);
temp1=p->score.english;
temp2=p->score.math;
temp3=p->score.c_language;
temp4=p->score.all;
strcpy(p->sid,r->sid);strcpy(p->name,r->name);
p->score.english=r->score.english;
p->score.math=r->score.math;
p->score.c_language=r->score.c_language;
p->score.all=r->score.all;
strcpy(r->sid,s);strcpy(r->name,n);
r->score.english=temp1;
r->score.math=temp2;
r->score.c_language=temp3;
r->score.all=temp4;
}
}
returnhead1;
}
voidoutput(student*head)
{student*head2,*p;inti=1;
clrscr();
head2=sort(head);
for(p=head2->next;p!
=NULL;p=p->next)
printf("\n\nname:
%s\tsid:
%s\tenglish:
%d\tmath:
%d\tc_language:
%d\taverage:
%d\tmingci:
%d",p->name,p->sid,p->score.english,p->score.math,p->score.c_language,p->score.all/3,i++);
average2(head);
printf("\n\n\n\t\tPressenykeyback.");
getch();
}
voidmain()
{student*head,*p1,*p2;
inti=0,j=1;
head=input();
do
{clrscr();
printf("\n\n
(1):
average1.\n\n
(2):
average2.\n\n(3):
sort.\n\n(4):
output.\n\n\nPleasechoose:
");
scanf("%d",&i);
switch(i)
{case1:
average1(head);break;
case2:
clrscr();average2(head);printf("\n\n\nPressenykeyretuen.");getch();break;
case3:
clrscr();p1=sort(head);for(p2=p1->next;p2!
=NULL;p2=p2->next)printf("\n\t\tname:
%s\tmingci:
%d",p2->name,j++);printf("\n\n\nPressenykeyback.");getch();break;
case4:
output(head);break;
default:
printf("\nYourchooseisnotright.");break;
}
}while(i!
=-1);
}
4、
#include
#include
#defineNULL0
#defineFsizeof(worker)
typedefstructwork
{charsid[15];
charname[15];
intmoney;
structwork*next;
}worker;
intmin=0,max=0;
chara[15],b[15];
worker*input()
{worker*head,*p,*q;intn=0;
charch;
head=(worker*)malloc(F);head->next=0;
do
{n++;
p=(worker*)malloc(F);p->next=0;
printf("\n\n\tPleaseinput%dworkermessage:
",n);
printf("\n%dworkersid:
",n);scanf("%s",p->sid);
printf("\n%dworkername:
",n);scanf("%s",p->name);
printf("\n%dworkermoney:
",n);scanf("%d",&p->money);
if(n==1)
{head->next=p;q=p;
max=p->money;strcpy(a,p->name);
min=p->money;strcpy(b,p->name);
}
else
{q->next=p;
if(p->money>max){max=p->money;strcpy(a,p->name);}
if(p->moneymoney;strcpy(b,p->name);}
q=p;
}
printf("\n\t\ty/n");ch=getch();
}while(ch=='y'||ch=='Y');
returnhead;
}
voidoutput()
{clrscr();
printf("\nThemaxmoneyis:
%d\t\tnameis:
%s\n\n",max,a);
printf("\nTheminmoneyis:
%d\t\tnameis:
%s",min,b);
}
voidmain()
{
input();
output();
getch();
}
5、6、
#include"stdio.h"
#defineFsizeof(stu)
#defineNULL0
typedefstructstudent
{
intsid;
intaverage;
structstudent*next;
}stu;stu*head;
stu*create()
{stu*p1,*p2;
intn=0;charch;
head=(stu*)malloc(F);head->next=NULL;
do
{n++;
printf("\n\nPleaseinput%dstudentmessage:
\n\n",n);
printf("\t%dstudentsid:
",n);
p1=(stu*)malloc(F);p1->next=NULL;
scanf("%d",&p1->sid);
printf("\n\t%dstudentaverage:
",n);
scanf("%d",&p1->average);
if(n==1)
{head->next=p1;p2=p1;}
else
{p2->next=p1;
p2=p1;
}
printf("\n\n\t\t\tContinueorback(pressy/n):
");
ch=getch();
}while(ch=='y'||ch=='Y');
returnhead;
}
stu*select(stu*head,intx)
{
stu*s;
s=head->next;
while(s)
{
if(s->sid==x)
break;
s=s->next;
}
returns;
}
stu*insert(stu*head,intx,inty)
{
stu*p,*r,*q;
clrscr();
p=head->next;
r=(stu*)malloc(sizeof(stu));
r->sid=x;
r->average=y;
if(p==NULL)/*如果插入空表*/
{
p=r;
r->next=NULL;
printf("\ninsertsuccess!
!
");
}
else
{while(x>p->sid)/*找到插入的位置,按学号大小。
(找到位置或者到了表尾都会跳出循环)*/
{if(p->next==NULL)break;p=p->next;}
if(xsid)/*插到中间位置*/
{r->sid=p->sid;
r->average=p->average;
p->sid=x;
p->average=y;
r->next=p->next;
p->next=r;
printf("\ninsertsuccess!
!
");
}
elseif(x==p->sid)/*学号不能相同*/
printf("\nError--->yourinputthissamesid.");
else/*插到末尾*/
{p->next=r;
r->next=NULL;
printf("\ninsertsuccess!
!
");
}
}
returnhead;
}
stu*get(stu*head,intn)/*得到位置为n的结点的指针*/
{stu*p;inti;
p=head->next;
if(n==0)returnhead;
else
{for(i=1;ip=p->next;
returnp;
}
}
stu*delete(stu*head,intsid)
{
stu*p,*q;inttemp=0,i=0;
p=head->next;
if(!
p)
{printf("\nlistisempty.pressenykeyback.");getch();returnhead;}/*表空*/
else
{while(p)/*查找学号为sid的结点的指针*/
{i++;/*标记学号为sid的结点的位置*/
if(p->sid==sid)
{temp=1;break;}/*temp=1标记找到了*/
p=p->next;
}
if(temp==1)/*如果有学号为sid的结点*/
{q=get(head,i-1);/*得到sid的前一个结点的指针*/
q->next=p->next;
free(p);
printf("\n\ndeletesucess!
!
!
");
returnhead;
}
else/*没有找到*/
{printf("\n\nNOthisdata.\n");
returnhead;
}
}
}
voidprint(stu*head)
{
stu*p;
p=head->next;
if(!
p){printf("\nlistisempty.pressenykeyback.");getch();}
while(p)
{
printf("\n%d:
\t%d",p->sid,p->average);
p=p->next;
}
}
main()
{
stu*p1,*p2;
charch1;
intn,i=0,j=0;
head=create();
do
{clrscr();
printf("\n1.insert.");
printf("\n2.select.");
printf("\n3.delect.");
printf("\n4.printlist.");
printf("\n5.EXIT");
printf("\n............choice(1-5).............");
ch1=getch();
switch(ch1)
{
case'1':
{clrscr();
printf("\npleaseinputinsertsid.andaverage(like1,1):
");
scanf("%d,%d",&i,&j);
head=insert(head,i,j);
printf("\n\n\nPressenykeyback.");getch();
break;
}
case'2':
{clrscr();
printf("\ninputyouwanttoseletesid:
");
scanf("%d",&n);
p1=select(head,n);
{if(p1)printf("\nsid:
%d\taverage:
%d",p1->sid,p1->average);
elseprintf("\nNothisdata.");
}
printf("\n\n\nPressenykeyback.");getch();
break;
}
case'3':
{clrscr();printf("\nPleaseinputyouwantdeletesid:
");
scanf("%d",&n);
head=delete(head,n);
printf("\n\n\nPressenykeyback.");getch();
break;
}
case'4':
{clrscr();
printf("Allinformation:
");
print(head);
printf("\n\n\nPressenykeyback.");getch();
break;
}
case'5':
return;
default:
printf("\n\nYourenterisnotright.pressenykeyback.");getch();
}
}while(n);
}
7、
#include
#defineFsizeof(L)
typedefstructlist
{chardata;
structlist*next;
}L;
L*set_list()
{L*head,*p1,*p2;
charc;
intn=0;
head=(L*)malloc(F);head->next=0;/*建立链表*/
p1=p2=head;
printf("\nPleaseinputchar(press*finish):
");
scanf("%c",&c);
while(c!
='*')
{n++;
if(n==1)
p1->data=c;
else
{p1=(L*)malloc(F);
p1->data=c;
p2->next=p1;
p2=p1;
p1->next=0;
}
scanf("%c",&c);
}
p1=head;
while(p1)
{printf("%c",p1->data);p1=p1->next;}
printf("\n\n\n");
returnhead;
}
voidchange_list(L*head1)/*算法:
p2指向最后一个元素,p1指向第一个元素。
交换他们的值,p1,p2同时往中间靠拢。
*/
{L*p1,*p2,*p3;
inti,j,k,n=1;
chartemp;
p1=head1;p2=head1;p3=head1;
while(p3->next)
{p3=p3->next;n++;}/*求链长*/
for(i=n;i>(n/2);i--)/*外循环使p1后移,p2前移。
*/
{p2=head1;
for(j=1;j
p2=p2->next;/*p2指向最后一个元素*/
temp=p1->data;p1->data=p2->data;p2->data=temp;/*交换他们的值*/
p1=p1->next;/*p1向后移*/
}
while(head1)
{printf("%c",head1->data);head1=head1->next;}
}
voidmain()
{L*head;
head=set_list();
change_list(head);
getch();
}
她含着笑,切着冰屑悉索的萝卜,
她含着笑,用手掏着猪吃的麦糟,
她含着笑,扇着