C语言第8章习题及答案.docx
- 文档编号:2933118
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:18
- 大小:17.53KB
C语言第8章习题及答案.docx
《C语言第8章习题及答案.docx》由会员分享,可在线阅读,更多相关《C语言第8章习题及答案.docx(18页珍藏版)》请在冰点文库上搜索。
C语言第8章习题及答案
第八章
用一个数组存放图书信息,每本书是一个结构,包括下列几项信息:
书名、作者、出版年月、借出否,试写出描述这些信息的说明,并编写一个程序,读入若干本书的信息,然后打印出以上信息。
#include<>
typedefstruct
{
charName[20];
charAuthor[20];
intDate_Year;
intDate_Month;
intloaned;
}BOOK;
#defineN10
voidmain()
{
BOOKbooks[N];
inti;
for(i=0;i { printf("InputBook'sName: "); gets(books[i].Name); printf("InputBook'sAuthor: "); gets(books[i].Author); printf("InputBook'sYearofPublishing: "); scanf("%d",&books[i].Date_Year); printf("InputBook'sMonthofPublishing: "); scanf("%d",&books[i].Date_Month); printf("InputBook'sStatus,1-Loaned,2-Keepin: "); scanf("%d",&books[i].loaned); } for(i=0;i { printf("Book: %s,Author: %s,Publishing: %d-%d,Status: %d\n",books[i].Name,books[i].Author,books[i].Date_Year,books[i].Date_Month,books[i].loaned); } } 编写一个函数,统计并打印所输入的正文中的各个英文单词出现的次数,并按次数的递减顺序输出。 #include<> #include<> typedefstruct { chars[20]; intcount; }WORD; #defineN100 WORDwords[N]={0}; intword_count=0; intIsSeparator(charc) { if('A'<=c&&c<='Z'|| 'a'<=c&&c<='z'|| '0'<=c&&c<='9'|| '_'==c|| '-'==c) return0; else return1; } voidAddWord(char*s) { inti,found=0; charss[20]; for(i=0;*s&&! IsSeparator(*s);s++,i++) ss[i]=*s; ss[i]=0; for(i=0;i if(strcmp(ss,words[i].s)==0) { found=1; break; } if(found==0) { words[word_count].count=1; strcpy(words[word_count].s,ss); word_count++; } else { words[i].count++; } } voidfunc(char*s) { inti,j,t; charc,lc; WORDtemp; lc=*s; if(! IsSeparator(lc)) AddWord(s); for(i=1;c=*(s+i);i++) { if(! IsSeparator(c)&&IsSeparator(lc)) AddWord(s+i); lc=c; } for(i=0;i { t=i; for(j=i+1;j if(words[t].count t=j; if(i! =t) { temp=words[t]; words[t]=words[i]; words[i]=temp; } } for(i=0;i { printf("%s: %d\n",words[i].s,words[i].count); } } voidmain() { char*s="EveryCprogramhasaprimarymainfunctionthatmustbenamedmain"; func(s); } 有10个学生,每个学生的数据包括学号、姓名和三门课的成绩。 用键盘输入10个学生的数据,要求打印出每个学生三门课的平均成绩,以及最高分的学生的数据(学号、姓名、三门课的成绩和平均分数)。 #include<> #include<> typedefstruct { charname[20]; charsno[20]; intscore_1; intscore_2; intscore_3; doublescore_all; }STUDENT; #defineN10 STUDENTstudents[N]={0}; voidmain() { inti,max; for(i=0;i { printf("Input#%dStudent'sName: "); scanf("%s",students[i].name); printf("Input#%dStudent'sSNO: "); scanf("%s",students[i].sno); printf("Input#%dStudent'sScore_1: "); scanf("%d",&students[i].score_1); printf("Input#%dStudent'sScore_2: "); scanf("%d",&students[i].score_2); printf("Input#%dStudent'sScore_3: "); scanf("%d",&students[i].score_3); students[i].score_all=students[i].score_1+students[i].score_2+students[i].score_3; } max=0; for(i=0;i { printf("%s%s%d%d%d%lf\n",students[i].name,students[i].sno,students[i].score_1,students[i].score_2,students[i].score_3,students[i].score_all/3); if(students[max].score_all max=i; } printf("top=%s%s%d%d%d%lf\n",students[max].name,students[max].sno,students[max].score_1,students[max].score_2,students[max].score_3,students[max].score_all/3); } 请编程序建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束。 #include<> #include<> typedefstruct__NODE { intdata; __NODE*next; }NODE,*LPNODE; LPNODEhead=NULL; voidAddNode(intdata) { LPNODEt; t=(LPNODE)malloc(sizeof(NODE)); t->data=data; t->next=NULL; if(head==NULL) head=t; else { t->next=head; head=t; } } intCount(LPNODEhead) { inti=0; while(head! =NULL) { i++; head=head->next; } returni; } voidmain() { intn; do{ scanf("%d",&n); if(n==-1)break; AddNode(n); }while(n! =-1); printf("Count: %d",Count(head)); } 已知一个链表,链表中的结构为: structobject {charch; structobject*next; } 编写函数统计链表中的结点个数。 #include<> #include<> typedefstruct__NODE { intdata; __NODE*next; }NODE,*LPNODE; LPNODEhead=NULL; voidAddNode(intdata) { LPNODEt; t=(LPNODE)malloc(sizeof(NODE)); t->data=data; t->next=NULL; if(head==NULL) head=t; else { t->next=head; head=t; } } intCount(LPNODEhead) { inti=0; while(head! =NULL) { i++; head=head->next; } returni; } voidmain() { intn; do{ scanf("%d",&n); if(n==-1)break; AddNode(n); }while(n! =-1); printf("Count: %d",Count(head)); } 说明一个枚举类型enummonth,它的枚举元素为: Jan、Feb、…、Dec。 编写能显示上个月名称的函数last_month。 例如,输入Jan时能显示Dec。 再编写另一个函数printmon,用于打印枚举变量的值(枚举元素)。 最后编写主函数调用上述函数生成一张12个月份及其前一个月份的对照表。 #include<> enummonth{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}; char*ms[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; voidLast_Month(monthm) { inti; if(m==0) i=11; else i=m-1; printf("%spre: %s\n",ms[m],ms[i]); } voidprintmon(monthm) { printf("%sval: %d\n",ms[m],m); } voidmain() { monthi; for(i=Jan;i<=Dec;i=(enummonth)(i+1)) { Last_Month(i); printmon(i); } } 设有一包含职工编号、年龄和性别的单向链表,分别使用函数完成以下功能: (1)建立链表; (2)分别统计男女职工的人数; (3)在链表尾部插入新职工; (4)删除指定编号的职工; (5)删除60岁以上的男职工和55岁以上的女职工,被删除的结点保存到另一个链表中。 在主函数中设计简单的菜单去调用上述函数。 #include<> #include<> #include<> typedefstruct__EMPLOYEE { intsno; intage; intsex; __EMPLOYEE*next; }EMPLOYEE,*LPEMPLOYEE; LPEMPLOYEEhead=NULL,retired=NULL; voidAddNode(intsno,intage,intsex) { LPEMPLOYEEt,p; t=(LPEMPLOYEE)malloc(sizeof(EMPLOYEE)); t->sno=sno; t->age=age; t->sex=sex; t->next=NULL; if(head==NULL) head=t; else { p=head; while(p->next) p=p->next; p->next=t; } } voidCountSex(int*pmale,int*pfemale) { inti=0,j=0; LPEMPLOYEEp; p=head; while(p) { if(p->sex==1) i++; else j++; p=p->next; } *pmale=i; *pfemale=j; } voidDeleteBySno(intsno) { LPEMPLOYEEp,t=NULL; p=head; while(p) { if(p->sno==sno) { if(p==head) head=p->next; else t->next=p->next; free(p); } t=p; p=p->next; } } voidDeleteByAge(intage1,intage2) { LPEMPLOYEEp,t=NULL; p=head; while(p) { if(p->sex==1&&p->age>age1|| p->sex==2&&p->age>age2) { if(p==head) head=p->next; else t->next=p->next; if(retired==NULL) retired=p; else { p->next=retired; retired=p; } } t=p; p=p->next; } } voidfunc1() { AddNode(1,30,1); AddNode(2,65,1); AddNode(3,40,2); AddNode(4,30,2); AddNode(5,56,2); } voidfunc2() { inti,j; CountSex(&i,&j); printf("Male: %d,Female: %d\n",i,j); } voidfunc3() { intsno,sex,age; printf("InputSnoAgeSex(1: male,2: female): "); scanf("%d%d%d",&sno,&age,&sex); AddNode(sno,age,sex); } voidfunc4() { intsno; printf("InputSnotoDelete: "); scanf("%d",&sno); DeleteBySno(sno); } voidfunc5() { DeleteByAge(60,55); } voidmain() { charc; do{ //clrscr(); printf("1---func1\n"); printf("2---func2\n"); printf("3---func3\n"); printf("4---func4\n"); printf("5---func5\n"); c=getch(); switch(c) { case'1': func1();break; case'2': func2();break; case'3': func3();break; case'4': func4();break; case'5': func5();break; } printf("Pressanykeytocontinue,Press'N'or'n'toExit\n"); c=getch(); }while(! (c=='N'||c=='n')); } 精心搜集整理,只为你的需要
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题 答案