2011年计算机等级二级C语言章节习题及答案(11
11 结构体与共用体
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。)
11.1 C语言结构体类型变量在程序运行期间
ATC环境在内存中仅仅开辟一个存放结构体变量地址的单元
B)所有的成员一直驻留在内存中
C)只有最开始的成员驻留在内存中
D)部分成员驻留在内存中
正确答案: B
11.2 下列各数据类型不属于构造类型的是
A)枚举型
B)共用型
C)结构型
D)数组型
正确答案: A
11.3 当说明一个结构体变量时系统分配给它的内存是
A)各成员所需内存量的总和
B)结构中第一个成员所需内存量
C)成员中占内存量最大者所需的容量
D)结构中最后一个成员所需内存量
正确答案: A
11.4 设有以下说明语句
typedef struct
{ int n;
char ch8;
} PER;
则下面叙述中正确的是
APER 是结构体变量名
BPER是结构体类型名
Ctypedef struct 是结构体类型
Dstruct 是结构体类型名
正确答案: B
11.5 已知有如下定义:struct a{char x; double y;}data,*t;,若有t=&data,则对data中的成员的正确引用是
A)(*t.data.x
B)(*t.x
Ct->data.x
Dt.data.x
正确答案: B
11.6 以下程序的运行结果是
#include "stdio.h"
main()
{ struct date
{ int year,month,day; } today;
printf"%dn",sizeofstruct date));
}
A6
B8
C10
D12
正确答案: A
11.7 设有如下定义:
struck sk
{ int a;
float b;
} data;
int *p;
若要使P指向data中的a域,正确的赋值语句是
Ap=&a;
Bp=data.a;
Cp=&data.a;
D*p=data.a;
正确答案: C
11.8 以下对结构体类型变量的定义中,不正确的是
Atypedef struct aa
{ int n;
float m;
} AA;
AA tdl;
B#define AA struct aa
AA { int n;
float m;
} tdl;
Cstruct
{ int n;
float m;
} aa;
struct aa tdl;
Dstruct
{ int n;
float m;
} tdl;
正确答案: C
11.9 若有下面的说明和定义
struct test
{ int ml; char m2; float m3;
union uu { char ul5; int u22;} ua;
} myaa;
sizeofstruct test )的值是
A12
B16
C14
D9
正确答案: A
11.10 以下程序的输出是
struct st
{ int x; int *y;} *p;
int dt4={ 10,20,30,40
};
struct st aa4={ 50,&dt0,60,&dt0,60,&dt0,60,&dt0};
main()
{ p=aa;
printf"%dn",++p->x));
}
A10
B11
C51
D60
正确答案: C
11.11 有以下程序:
#include
union pw
{ int i;
char ch2;
}a;
main()
{ a.ch0=13;
a.ch1=0;
printf"%dn",a.i;
}
程序的输出结果是
A13
B14
C208
D209
正确答案: A
11.12 已知学生记录描述为:
struct student
{ int no;
char name20,sex;
struct
{ int year,month,day;
} birth;
};
struct student s;
设变量s中的生日“19841112,对“birth”正确赋值的程序段是
Ayear=1984;month=11;day=12;
Bs.year=h=11;s.day=12;
Car=h=11;birth.day=12;
Dar=1984;h=11;s.birth.day=12;
正确答案: D
11.13 有如下定义
struct person{char name9;int age;};
struct person class10={"John",17,"paul",19,"Mary",18,"Adam",16,};
根据上述定义,能输出字母M的语句是
Aprintf"%cn",class3.name; 
Bprintf"%cn",class3.name1]);
Cprintf"%cn",class2.name1]);
Dprintf"%cn",class2.name0]);
正确答案: B
11.14 下列程序的输出结果是
struct abc
{ int a, b, c, s; };
main()
{ struct abc s2={{1,2,3},{4,5,6}}; int t;
t=s0.a+s1.b;
printf"%dn",t;
}
A5
B6
C7
D8
正确答案: B
11.15 若有下面的说明和定义,则sizeofstruct aa)的值是
struct aa
{ int r1; double r2; float r3;
union uu{char u15;long u22;}ua;
} mya;
A30
B29
C24
D22
正确答案: D
11.16 有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是
struct node
{ char data;
struct node *next;
} a,b,*p=&a,*q=&b;
Aa.next=q;
Bp.next=&b;
Cp->next=&b;
D)(*p.next=q;
正确答案: B
11.17 下面程序的输出结果是
struct st
{ int x;
int *y;
} *p;
int dt4={10,20,30,40};
struct st aa4={50,&dt0,60,&dt1,70,&dt2,80,&dt3};
main()
{ p=aa;
printf"%dn",++p->x;
printf"%dn",++p->x;
printf"%dn",++*p->y));
}
A10
B50
C51
D60
20 60 60 70
20 21 21 31
正确答案: C
11.18 以下程序的输出结果是
union myun
{ struct
{ int x, y, z; } u;
int k;
} a;
main()
{ a.u.x=4; a.u.y=5; a.u.z=6;
a.k=0;
printf"%dn",a.u.x;
}
A4
B5
C6
D0
正确答案: D
11.19 有以下程序
struct STU
{ char num10; float score3;
};
main()
{ struct STU s3={{"20021",90,95,85}, {"20022",95,80,75},{ "20023",100,95,90},},*p=s;
int i; float sum=0;
fori=0;i<3;i++
sum=sum+p->scorei;
printf"%6.2fn",sum;
}
程序运行后的输出结果是
A260.00
B270.00
C280.00
D285.00
正确答案: B
11.20 有以下程序
#include
struct NODE
{ int num; struct NODE *next; };
main()
{ struct NODE *p,*q,*r;
p=struct NODE*mallocsizeofstruct NODE));
q=struct NODE*mallocsizeofstruct NODE));
r=struct NODE*mallocsizeofstruct NODE));
p->num=10; q->num=20; r->num=30;
p->next=q;q->next=r;
printf"%dn ",p->num+q->next->num;
}
程序运行后的输出结果是
A10
B20
C30
D40
正确答案: D
11.21 已知函数的原形如下,其中结构体a为已经定义过的结构,且有下列变量定义
struct a *fint t1,int *t2,strcut a t3,struct a *t4
struct a p,*p1;int i;
则正确的函数调用语句为
A&p=f10,&i,p,p1;
Bp1=fi++,int *p1,p,&p;
Cp=fi+1,&i+2,*p,p;
Dfi+1,&i,p,p;
正确答案: B
11.22 下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非空
struct node{ float x;struct node *next;};
connectstruct node *t1, struct node *t2
{ ift1->next==NULLt1->next=t2;
else connect______ ,t2; }
要实现此功能则应该添入的选项是
At1.next
B++t1.next
Ct1->next
D++t1->next
正确答案: C
11.23 阅读如下程序段,则执行后程序的输出结果是
#include
main()
{ structa{int x; int y; } num2={{20,5},{6,7}};
printf"%dn",num0.x/num0.y*num1.y;
}
A0
B28
C20
D5
正确答案: B
11.24 阅读程序段,则执行后的输出结果为
#include "stdio.h"
typedef union{ long x2;
int y4;
char z8;} atx;
typedef struct aa{ long x2;
int y4;
char z8; } stx;
main()
{ printf"union=%d,struct aa=%dn",sizeofatx,sizeofstx)); }
Aunion=8,struct aa=8
Bunion=8,struct aa=24
sizeof结构体大小Cunion=24,struct aa=8
Dunion=24,struct aa=24
正确答案: B
11.25 阅读下列程序段
#include "stdio.h"
typedef struct aa
{ int a;
struct aa *next;
} M;
void setM *k,int i,int *
B
{ int j,d=0;
forj=1;j<I;J++
{ kj-1.next=&kj;
kj-1.a=bd++;
}
kj.a=bd;
}
main()
{ M k5,*p;
int d5={23,34,45,56,67};
setk,5,
D;
p=k+1;
printf"%dn",table;
}
则下面的表达式在table处,能使程序执行后,打印输出数据45的是
Ap->next->a
B++p->a
C)(*p.a++
Dp++->a
正确答案: A

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。