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