9 结构体与共用体 答案

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9 结构体与共用体

一、选择填空

9.1 答案:C

分析:在本题的说明中定义了一个名为wc的结构,它由两个成员组成:整型变量a和指针变量b。在定义的同时说明了一个指向这一结构类型的指针变量p。数组x0和x1都是含有两个整型元素的一维数组,并赋有初值。x为一结构型数组,共有两个元素,每一个元素都具有struct wc型的结构(含有两个成员),并赋有初值。执行p=x;语句后,p指向这一结构数组的首地址。

由于p指向了x数组的首地址,也就是x[0]的地址,所以答案A中的*p->b等价于*(x[0].b),其值为11(注意:运算符->优先于*);答案B中的p->a即是x[0].a,其值为100;答案C中的++p->a是找到p->a(其值为100),再将此值自增1,取增加1以后的值,故为101;答案D是先将指针p增1,指向x数组的第二个元素x[1],即(p++)->a在此等价于x[1].a,其值为300。

9.2 答案:D

分析:本题中的初始数据的构成情况与上题相同。如前所述,答案A的值为11;答案B的值与上题的答案D相同,为300;答案C是先取内容,后自增1,等价于*p->b, p++,故其值也为11;而答案D是p先自增1,指向x[1],后取值,等价于++p, *p->b,所以其值为31。

9.3 答案:D

分析:关键字typedef是利用已定义的类型标识符来定义新的类型标识符。它并不产生新的数据类型。其一般形式为:

typedef 类型名标识符;

题中的long int就是一个已存在的类型名,而新定义的类型名BIGGY就代表着long int 这个类型标识符。

9.4 答案:D

分析:由于本题中定义了一个名为st的结构,它由两个成员组成:一个是整型变量n;一个是指向自身结构的指针变量next。接着又定义了具有这一类型的一维数组a和指针变量p。a数组含有3个元素并赋有初值。p指向a数组的第一个元素。它们之间的关系可用图9.1表示。

图9.1 指针变量p和数组a的关系

由于运算符->的优先级高于运算符++,因此答案A的表达式p++->n是取p->n(即a[0].n)的值5,然后再使p++,指向下一个元素;答案B仍是先取p->n(值为5)作为表达式的值,再使p->n的值加1;答案C的表达式是答案B的表达式的另一种表示形式,因此得到的值也是5;答案D是先取p->n的值5,再增加1得到6。

9.5 答案:C D

分析:这是一道有关结构的概念题。在结构的定义中,允许结构变量与其成员同名。因此A是错误的;在本题的定义中,st只是一个结构名,并不占具体的内存单元,只有结构变量a才是实体,运行时要给a分配具体的内存单元,所以B也是错误的。

9.6 答案:A C D

分析:题中定义了一个结构型的变量a和一个指向该结构的指针变量p。结构中的每一个成员都赋有初值。对字符串Li ning的引用,也就是对结构成员的引用。引用方式有3种:

①结构变量名.成员名;②结构指针变量名->成员名;③ (*结构指针变量名).成员名。对照这3种方式可知,本题答案是A C D。

9.7 答案:A B C

分析:本题的说明形式和数据之间的关系如图9.2所示。

p

100 11 16 300 31 36

↑x[0] ↑x0 ↑x[1] ↑x1

图9.2 数据之间的关系示意图

答案A是先使指针p->b的值增加1(注意->的优先级高于++),指向了x0[1],再取p->b 的内容,其值为16;答案B是p增加1(指向x[1])后,再使指针p->b的值增加1,指向x1[1],然后取p->b的内容,其值为36;答案C是先取p->b的内容,其值为11,而后使p->b增加1,指向x0[1];答案D是使指针p增加1,取p->b,这是一个地址值。由以上分析可知,答案A,B,C中都有使指针p->b的值增1的操作。

二、填空题

9.8 答案:(1)error(x,y) (2)status (3)return Right

分析:本题考核点是枚举类型数据的使用。程序使用enum Error Data{...}定义了一个枚举类型enum Error Data,其中Right,Lesson,Greet 100, MinMaxErr是枚举常量,它们是有值的,C语言编译时按定义时的顺序使它们的值分别为0,1,2,…,所以Right的值为0,Lesson的值为1,Great 100的值为2,MinMaxErr的值为3。程序中定义了指针数组ErrorMessage[ ],它的每个元素分别是指向“EnterData Right”,“Data<0 Error”,…的指针。以上定义均是全局变量。函数error()的功能是对参数min, max进行比较,根据结果返回相应的枚举元素。main()中通过do-while循环,当status!=Right时要求重复输入数据,数据输入后,调用函数error()进行比较,看其是否正确,根据比较结果返回不同的值,并将返回值赋给status。输出相应的信息及输出Result= x2+y2的结果。所以(1)填error(x,y),(2)填status,error函数中的(3)填return Right。

9.9 答案:(1)p->info (2)p->next (3)p!=NULL

分析:略

9.10 答案:(1)num!=p1->info&&p1->link!=NULL (2)head=p1->link

(3)p2->link=p1->link

分析:略

9.11 答案:(1)(struct list *) (2)(struct list *) (3)return(h)

分析:本题考核点是链表的创建。函数creat()创建带头指针的单向链表,因此申请的头指针应具有struct list类型。同理,申请的每一个新结点都具有struct list类型。根据程序说明,函数的返回值是单向链表的头指针,因此(3)填return(h)。

9.12 答案:(1)while (p!=NULL) (2)n++;p=p->next;

相关文档
最新文档