编辑: 黎文定 | 2019-09-16 |
第九章 结构体、共用体和枚举类型 【教材】 《C 语言程序设计(第2版) 》清华大学出版社,黄保和,江弋 编著.
2011 年10 月第二版.ISBN:978-7-302-26972-4.售价:35 元. 【答案版本】本习题答案为
2012 年2月修订版本. 一.选择题
1、 若已经定义 struct stu {int a, b;
} student;
, 则下列输入语句中正确的是D)scanf( %d ,&
student.a). A. scanf( %d ,&
a) B. scanf( %d ,&
student) C. scanf( %d ,&
stu.a) D. scanf( %d ,&
student.a)
2、 若已有以下结构体定义,则值为
2 的表达式是A)c[0].y. struct cmplx{ int x;
int y;
}c[]={1,2,3,4};
A. c[0].y B. y C. c.y[0] D. c.y[1]
3、 设有如下程序段,则vu.a的值为D)A、B、C都不是. union u{ int a;
int b;
float c;
}vu;
vu.a=1;
vu.b=2;
vu.c=3;
A.
1 B.
2 C.
3 D. A、B、C 都不是
4、 设已经定义 union u{char a;
int b;
}vu;
在VC中存储char型数据需要
1 个字节, 存储int 型数据需要
4 个字节,则存储变量vu需要B)4 个字节. A.
1 B.
4 C.
5 D.
8
5、 设已经定义 union u{int a;
int b}vu={1,2};
,则D)该定义错误. A. 共用体成员 a 和b的值都是
1 B. 共用体成员 a 和b的值都是
2 C. 共用体成员 a 的值是 1,b 的值都是
2 D. 该定义错误
6、 设有定义 enum date{year,month,day}d;
则下列叙述中正确的是A)date是类型、d是变 量、year是常量. A. date 是类型、d 是变量、year 是常量 B. date 是类型、d 和year 是变量 C. date 和d是类型、year 是常量 D. date 和d是变量、year 是常量
7、 设有定义 enum date{year,month,day}d;
则正确的表达式是B)d=year. A. year=1 B. d=year C. d= year D. date= year
8、 若已经定义了 typedef struct stu{int a,b}student;
则下列叙述中正确的是C)student是 结构体类型. A. stu 是结构体变量 B. student 是结构体变量 B. student 是结构体类型 D. a 和b是结构体变量
9、 下列有关typedef语句的叙述中,正确的是C)typedef语句用于给已定义类型取别名. 答案整理:林子雨 E-mail:[email protected] 主页:http://www.cs.xmu.edu.cn/linziyu 第1页/共7页厦门大学本科生公共课 《C 程序设计基础》 第二版教材习题答案
第九章 结构体、共用体和枚举类型 A. typedef 语句用于定义新类型 B. typedef 语句用于定义新变量 C. typedef 语句用于给已定义类型取别名 D. typedef 语句用于给已定义变量取别名 二.编程题
1、 设计一个通讯录的结构体类型,并画出该结构体变量在内存中的存储形式. struct { name char[10];
telephone char[20];
address char[100];
};
name 占10 个字节 telephone 占20 个字节 address 占100 个字节
2、 用结构体变量表示平面上的一个点(横坐标和纵坐标) ,输入两个点,求两点之间的距 离. #include #include void main() { struct Point { float x;
float y;
}a,b;
printf( 输入点 a 的横坐标:n );
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 两点之间的距离为:%fn , sqrt( (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) ));
}
3、 用结构体变量表示日期(年、月、日) ,任意输入两个日期,求它们之间相差的天数. #include #include using namespace std;
#define DAY_OF_YEAR
365 //一年的天数,当为闰年时需要另外操作 //日期结构体 typedef struct date { int year;
int month;
答案整理:林子雨 E-mail:[email protected] 主页:http://www.cs.xmu.edu.cn/linziyu 第2页/共7页厦门大学本科生公共课 《C 程序设计基础》 第二版教材习题答案
第九章 结构体、共用体和枚举类型 int day;
int day_of_year;
//该日为该年的第几天 }DATE, *DATE_P;
//函数声明 bool compear(DATE_P max, DATE_P min);
int titoal(DATE_P date);
bool leap_year(const int year);
int funtion(DATE_P max , DATE_P min);
//主函数 void main() { DATE date_1, date_2;
//输入的两个日期 DATE_P max, min;
//max 指向大日期,min 指向小日期 int result;
//数据输入 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);
//数据处理 if( !compear(max=&
date_1, min=&
date_2) ) //比较日期大小,不需要交换 result = funtion(max, min);
else //需要交换 result = funtion(min, max);
//结果 printf( 两日期间相差的天数为:%dn , result);
} //比较两日期的大小 bool compear(DATE_P max, DATE_P min) { //max 的日期小于 min 的日期,日期对调 if((max->
year <
min->
year)) //max 的年份小于 min return 1;
else if((max->
year == min->
year)) //max 和min 的年份相同 { if((max->
month <
min->
month)) //max 的月份小于 min return 1;
else if((max->
month == min->
month)) //max 和min 的月份相同 if((max->
day <
min->
day)) //max 的日小于 min return 1;
} //其他情况满足 max 的日期大于(等于)min,日期保持不变 return 0;
} 答案整理:林子雨 E-mail:[email protected] 主页:http://www.cs.xmu.edu.cn/linziyu 第3页/共7页厦门大学本科生公共课 《C 程序设计基础》 第二版教材习题答案
第九章 结构体、共用体和枚举类型 //计算相差天数 int funtion(DATE_P max , DATE_P min) { //年份相同,相差天数为大日期减小日期 if(max->
year == min->
year) { //计算大日期 max->
day_of_year = titoal(max);
//计算日期函数 if( leap_year(max->
year) ) //如果为闰年 if( (max->
month==2 &
&
max->
day==29) || max->
month>
2) max->
day_of_year ++;
//计算小日期 min->
day_of_year = titoal(min);
if( leap_year(min->
year) ) //如果为闰年 if( (min->
month==2 &
&
min->
day==29) || min->
month>
2) min->
day_of_year ++;
//返回相差天数 return max->
day_of_year - min->
day_of_year;
} //年份不同,相差天数为 ma........