结构体(5)

 

39. 以下对结构体类型变量td的定义中,错误的是______。

A)typedef struct aa

{ int n;

float m;

}AA;

AA td;

B)struct aa

{ int n;

float m;

}td;

struct aa td;

C)struct

{ int n;

float m;

}aa;

struct aa td;

D)struct

{ int n;

float m;

}td;

【答案】C。

【解析】本题考查的是结构体。

选项A中typedef的作用是声明一个新的类型名AA代替已有的结构体类型名struct aa,然后用AA定义了结构体类型的变量td;

选项B直接用结构体类型名struct aa定义了结构体类型的变量td;

选项C中的aa本身就为结构体变量名,所以不能再用它来定义结构体变量,故此种定义方法是错误的。

选项D中省去了结构体名,直接将td定义成了结构体变量。

40. 若程序中有以下的说明和定义:

struct abc

{ int x;char y; }

struct abc s1,s2;

则会发生的情况是______。


A)编译时错

B)程序将顺序编译、连接、执行

C)能顺序通过编译、连接、但不能执行

D)能顺序通过编译、但连接出错

【答案】A。

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

按题目给出的定义编译时会出现以下错误:"Too many type in declaration in funciton main",是因为右花括号后面缺少了一个分号。

41. 若有下面的说明和定义,则sizeof(struct aa)的值是______。

struct aa

{ int r1;double r2;float r3;

union uu{ char u1[5];

long u2[2];

}ua;

}maya;

A)30 B)29 C)24 D)22

【答案】D。

【解析】本题的考查点是结构体的长度。

sizeof(x)为运算符,它运算的结果是x型的数据结构占用的内存字节数,题目中定义了一个结构体aa,它的长度为其中数据成员所占内存的总和。

int型的变量需要2个字节;double型的变量需要8个字节;float型的变量需要4个字节;题目中结构体aa包含了一个共用体uu,而共用体变量在内存中所占的长度等于最长的成员的长度,而char型的变量需要1个字节,char u1[5]即需要5个字节,long型的变量需要4个字节,long u2[2]即需要8个字节,所以共用体uu需要8个字节的存储空间;因此,sizeof(struct aa)的值应为2+8+4+8=22个字节。

42. 以下程序的输出结果是______。

main( )

{ union { char i[2];

int k;

} r;

r.i[0]=2; r.i[1]=0;

printf("%d\n",r.k);

}

A)2 B)1 C)0 D)不确定

【答案】A。

【解析】本题的考查点是共用体类型数据的特点。

根据共用体的定义可知:共用体r的成员k和成员i[2]是共用同一段内存空间,所以,当程序给r.i[0]赋值后,


实际上,共用体成员k的值也确定了,为2。所以打印输出的结果应当为2。

43. 设有以下定义和语句,则输出的结果是______。(用small模式编译,指针变量占2个字节)

struct date

{ long *cat;

struct date * next;

double dog;

} too;

printf("%d",sizeof(too));

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

【答案】D。

【解析】本题的考查点是计算结构体的长度。

结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。double占8个字节,指针变量占2个字节,2+2+8=12,所以,输出结果是12。

44. 以下对结构体类型变量的定义中,不正确的是______。

①typedef struct aa

{

int n;

float m;

}AA;

AA td1;

②#define AA struct aa

AA{

int n;

float m;

}td1;

③struct

{

int n; float m;

}aa;

struct aa td1;

④struct

{

int n;

float m;

}td1;


A)① B)② C)③ D)④

【答案】C。

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

在选项C中,aa是一个结构体变量,而不是结构体名,所以struct aa td1;是非法的。

45. 有如下定义

struct person{char name[9]; int age;}; struct person class[10] = { "John",17, "Paul",19, "Mary",18, "Adam",16,};

根据上述定义,能输出字母M的语句是______。

A)printf("%c\n",class[3].name[0]);

B)printf("%c\n",class[3].name[1]);

C)printf("%c\n",class[2].name[1]);

D)printf("%c\n",class[2].name[0]);

【答案】D。

【解析】选项A将输出A;选项B将输出d;选项C将输出a;选项D将输出M。

46. 以下对结构体类型变量的定义中,不正确的是______。

A)typedef struct aa{int n;float m;}AA;

AA td1;

B)#define AA struct aa

AA{int n;float m;}td1;

C)struct{int n;float m;}aa;

struct aa td1;

D)struct{int n;float m;}td1;

【答案】C。

【解析】在选项C中,aa是一个结构体变量,而不是结构体名,所以struct aa td1;是非法的。

47. 若已建立如下图所示的单向链表结构:

p

data next ↓

┌─┬─┐ ┌─┬─┐ ┌─┬─┐

head →│ │ ┼→?→│E │ ┼→ │F │\0│

└─┴─┘ └─┴─┘ └─┴─┘

┌─┬─┐

s →│G │ │


└─┴─┘

在该链表结构中,指针p、s 分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是______。

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

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

C)s->next = NULL; p = p->next; p->next = s;

D)p = (*p).next; (*s).next = (*p).next; (*p).next = s;

【答案】A。

【解析】在选项A中:p = p->next; s->next = p; p->next = s;s的确已插到了链表的末尾,但它的next却并没有为NULL,而是指向了它的直接前趋p,这样它就不是一个单向链表(单向链表最后一个结点的next指针一定是一个NULL)。

48. 下面程序的输出是______。

typedef union

{long x[2];

int y[4];

char z[8];

}MYTYPE;

MYTYPE them;

main( )

{ printf("%d\n",sizeof (them) );}

A)32 B)16 C)8 D)24

【答案】C。

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

sizeof(x)为一个运算符,它运算的结果是x型的数据结构占用的内存字节数。题目中定义了一个共用体,共用体变量在内存中所占的长度等于最长的成员的长度,所以共用体MYTYPE需要8个字节的存储空间,由它定义的变量的长度当然也是8。

49. 以下各选项企图说明一种新的类型名,其中正确的是。

A)typedef v1 int;

B)typedef v2=int;

C)typedef int v3;

D)typedef v4: int

【答案】C。

【解析】本题考查C语言的类型定义。

C语言中可以使用typedef来重新定义已有的数据类型,相当于为数据类型取个别名。

50. 以下程序的输出结果是

struct HAR


{ int x,y;struct HAR *p;} h[2];

main()

{ h[0].x=1;h[0].y=2;

h[1].x=3;h[1].y=4;

h[0].p=&h[1];h[1].p=h;

printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);

}

A)12 B)23 C)14 D)32

【答案】D。

【解析】本题考查的是C语言中结构体与链表。

本题中是一个含有两个结点的循环链表。

C语言中结构体的定义为:

struct 结构体类型名

{

成员项表;

};

51. 以下程序的输出结果是

union myun

{ struct

{ int x,y,z;}u;

int k;

}a;

main(0)

{ a.u.x=4;a.u.y=5;a.u.z=6;

a.k=0;

printf("%d\n",a.u.x);

}

A)4 B)5 C)6 D)0

【答案】D。

【解析】本题主要考查C语言中构造类型,联合体与结构体。

结构体中的成员使用各自的存储区,而联合体中的成员使用共同的存储区。所以,当给联合体中的成员变量k赋值后,联合体中的成员u.x也被覆盖,因为它们占用的是同一存储单元。

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

struct test

{ int ml; char m2;float m3;

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


} myaa;

则sizeof(struct test)的值是______。

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

【答案】A。

【解析】一个整数占二个字节,字符型占一个字节,浮点型点四个字节,另外共用型变量ua占五个字节,共计十二个字节。

53. 以下程序的输出结果是

int x=3;

main()

{ int i;

for(i=1;i<x;i++) incre();

}

incre()

{ static int x=1;

x*=x+1;

printf(" %d",x);

}

A)3 3 B)2 2 C)2 6 D)2 5

【答案】C。

【解析】incre()中定义一个静态局部变量x,它的作用范围仅限于本函数中,而不会影响main()函数中的x值,所以main()中执行两次for循环,第一次调用incre()函数时,函数中x的初值是1,x*=x+1语句可以写成x=x*(x+1),结果x的值变成2,随后输出值2;在第二次调用incre()函数时,x的值继承了上次调用的运行结果,变成了2,执行了x*=x+1后,x的值是6,故又输出了数字6。

54. 若有以下定义:

struct link

{ int data;

struct link *next;

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


TOP最近更新内容

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