结构体和共用体(2)

2018-12-20 22:40

20 21 21 31

[分析、解答] 答案为C。本题的说明中定义了一个名为st的结构体。它由两个成员组成:一个是整型变量x;一个是指针变量。在定义的同时说明了一个指向这一结构类型的指针变量p.数组每个元素是一个含有两个成员的struct st型的结构,并赋有初值。在main函数中执行p=aa;语句后,p指向了数值的首地址,它们之间的关系如图所示:

. p aa[0].x 50 10 dt[0] . aa[0].y aa[1].x 60 20 dt[1] . aa[1].y aa[2].x 70 30 dt[2] . aa[2].y aa[3].x 80 40 dt[3] . aa[3].y

这里需要注意运算符的优先级,对于题目中涉及的运算符()、—>、++、*,其中括号最优先,其次是指向结构体成员运算符—>,下来是自增运算符++和指针运算符*,它们属于同级运算,其结合方向是“自右至左”。

参照上图可知,第一条printf语句的输出项++p?x是先找出p?(其值为50),再将其值自增1,取增值后的值,故输出51。

第二条printf语句的输出项为(++p)?x,它表示先将指针p自增1,指向aa数组的第二个元素aa[1],然后取其第一个成员aa[1].x的值。故输出为60。

第三次的输出项为++(*p?y)。此时p已指向aa[1],因此输出项等价于++(data[1]),先取出data[1]的值(20),再将其增1,故输出21。 由此可见,答案C正确。

(12). 设有以下语句:

struct student{int n;struct student *next;};

static struct student a[3]={5,&a[1],7,&a[2],9,'\\0'},*p; p=&a[0];

则表达式( )的值是6。

A.p++->n B.p->n++ C.(*p).n++ D.++p->n [分析、解答]:答案为 D。

(13). 下面程序的输出是( )。

main()

{ enum team{a,b=4,c,d=c+10};

printf(\}

A.0 1 2 3 B.0 4 0 10 C.0 4 5 15 D.1 4 5 15

[分析、解答] 答案为C。根据C语言的语法规定,一旦定义了一个枚举类型,编译系统将按顺序为每个枚举元素分配一个对应的序号,序号值从0开始,后续元素的序号顺序加1。此外,C语言也允许在定义枚举类型的同时人为地指定枚举元素的序号值,凡没有指定序号值的元素则在前一元素序号的基础上顺序加1。由此可知,题中第一个枚举元素a的序号值为0;第二个元素b的序号值为4;第三个元素c的序号值为5;第四个元素d的序号值为15。故本程序的输出结果应当是答案C。

(14). 下面程序的输出是( )。

main()

{ struct cmplx{int x;int y;} num[2]={1,3,2,7};

printf(\}

A.0 B.1 C.3 D.6

[分析、解答] 答案为D。题中定义了结构体类型数组num,程序中已给出:num[0].x的值是1,num[0].y的值是3,num[1].x的值是2.由于C语言中的运算符“/”和“*”优先级相同,且运算顺序从左至右,因此该程序应输出结果是6。 (15). 下面程序的输出是( )。

typedef union { long x[2];

int y[4]; char z[8];

} MYTYPE; MYTYPE them; main()

{ printf(\}

A.32 B.16 C.8 D.24 [分析、解答] 答案为C。此题参考知识难点解析1。

2. 填空题

(1). 有以下定义和语句,则sizeof(a)的值是【1】,而sizeof(a.share)的值是【2】。

struct date { int day; int month; int year; union

{ int share1; float share2; }share; } a;

[分析、解答] 答案为【1】10 【2】4

本题的知识点是考察结构体、共用体变量占内存大小。具体参考知识难点解析1 (2).若有以下说明和定义语句,则变量w在内存中所占字节数________。

union aa

{ float x,y; char c[6]; };

struct st

{ union aa v; float w[5]; double ave; } w;

[分析、解答] 答案为34。W的占内存大小sizeof(v)+sizeof(w[5])+sizeof(ave)= 6+4×5+8=34。

(3).有以下说明定义语句,可用a.day引用结构体成员day,请写出引用结构体成员a.day的其它两种形式【 1 】 【 2 】。

{ int day; char mouth; int year; } a,*b; b=&a;

[分析、解答] 答案为【1】(*b).day 【2】b->day 具体参考知识难点解析2。

(4).为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向该

结构的指针域,data用以存放整型数)请填空。

data next

struct link {char data;( 【 1 】 )}node;

[分析、解答] 答案为【1】struct link *next 本题的知识点是链表。

(5).变量root有如图所示的存储结构,其中sp是指向字符串的指针的指针域,nextp是

指向该结构的指针域,data用以存放整型数。请填空,完成此结构的类型说明和变量root的定义。

Sp data nextp

root

struct list {

char *sp; ( 【1】 ) ( 【2】 )

}root;

[分析、解答] 答案为【1】struct list *nextp 【2】int data 本题的知识点是链表。

(6).下列程序的执行结果为_______。

main() { union bt { int k; char c[2]; }a; a.k=-7;

printf(\}

[分析、解答] 答案为177771,177777

本题的知识点是共用体的各成员共用一段内存。

(7).若有以下的说明、定义和语句,则输出结果为_______(已知字母A的十进制数为65)。

main() { union un { int a; char c[2]; } w;

w.c[0]='A';w.c[1]='a'; printf(\}

[分析、解答] 答案为60501。

本题考察知识点还是共用体的各成员共用一段内存。W占2个字节的空间,第一个字节w.c[0]='A',即65,第二个字节w.c[1]='a',即97,整个2个字节的空间里分布的两进制数值是0110000101000001 ,八进制即60501。

(8). 程序运行的结果是________。

main()

{ union exam

{ struct

{ int x;

int y; } in; int a; int b; }em;

em.a=1;em.b=2;em.in.x=em.a*em.b;em.in.y=em.a+em.b; printf(\}

[分析、解答] 答案为4,8。

(9).下面程序的输出结果是________。

struct em { int a; int *b; }

main()

{ struct em s[4],*p;int n=1,i;

for(i=0;i<4;i++) { s[i].a=n;

s[i].b=&s[i].a; n=n+2; }

p=&s[0];

printf(\}

[分析、解答] 答案为2 5

(10).下面程序的输出结果是________。

#include union un { int i;

char ch[2]; } a; main()

{ a.ch[0]=13; a.ch[1]=0;

printf(\}

[分析、解答] 答案为13

(11). 若有以下的说明和语句,已知int类型占两个字节,则以下的输出结果为_______。

main()

{ struct st { char a[10]; int b; double c; };

printf(\}

[分析、解答] 答案为20。

本题的知识点是考察结构体、共用体变量占内存大小。具体参考知识难点解析1

(12). 若有以下的说明和语句,已知int类型占两个字节,则以下的输出结果为________。

main() { union un { int i; double y;


结构体和共用体(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《现代教育技术》201603考核

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: