编辑: 黎文定 2019-09-16
厦门大学本科生公共课 《C 程序设计基础》 第二版教材习题答案

第九章 结构体、共用体和枚举类型 【教材】 《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:ziyulin@xmu.edu.cn 主页: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:ziyulin@xmu.edu.cn 主页: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:ziyulin@xmu.edu.cn 主页: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........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题