第9章结构体类型与共用体类型习题及答案
更新时间:2023-09-20 00:50:01 阅读量: 小学教育 文档下载
- 结构体类型和共用体类型推荐度:
- 相关推荐
第九章结构体类型与公用体类型习题及其答案
9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。
解:#include \struct date {
char month[10] ; int daynumber ; }
main() {
int i ; date a[12]
={{\{\,{\ for(i=0;i<12;i++);
printf(\ 月:%s %d\\n\}
思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用?
9-4 编写程序求空间任一点到原点的距离,点用结构体描述。并请考虑求空间中任意两点的距离的程序。 解:#include \#include \struct point {
float x ; float y ; float z ; }
void main() {
double d1,d2,d ;
point p1,p2 ;
printf(\请输入第一个点的坐标:\ scanf(\ printf(\请输入第二个点的坐标:\ scanf(\ d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z); d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z);
d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*(p2.z-p1.z));
printf(\第一个点到原点的距离:%f\\n\ printf(\第二个点到原点的距离:%f\\n\ printf(\两点间的距离:%f\\n\}
9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。 解:#include \struct AddressBook {
char name[10] ; char address[30] ; char mailnumber[7] ; char telphone[12] ; char byphone[16] ; char movephone[1] ; }
void main() {
int i ;
AddressBook fd[10] ; for(i=0;i<10;i++) {
printf(\请输入第%d个朋友的信息:\\n\ printf(\姓名:\
scanf(\ printf(\地址:\
scanf(\ printf(\邮编:\
scanf(\ printf(\电话:\
scanf(\ printf(\传呼:\
scanf(\ printf(\手机:\
scanf(\ }
for(i=0;i<10;i++) {
printf(\第%d个朋友的信息:\\姓名:%s\\n 地址:%s\\n 邮
编:%s\\n 电话:%s\\n 传呼:%s\\n 手
机:%s\\n\one,fd[i].byphone,fd[i].movephone) ; } }
思考:结构体类型变量的分量可以是各种基本数据类型(整型、实型、字符型等)或数组类型,是否可以是另一结构体类型?
9-6 用一个数组存放图书信息,每本图书包含书名、作者、出版年月、出版社、借出数目、库存数目等信息。编写程序输入若干本图书的信息,按出版年月排序后输出。 解:#include \#include \struct Book {
char booktitle[30] ; char author[10] ; char publishday[10] ; char publishunit[22] ; char lendno[16] ;
char stockno[11] ; }
#define N 100 //假设图书数量不超过110册 main() {
int i,j,k,n;
Book ts[N] ,t;
printf(\请输入欲处理的图书数量:\ scanf(\ for(i=0;i printf(\请输入第%d本书的信息:\\n\ printf(\书名:\ scanf(\ printf(\作者:\ scanf(\ printf(\出版年月:\ scanf(\ printf(\出版社:\ scanf(\ printf(\借出数:\ scanf(\ printf(\库存数:\ scanf(\ } for(i=0;i for(j=i+1;j if(strcmp(ts[k].publishday,ts[j].publishday)<0) k=j ; {t=ts[i],ts[i]=ts[j];ts[j]=t;} } printf(\排序后的图书信息:\ for(i=0;i { printf(\书名: %s, 作者: %s, 出版年月: %s, 出版社: %s, 借出数: %s, 库存 数:%s\\n\nit,ts[i].lendno,ts[i].stockno) ; } } 思考:在此程序中,ts[N]是一个什么类型的数组?每个数组的元素大约需占多少字节内存?为什么? 9-7 建立一张人员登记表,表中包括人员的姓名、性别、年龄、婚否,如为已婚,还包括爱人的姓名、年龄。将此表输出,假定人数不超过50人。 解:#include \#include \struct registerable { char name[10] ; char sex ; int age; char marry ; char wifename[10]; int wifeage ; } #define N 50 void main() { int i,n; struct registerable ts[N] ; printf(\请输入欲录入人员数量:\ scanf(\ for(i=0;i printf(\请输入第%d个人的信息:\\n\ printf(\姓名:\ av.c[1]=av.c[1]+cs[i].c[1]; av.c[2]=av.c[2]+cs[i].c[2]; av.aver=av.aver+cs[i].aver ; } output(cs) ; printf(\ %8s = = = %6.2f\\n\[1]/N,av.c[2]/N,av.aver/N) ; } 思考:在此程序中,av是否可以不是结构体类型?若是,请改用其它数据形式进行处理。 9-11 在上题的基础上,要求求出: (1) 平均分最高的学生的数据。 (2) 每门课高于平均成绩的学生人数。 (3) 每个学生第一门课程与平均成绩的分差。 解:#include \#include \ #define STT struct student STT { int no; char name[8] ; int c[3]; int total; float aver,dfen; }; #define N 3 int i ,j; void output(STT a[N]) { printf(\学生成绩信息表\\n\ printf(\ 学号 姓名 成绩1 成绩2 成绩3 总分 平均成绩 分差\\n\ for(i=0;i { printf(\ %8s = = = = %6.2f %6.2f\\n\i].no,a[i].name,a[i].c[0],a[i].c[1],a[i].c[2],a[i].total,a[i].aver,a[i].dfen); } } void input(STT a[N]) { printf(\请输入学生的学号、姓名、成绩:\ for(i=0;i printf(\第%d个人的信息:\\n\ printf(\学号:\ scanf(\; printf(\姓名:\ scanf(\; printf(\三门课成绩:\ scanf(\; a[i].total=a[i].c[0]+a[i].c[1]+a[i].c[2]; a[i].aver=a[i].total/N; } } void main() { STT cs[N],av; int max_i=0,rnum[3]={0,0,0}; input(cs) ; for(i=0;i av.c[0]=av.c[0]+cs[i].c[0]; av.c[1]=av.c[1]+cs[i].c[1]; av.c[2]=av.c[2]+cs[i].c[2]; av.aver=av.aver+cs[i].aver ; if(av.aver { av.aver=cs[i].aver; max_i=i ; //记录平均分最高的学生 } } for(i=0;i<3;i++) av.c[i]=av.c[i]/N; for(i=0;i for(j=0;j<3;j++) if(cs[i].c[j]>av.c[j]) rnum[j]++ ;//统计每门课高于平均成绩的人数 cs[i].dfen=cs[i].c[0]-av.c[0];//计算每个学生第一门课与第一门课平均成绩的分差 } output(cs) ; printf(\ %8s = = = %6.2f\\n\[1]/N,av.c[2]/N,av.aver/N) ; printf(\ %8s = = = = %6.2f %6.2f\\n\x_i].no,cs[max_i].no,cs[max_i].name,cs[max_i].c[0],cs[max_i].c[1],cs[max_i].c[2],cs[max_i].total,cs[max_i].aver,cs[max_i].dfen) ; } 思考:如果要计算每个学生第一门课程与该学生的平均成绩的分差,此程序应如何改动? 9-12 有若干个运动员,每个运动员包括编号、姓名、性别、年龄、身高、体重等信息。若性别为男,则运动项目为长跑、登上;若性别为女,则运动项目为短跑、跳绳。用一个函数输入运动员的信息,用另一个函数求每个项目的平均成绩,在用另一个函数输出运动员信息。 解:#include \#include \ #define ATH struct athlete ATH { int no ; char name[8]; char sex; int age ; float high ; float weight ; float event1 ; float event2 ; }; #define N 100 int i ; output(ATH a[N]) { printf(\运动员情况信息表\\n\ printf(\编号 姓名 性别 年龄 身高 体重 长跑 登山 短跑 跳绳\\n\ for(i=0;i if(a[i].sex=='m'||a[i].sex=='M') printf(\ %c = %5.1f %5.1f %6.2f %6.2f\\n\me,a[i].sex,a[i].age,a[i].high,a[i].weight,a[i].event1,a[i].event2); else printf(\ %c = %5.1f %5.1f %6.2f %6.2f\\n\me,a[i].sex,a[i].age,a[i].high,a[i].weight,a[i].event1,a[i].event2); } } input(ATH a[N]) { printf(\请输入运动员的编号、姓名等相关信息:\\n\ for(i=0;i printf(\第%d个运动员:\\n\ printf(\编号:\ scanf(\ printf(\姓名:\ scanf(\ printf(\性别:\ scanf(\ printf(\年龄:\ scanf(\ printf(\身高:\ scanf(\ printf(\体重:\ scanf(\ if(a[i].sex=='m'||a[i].sex=='M') { printf(\输入该运动员的“长跑”与“登山”的成绩:\ scanf(\; } else { printf(\输入该运动员的“短跑”与“跳绳”的成绩:\ scanf(\; } } } void main() { int msun=0,wsun=0 ; ATH cs[N],mav,wav; mav.event1=0; mav.event2=0; wav.event1=0; wav.event2=0; input(cs); for(i=0;i if(cs[i].sex=='m'||cs[i].sex=='M') { msun=msun+1; mav.event1=mav.event1+cs[i].event1; mav.event2=mav.event2+cs[i].event2; } else { wsun=wsun+1 ; mav.event1=mav.event1+cs[i].event1; mav.event2=mav.event2+cs[i].event2; } } mav.event1/=msun;mav.event2/=msun; wav.event1/=wsun;wav.event2/=wsun; output(cs) ; printf(\平均成绩:\\n 长跑=%6.2f, 登山=%6.2f,短跑=%6.2f,跳绳=%6.2f\\n \} 9-13 编写程序,用结构体类型实现复数的加、减、乘、除运算,每种运算用函数完成。 解:#include \struct complex { float real ; float imag ; }; struct complex add(struct complex a ,struct complex b) { struct complex temp ; temp.real=a.real+b.real ; temp.imag=a.imag+b.imag ; return temp ; } struct complex sub(struct complex a ,struct complex b) { struct complex temp ; temp.real=a.real-b.real ; temp.imag=a.imag-b.imag ; return temp ; } struct complex mul(struct complex a ,struct complex b) { struct complex temp ; temp.real=a.real*b.real-a.imag*b.imag; temp.imag=a.real*b.imag+a.imag*b.real; return temp ; } struct complex div(struct complex a ,struct complex b) { struct complex temp ; float t ; t=(b.real*b.real+b.imag*b.imag); temp.real=(a.real*b.real+a.imag*b.imag)/t; temp.imag=(b.real*a.imag-a.real*b.imag)/t; return temp ; } struct complex disp(struct complex t) { printf(\ if(t.imag>0) printf(\ if(t.imag!=0) printf(\ return t ; } void main() { struct complex x,y ; struct complex s1,s2,s3,s4; printf(\请输入第一个数的实部,虚部:\ scanf(\ printf(\请输入第二个数的实部,虚部:\ scanf(\ s1=add(x,y); s2=sub(x,y); s3=mul(x,y); s4=div(x,y); printf(\所求复数的和=\ printf(\所求复数的差=\ printf(\所求复数的积=\ printf(\所求复数的商=\ } 思考: 函数在返回时,传给调用函数的值是一个吗?为什么?结构体类型也可以作为返回类型吗? 9-14 编写程序,计算四边形的面积和周长,要求用结构体类型描述四边形。 解:#include \#include \ struct point //点的结构体 { float x; float y ; }; struct sbx //四边形结构体用四个顶点表示 { struct point p[4] ; }; float dist(struct point p1 ,struct point p2) //求两点距离 { float x=0; x=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)) ; return x ; } void main() { struct sbx a ; float zc,mj ; int i ; float d01,d12,d23,d30,d02; float c1,c2; for( i=0;i<4;i++) { printf(\请输入第%d个点的坐标:\\n\ printf(\(x,y)\ scanf(\ } /*计算四边形的周长*/ d01=dist(a.p[0],a.p[1]); d12=dist(a.p[1],a.p[2]); d23=dist(a.p[2],a.p[3]); d30=dist(a.p[3],a.p[0]); zc=d01+d12+d23+d30; /*计算面积(将四边形分割为俩个三角形)*/ d02=dist(a.p[0],a.p[2]) ; c1=(d01+d12+d02)/2; c2=(d30+d23+d02)/2; mj=sqrt(c1*(c1-d01)*(c1-d12)*(c1-d02))+sqrt(c2*(c2-d30)*(c2-d23)*(c2-d02)); /*输出结果*/ printf(\周长=%7.2f,面积=%7.2f\\n\} 思考:如果把此题中的四边形改为平行四边形,程序该如何改写? 9-15 编写程序,用枚举类型实现俩个数的加、减、乘、除运算,每 种运算用函数完成,并请考虑多个数的运算如何实现。 解:#include \float add(float a,float b) { float temp ; temp=a+b; return temp ; } float sub(float a,float b) { float temp ; temp=a-b; return temp ; } float mul(float a,float b) { float temp ; temp=a*b; return temp ; } float div(float a,float b) { float temp ; temp=a/b; return temp ; } void main() { enum yunsuanfu{a,b,c,d}js; //用a,b,c,d分别表示加、减、乘、除 float x,y,s; printf(\输入第一个数据:\ scanf(\ printf(\输入第二个数据:\ scanf(\
正在阅读:
第9章结构体类型与共用体类型习题及答案09-20
西交16年12月补考《政府与非营利组织会计》作业考核试题09-16
“中金所杯”历届部分试题解析110-08
论企业内部控制建设存在的问题与对策11-06
高校教师年度工作总结05-13
plc课程设计(多种液体自动混合装置的PLC控制)09-07
乡镇人大主席团人大报告12-13
六年级下册科学复习资料04-29
防止扬尘及噪音污染方案05-31
- 通信原理实验报告
- 2016年上半年安徽省临床医学检验技术中级技师职称试题
- 传智播客刘意老师JAVA全面学习笔记
- 星级酒店客房部保洁服务标准与工作流程操作规范 - PA新员
- 算法竞赛入门经典授课教案第1章 算法概述
- 《微信公众平台架起家校互通桥》结题报告
- 2018年宁夏银川市高考数学三模试卷(理)Word版含解析
- 大学生创业基础 - 尔雅
- 2016年6月英语六级真题写作范文3套
- 中国磁性材料纸行业专项调查与发展策略分析报告(2015-2020)
- 云南省2018届高三普通高中学业水平考试化学仿真试卷二Word版缺答案
- 窗函数法设计低通滤波器
- 第三章 绩效考评方法与绩效管理模式
- 高等数学教案
- 个人独资合伙企业习题及答案
- 小学语文沪教版三年级上册第六单元第30课《想别人没想到的》公开课优质课教案比赛讲课获奖教案
- 曳引钢丝绳及其他曳引系统校核计算 - 图文
- 淮阴工学院管理学期末试卷7 - 图文
- 受力分析方法(1)
- 2013-2014学年陕西省西安市西工大附小五年级(上)期末数学试卷及解析
- 类型
- 共用
- 习题
- 答案
- 结构
- 小学三年级中队工作总结
- 总结国内外财务管理领域研究的前沿问题
- 2018年党建工作述职报告
- 马克思主义基本原理复习题
- 四川农业大学2015宪法学复习题
- 2013年全国高等教育自学考试历年试题《管理心理学》案例分析
- 德国KLOTZ -
- 电器公司客户服务政策与实施细则
- 物理化学相平衡作业 图片版
- 2016~2017高级汽车维修工考试试题题库汇总(大全)
- PLC学习重点之期末考试复习资料
- 天津市旅游业发展十二五规划(印刷版)
- 浅谈初中英语主体参与型课堂教学模式
- 第二套题及答案
- 广东环境保护工程职业学院文件
- 消防演练简报 - 图文
- 紫湖规划文本g - x - 图文
- 第11章 AP元素11.24 - 图文
- 广东商学院2012届本科生优秀毕业论文-广东财经大学教务处
- 首届全国康复治疗技术专业学生技能竞赛(理论题)