习题解答(第七章)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言程序设计习题解答(第七章)7.1题目略.[解答](1)A(2)F(3)B(4)B(5)C7.2题目略.(1)6(2)40(3)DDBBCC(4)04515(5)6(6)167.3职工数据包括:职工号、职工名、性别、年龄、工龄、工资、地址。(1)为其定义一个结构体变量。(2)对上述定义的变量,从键盘输入所需的具体数据,然后用printf函数显示出来。(3)定义一个职工数据的结构体数组,从键盘输入每个结构体元素所需的数据,然后逐个输出这些元素的数据(为简化起见,可设数组只有三个元素)。[解答](1)structemployee{unsignedlongnum;charname[20];charsex;unsignedintage;unsignedintls;floatwage;charaddr[50];};(2)structemployee{unsignedlongnum;charname[20];charsex;unsignedintage;unsignedintls;floatwage;charaddr[50];};#includestdio.h#includestdlib.hvoidmain(){structemployeea;charnumstr[10];printf(请输入职工数据:\n);printf(职工号:);a.num=atol(gets(numstr));printf(职工名:);gets(a.name);printf(性别:);a.sex=getchar();getchar();printf(年龄:);a.age=atoi(gets(numstr));printf(工龄:);a.ls=atoi(gets(numstr));printf(工资:);a.wage=atof(gets(numstr));printf(地址:);gets(a.addr);printf(职工号:%d\n职工名:%s\n性别:%c\n年龄:%d\n工龄:%d\n工资:%f\n地址:%s\n,a.num,a.name,a.sex,a.age,a.ls,a.wage,a.addr);}(3)structemployee{unsignedlongnum;charname[20];charsex;unsignedintage;unsignedintls;floatwage;charaddr[50];};#includestdio.h#includestdlib.h#defineN3voidmain(){structemployeea[N];charnumstr[10];inti;printf(请顺序输入每个职工的数据\n);for(i=0;iN;i++){printf(第%d个职工:\n职工号:,i);a[i].num=atol(gets(numstr));printf(职工名:);gets(a[i].name);printf(性别:);a[i].sex=getchar();getchar();printf(年龄:);a[i].age=atoi(gets(numstr));printf(工龄:);a[i].ls=atoi(gets(numstr));printf(工资:);a[i].wage=atof(gets(numstr));printf(地址:);gets(a[i].addr);}printf(职工号职工名性别年龄工龄工资地址\n);for(i=0;iN;i++)printf(%-8d%-10s%-5c%-5d%-5d%-8.2f%s\n,a[i].num,a[i].name,a[i].sex,a[i].age,a[i].ls,a[i].wage,a[i].addr);}7.4设计一个用于人事管理的结构体:(1)每个人的数据包括:职工号、姓名、性别、出生日期;(2)性别和出生日期用位段表示。[解答]structdate{unsignedintday:5;unsignedintmonth:4;unsignedintyear:15;};structperson{unsignedlongnum;charname[20];unsignedintsex:1;structdatebirthday;};7.5有n个学生,每个学生的数据包括学号(num),姓名(name[20]),性别(sex),年龄(age),三门课成绩(score[3])。(1)要求在main函数中输入这几个学生的数据,然后调用一个函数count,在该函数中计算出每个学生的总分和平均分,然后打印出所有各项数据(包括原有的和新求出的)。提示:①在定义结构体类型时应预留出准备计算结果的成员项;②用结构体变量为函数参数,将各数据传给count函数。(2)改为用指针方法处理,即用指针变量逐次指向数组中各元素,然后向指针变量所指向的元素输入数据,并将指针变量作为函数参数将地址值传给count函数,在函数count中作统计,然后将数据返回main函数,在main函数输出。[解答](1)#includestdio.h#includestdlib.h#defineN4/*学生数*/#defineM3/*课程数*/structstud{unsignedlongnum;charname[20];charsex;intage;floatscore[M];floatsum;floataver;};voidcount(structstuds){inti;for(i=0,s.sum=0;iM;i++)s.sum+=s.score[i];s.aver=s.sum/M;printf(%-8ld%-12s%-5c%-5d,s.num,s.name,s.sex,s.age);for(i=0;iM;i++)printf(%-7.1f,s.score[i]);printf(%-7.1f%-7.2f\n,s.sum,s.aver);}voidmain(){structstudstudent[N];charnumstr[20];inti,j;for(i=0;iN;i++){printf(请输入第%d个学生的记录:\n,i);gets(numstr);student[i].num=atol(numstr);gets(student[i].name);student[i].sex=getchar();getchar();gets(numstr);student[i].age=atoi(numstr);for(j=0;jM;j++){gets(numstr);student[i].score[j]=atof(numstr);}}printf(学号姓名性别年龄);for(i=0;iM;i++)printf(科目%-3d,i);printf(总分平均分\n);for(i=0;iN;i++)count(student[i]);}(2)#includestdio.h#includestdlib.h#defineN4/*学生数*/#defineM3/*课程数*/structstud{unsignedlongnum;charname[20];charsex;intage;floatscore[M];floatsum;floataver;};voidcount(structstud*s){inti;for(i=0,s-sum=0;iM;i++)s-sum+=s-score[i];s-aver=s-sum/M;}voidmain(){structstudstudent[N],*p;charnumstr[20];inti;for(p=student;pstudent+N;p++){printf(请输入第%d个学生的记录:\n,p-student);gets(numstr);p-num=atol(numstr);gets(p-name);p-sex=getchar();getchar();gets(numstr);p-age=atoi(numstr);for(i=0;iM;i++){gets(numstr);p-score[i]=atof(numstr);}}printf(学号姓名性别年龄);for(i=0;iM;i++)printf(科目%-3d,i);printf(总分平均分\n);for(p=student;pstudent+N;p++){count(p);printf(%-8ld%-12s%-5c%-5d,p-num,p-name,p-sex,p-age);for(i=0;iM;i++)printf(%-7.1f,p-score[i]);printf(%-7.1f%-7.2f\n,p-sum,p-aver);}}7.6有4名学生,每个学生包括学号、姓名、成绩,要求用指针方法找出成绩最高者的姓名和成绩。[解答]#includestdio.h#includestdlib.h#defineN4/*学生数*/structstud{unsignedlongnum;charname[20];floatscore;};voidmain(){structstuds[N],*p,*q;charnumstr[20];for(p=q=s;ps+N;p++){printf(请输入第%d个学生的记录:\n,p-s);gets(numstr);p-num=atol(numstr);gets(p-name);gets(numstr);p-score=atof(numstr);if(q-scorep-score)q=p;}printf(成绩最高者的姓名和成绩为:%s%.1f.\n,q-name,q-score);}7.7建立一个链表,每个节点包含的成员为:职工号、工资。(1)用malloc函数开辟新节点。要求链表包含5个节点,从键盘输入节点中的有效数据。然后把这些节点的数据打印出来。要求用函数creat来建立链表,用list函数来输出数据。这5个职工的号码为0601,0603,0605,0607,0609。(2)在(1)的基础上,新增加一个职工的数据。这个新节点不放在最后,而是按职工号顺序插入,新职工号为0606。写一个函数insert来插入新节点。(3)在(1)、(2)的基础上,写一个函数delete,用来删除一个节点(按指定的职工号删除)。要求删除职工号为0606的节点;[解答](1)#includestdio.h#includestdlib.h#defineN5/*职工数*/structemployee{longnum;floatwage;structemployee*next;};structemployee*creat(intn)/*建立一个有n个结点的链表*/{inti;structemployee*head,*p,*q;if(n==0)return(NULL);/*无结点*/for(i=0;in;i++){p=(structemployee*)malloc(sizeof(structemployee));/*建立第i个结点*/printf(请输入第%d个职工的号码和工资:,i);scanf(%ld%f,&p-num,&p-wage);if(i==0)head=q=p;/*使head指向头结点*/else{q-next=p;q=p;}}q-next=NULL;/*最后一个结点中放入空指针*/return(head);/*返回指向头结点的指针*/}voidlist(structemployee*p)/*打印p指向的链表中各个结点的数据*/{if(p==NULL)/*空链表*/{printf(\n没有职工记录.\n);return;}printf(\n职工号工资\n);while(p!=NULL){printf(%-8ld%-8.2f\n,p-num,p-wage);p=p-next;}}voidmain

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功