您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C语言程序设计答案(黄保和编)第9章
厦门大学本科生公共课《C程序设计基础》教材习题答案第9章结构体、共用体和枚举类型第1页/共8页一、选择题1、若已经定义“structstu{inta,b;}student;”,则下列输入语句中正确的是D)scanf(“%d”,&student.a);2、若已有以下结构体定义,则值为2的表达式是A)c[0].y;structcmplx{intx;inty;}c[]={1,2,3,4};3、设有如下程序段,则vu.a的值为D)A、B、C都不是unionu{inta;intb;floatc;}vu;vu.a=1;vu.b=2;vu.c=3;4、设已经定义“unionu{chara;intb;}vu;”在VC中存储char型数据需要1个字节,存储int型数据需要4个字节,则存储变量vu需要B)4个字节5、设已经定义“unionu{inta;intb}vu={1,2};”,则D)该定义错误6、设有定义“enumdate{year,month,day}d;”则下列叙述中正确的是A)date是类型、d是变量、year是常量7、设有定义“enumdate{year,month,day}d;”则正确的表达式是B)d=year8、若已经定义了“typedefstructstu{inta,b}student;”则下列叙述中正确的是C)student是结构体类型9、下列有关typedef语句的叙述中,正确的是C)typedef语句用于给已定义类型取别名二、编程题1、设计一个通讯录的结构体类型,并画出该结构体变量在内存中的存储形式struct{namechar[10];telephonechar[20];addresschar[100];};2、用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点之间的距离#includestdio.h#includemath.hvoidmain(){structPoint{floatx;floaty;}a,b;printf(输入点a的横坐标:\n);name占10个字节telephone占20个字节address占100个字节厦门大学本科生公共课《C程序设计基础》教材习题答案第9章结构体、共用体和枚举类型第2页/共8页scanf(%f,&a.x);printf(输入点a的纵坐标:\n);scanf(%f,&a.y);printf(输入点b的横坐标:\n);scanf(%f,&b.x);printf(输入点b的纵坐标:\n);scanf(%f,&b.y);printf(a、b两点之间的距离为:%f\n,sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));}3、用结构体变量表示日期(年、月、日),任意输入两个日期,求它们之间相差的天数#includeiostream#includestdio.husingnamespacestd;#defineDAY_OF_YEAR365//一年的天数,当为闰年时需要另外操作//日期结构体typedefstructdate{intyear;intmonth;intday;intday_of_year;//该日为该年的第几天}DATE,*DATE_P;//函数声明boolcompear(DATE_Pmax,DATE_Pmin);inttitoal(DATE_Pdate);boolleap_year(constintyear);intfuntion(DATE_Pmax,DATE_Pmin);//主函数voidmain(){DATEdate_1,date_2;//输入的两个日期DATE_Pmax,min;//max指向大日期,min指向小日期intresult;//数据输入printf(请输入日期1的数据项,年月日间用空格阁开:\n);scanf(%d%d%d,&date_1.year,&date_1.month,&date_1.day);printf(请输入日期2的数据项,年月日间用空格阁开:\n);scanf(%d%d%d,&date_2.year,&date_2.month,&date_2.day);厦门大学本科生公共课《C程序设计基础》教材习题答案第9章结构体、共用体和枚举类型第3页/共8页//数据处理if(!compear(max=&date_1,min=&date_2))//比较日期大小,不需要交换result=funtion(max,min);else//需要交换result=funtion(min,max);//结果printf(两日期间相差的天数为:%d\n,result);}//比较两日期的大小boolcompear(DATE_Pmax,DATE_Pmin){//max的日期小于min的日期,日期对调if((max-yearmin-year))//max的年份小于minreturn1;elseif((max-year==min-year))//max和min的年份相同{if((max-monthmin-month))//max的月份小于minreturn1;elseif((max-month==min-month))//max和min的月份相同if((max-daymin-day))//max的日小于minreturn1;}//其他情况满足max的日期大于(等于)min,日期保持不变return0;}//计算相差天数intfuntion(DATE_Pmax,DATE_Pmin){//年份相同,相差天数为大日期减小日期if(max-year==min-year){//计算大日期max-day_of_year=titoal(max);//计算日期函数厦门大学本科生公共课《C程序设计基础》教材习题答案第9章结构体、共用体和枚举类型第4页/共8页if(leap_year(max-year))//如果为闰年if((max-month==2&&max-day==29)||max-month2)max-day_of_year++;//计算小日期min-day_of_year=titoal(min);if(leap_year(min-year))//如果为闰年if((min-month==2&&min-day==29)||min-month2)min-day_of_year++;//返回相差天数returnmax-day_of_year-min-day_of_year;}//年份不同,相差天数为max、min剩余天数和之间年的天数总和intmax_year,min_year,other_year=0;//计算大日期max-day_of_year=titoal(max);if(leap_year(max-year))//如果为闰年if((max-month==2&&max-day==29)||max-month2)max-day_of_year++;max_year=max-day_of_year;//计算小日期min-day_of_year=titoal(min);if(leap_year(min-year))//如果为闰年if((min-month==2&&min-day==29)||min-month2)min-day_of_year++;min_year=DAY_OF_YEAR-min-day_of_year;//剩余的天数if(leap_year(min-year))//如果为闰年天数加1min_year++;//计算之间的日期intyear;for(year=min-year+1;yearmax-year;year++)other_year+=DAY_OF_YEAR+leap_year(year);//一年的天数,并考虑是否为闰年//返回总天数returnmax_year+min_year+other_year;}厦门大学本科生公共课《C程序设计基础》教材习题答案第9章结构体、共用体和枚举类型第5页/共8页//计算某日该年的第几天,闰年也按平年处理inttitoal(DATE_Pdate){intresult=0;//最后结果inti;//标记月份for(i=1;idate-month;i++)//计算以过月份的天数{switch(i){case1:case3:case5:case7:case8:case10:result+=31;break;//大月31天,注:12月不会出现,所以忽略不写case4:case6:case9:case11:result+=30;break;//小月31天default:result+=28;//2月28天}}returnresult+=date-day;//加上本月天数既为最后结果}//判断某年是否为闰年,若是返回1,否则返回0boolleap_year(constintyear){if((!(year%4)&&year%100)||!(year%400))return1;return0;}4、用结构体变量表示复数(实部和虚部),输入两个复数,求两复数之积#includestdio.hstructcom{intreal;intim;};voidmain(){structcoma,b,c;厦门大学本科生公共课《C程序设计基础》教材习题答案第9章结构体、共用体和枚举类型第6页/共8页structcomcmult(structcomcreal,structcomcim);inti,j;printf(输入两个复数的实部和虚部:);scanf(%d%d%d%d,&a.real,&a.im,&b.real,&b.im);c=cmult(a,b);printf(乘积为:%d+%di,c.real,c.im);}structcomcmult(structcomcreal,structcomcim)/*求乘积的函数*/{structcoma;a.real=creal.real*cim.real-creal.im*cim.im;a.im=creal.real*cim.im+creal.im*cim.real;return(a);}/*设复数为a+bi和c+di,那么和为:(a+c)+(b+d)i,乘积为:(ac-bd)+(ad+bc)i。*/5、有20个学生,每个学生的数据包括学号(num)、姓名(name)、性别(sex)、5门课程成绩(score[5])。要求编写一个程序,输入学生数据,计算并输出每个学生的总分和平均分。#includestdio.h#defineN2voidmain(){structstudent{intnum;charname[10];charsex[10];intscore[5];intsum;floataverage;};structstudentstu[N],s;inti,j;for(i=0;iN;i++){stu[i].sum=0;stu[i].average=0;printf(pleasescanfnumnamesexscore(1)score(2)score(3)score(4)score(5)\n);scanf(%d%s%s,&stu[i].num,stu[i].name,stu[i].sex);for(j=0;j5;j++)厦门大学本科生公共课《C程序设计基础》教材习题答案第9章结构体、共用体和枚举类型第7页/共8页{scanf(%d,&stu[i].score[j]);stu[i].sum+=stu[i].score[j];}stu[i].average=stu[i].sum/5.0;}for(i=0;iN;i++){printf(numnamesexscore(1)score(2)score(3)score(4)score(5)sumaverage\n);printf(%d%s%s,stu[i].num,stu[
本文标题:C语言程序设计答案(黄保和编)第9章
链接地址:https://www.777doc.com/doc-2908285 .html