结构体(4)

 

10。故应该选择c。

28.有以下程序

main( )

{ union

{ char ch[2]; C)++pt->x D)(pt++)->x

int d;

}s; s.d=0x4321;


printf(″%x,%x\n″,s.ch[0].s.ch[1]);

}

在16位编译系统上,程序执行后的输出结果是

A)21,43

C)43,00

【答案】 A

【解析】本题主要考查的知识点是整型变量在内存中的存放形式和共用体的概念。在我们常用的DOS或Windows操作系统下,存储器中的数据都是按“低位在低地址,高位在高地址”的规则存放的。例如一个十六进制数0xABCDEF,我们知道A是最高位,F是最低位,所以按照“低低高高”规则,它在存储器中从低位到高位的样子就成了EF CD AB了。又因为共用体的所有成员是共享同一块存储空间的,所以在题目所定义的共用体中,ch[O]等于d的低字节值,ch[1]等于d的高字节值。程序首先让s.d等于0x4321,然后输出s.ch[0],s.ch[1],就是先输出0x4321的低字节值2l,再输出高字节值43。故应该选择A。

29.以下叙述中错误的是

A)可以通过typedef增加新的类型

B)可以用typedef将已存在的类型用一个新的名字来代表

C)用typedef定义新的类型名后,原有类型名仍有效

D)用typedef可以为各种类型起别名,但不能为变量起别名

【答案】A

【解析】本题考查的是typedef的概念。在C语言中typedef只能用来声明一个新的类型名代替已有的类型名,而不能用来增加新的类型,故选项A错误。

30. 以下选项中不能正确把cl定义成结构体变量的是______。

A)typedef struct

{int red;

int green;

int blue;

} COLOR;

COLOR cl;

B)struct color cl

{ int red;

int green;

int blue;

};

C)struct color

{ int red;

int green;

int blue; B)43,21 D)21,00


}cl;

D)struct

{int red;

int green;

int blue;

}

【答案】B。

【解析】本题的考查点是结构体变量的定义。

将一个变量定义为标准类型与定义为结构体类型不同之处在于:后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如,struct color),不能只指定结构体名。其一般形式为

struct 结构体名

{

成员表列

}变量名表列;

其中可以不出现结构体名,选项D就是缺省结构体名的情况。而变量名列表必须放在成员列表后面,所以B选项不能正确将c1定义为结构体变量。

31.若有下面的说明和定义:

struct test

{ int ml;char m2;float m3;

union uu{char ul[5];int u2[2];} ua;

} myaa;

则 sizeof(struct test)的值是

A)12 B)16 C)14 D)9

【答案】A

【解析】结构体所占用的存储空间是其所有成员占用的存储空间之和,而共用体所占用的存储空间是成员中占用存储空间最大者的空间,共用体类型uu是结构体的成员,它所占的内存长度为最大成员的长度,即字符型数组u1的长度,即1×5=5。每个整型数据占用2个字节,每个字符型数据占用一个字节,单精度型数据占4个字节,myaa为结构体变量,它所占的存储空间为各个成员所占存储空间之和,即2 1 4 5=12。

32.设有以下语句

typedef struct S

{int g;char h;}T;

则下面叙述中正确的是______。

A)可用S定义结构体变量

C)S是struct类型的变量

【答案】B

【解析】“struct S{int g;char h;}”定义一个结构体类型,struct是关键字,S是结构体名(可以缺省),花括号里 B)可用T定义结构体变量 D)T是struct S类型的变量


面的两个变量是结构体域(或结构体成员),用该结构体类型定义结构体变量格式为:struct S 变量名表列。在C语言中,可以用typedef声明新的类型名来代替已有的类型名,方法有四种:先按定义变量的方法写出定义体;将变量名换成新类型名;在最前面加typedef;可以用新类型名去定义变量。本题中的typedef struct S{int g;char h;}T;是将struct S(结构体类型)声明为T型(即T型就是结构体类型struct S),T是用户定义类型,可以用T定义结构体变量,选项A)C)D错误。

33.假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是______。

A)free(q); p->next=q->next;,

B)(*p).next=(*q).next; free(q);

C)q=(*q).next; (*p).next=q; free(q);

D)q=q->next; p->next=q; p=p->next;free(p);

【答案】B

【解析】一般要删除某个结点,分两种情况:1、要删除的是第一个结点(p的值等于head的值,如上图所示),则应将p->next赋给head,这时head指向原来的第二个结点。第一个结点仍存在,但它已与链表脱离,因为链表中没有一个结点或头指针指向它。若要释放链表p所指向的内存区,则可用free函数,使这部分内存区能被其它变量使用。2、如果要删除的不是第一个结点,则将q->next赋给p->next,p->next原来指向q指向的结点,现在p->next改为指向q->next所指向的结点,q所指向的结点不再是链表的一部分,若需要释放q所指向的内存区,同样可用free函数。

另外,C语言中,表示*p所指向的结构体变量中的成员有三种等价形式:

a.结构体变量.成员名;b.(*p).成员名;c.p->成员名;

本题考查了删除非第一个结点,所以将q->next赋给p->next,即(*p).next=(*q).next;,再用free(q);释放q结点所占的内存空间。

34. 有以下程序:

struct s

{ int x,y; } data[2]={10,100,20,200};

main()

{ struct s *p=data;

printf("%d\n",++(p->x));

}

程序运行后的输出结果是______。

A)10 B)11 C)20 D)21

【答案】B。

【解析】本题的考查点是结构体变量的初始化。


该题是一个对外部存储类型的结构体变量进行的初始化。初始化后,x的值为10,y的值为100。++(p->x)中首先p->x是把p指向结构体变量s中的x成员,此++(p->x)就相当于++x,这时x先自增,再使用,所以此时x的值为11。

35. 设有以下语句

typedef struct S

{ int g; char h;} T;

则下面叙述中正确的是______。

A)可用S定义结构体变量

B)可以用T定义结构体变量

C)S是struct类型的变量

D)T是struct S类型的变量

【答案】B。

【解析】除了可以直接使用C提供的标准类型名(如int、char、float、double、long等)和自己定义的结构体、共用体、指针、枚举类型外,还可以用typedef定义新的类型名来代替已有的类型名。如果在一个程序中,一个整型变量用来计数,可以:

typedef int COUNT;

COUNT i,j;

即将变量i,j定义为COUNT类型,而COUNT等价于int,因此i,j是整型。但在程序中将i、j定为COUNT类型,可以使人更一目了然地知道它们是用于计数的。

可以定义结构体类型:

typedef struct

{int month;

int day;

int year;

}DATE;

定义新类型名DATE,它代表上面定义的一个结构体类型。这时就可以用DATE定义变量:

DATE birthday;(不要写成struct DATE birthday;)

DATE *p;(p为指向此结构体类型数据的指针)

综上所述,结合本题可知,T是所定义的新的类型名,它代表上面定义的一个结构体类型。这时就可以用T定义变量。

36. 有以下说明和定义语句

struct student

{ int age; char num[8];};

struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};

struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是______。


A)(p++)->num

B)p->num

C)(*p).num

D)stu[3].age

【答案】D。

【解析】本题考的是结构体变量的引用。

引用形式有以下三种:①结构体变量. 成员名;②(*p).成员名;③p→成员名。所以A,B,C答案都是正确的。

37. 若有以下说明和定义

union dt

{int a;char b;double c;} data;

以下叙述中错误的是______。

A)data的每个成员起始地址都相同

B)变量data所占的内存字节数与成员c所占字节数相等

C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000

D)data可以作为函数的实参

【答案】C。

【解析】本题考查的是共用体。

union是表示共用体的关键字,说明其内的成员a,b,c共占用同一个内存空间,所以data的每个成员起始地址都相同;共用体变量所占的内存长度等于最长的成员的长度,故变量data所占的内存字节数与成员c所占字节数相等;但由于各成员变量的类型不一致,所以它们的存储方式也不相同,整型占用2个字节的存储空间,double型占用8个字节的存储空间;另外data可以作为函数的实参,此时data作为一个地址进行地址传送;执行"data.a=5;printf("%f\n",data.c);"系统不能自动将整型变量转换为浮点型值,printf函数只是将内存中的数据以不同的类型输出,而不能将内存中的整型数据自动转换为等值的浮点数,故C是错误的。

38. 有以下结构体说明和变量定义,如图所示:

struct node

{int data; struct node *next;} *p,*q,*r;

现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的语句是______。

A)p->next=q->next;

B)p->next=p->next->next;

C)p->next=r;

D)p=q->next;

【答案】D。


【解析】本题考查的是链表。

本题定义了结构体类型的指针变量p,q,r,并各自有两个成员变量data和next,data用于存放数据,next用于存放下一个结点的地址,所以,要想将q所指结点从链表中删除,同时保持链表的连续,必需使p结点的next指向r,在四个选项中,只有选项D不能做到。

bbs.99jianzhu.com内容:建筑图纸、PDF/word 流程,表格,案例,最新,施工方案、工程书籍、建筑论文、合同表格、标准规范、CAD图纸等内容。


TOP最近更新内容

    江苏省盱眙县都梁中学高中数学第2章平面向
    绿豆蛋花是怎样制作及具有什么样的功效?
  • 上一篇:施工现场临时厕所保洁制度
  • 下一篇:HACTL_Superterminal__Foster_Partners.pdf