2011年计算机等级二级C语言章节习题及答案(11)
第11章 结构体与共用体
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。)
11.1 C语言结构体类型变量在程序运行期间
A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元
B)所有的成员一直驻留在内存中
C)只有最开始的成员驻留在内存中
D)部分成员驻留在内存中
正确答案: B
11.1 C语言结构体类型变量在程序运行期间
A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元
B)所有的成员一直驻留在内存中
C)只有最开始的成员驻留在内存中
D)部分成员驻留在内存中
正确答案: B
11.2 下列各数据类型不属于构造类型的是
A)枚举型
B)共用型
C)结构型
A)枚举型
B)共用型
C)结构型
D)数组型
正确答案: A
正确答案: A
11.3 当说明一个结构体变量时系统分配给它的内存是
A)各成员所需内存量的总和
B)结构中第一个成员所需内存量
C)成员中占内存量最大者所需的容量
D)结构中最后一个成员所需内存量
正确答案: A
A)各成员所需内存量的总和
B)结构中第一个成员所需内存量
C)成员中占内存量最大者所需的容量
D)结构中最后一个成员所需内存量
正确答案: A
11.4 设有以下说明语句
typedef struct
{ int n;
char ch[8];
} PER;
则下面叙述中正确的是
typedef struct
{ int n;
char ch[8];
} PER;
则下面叙述中正确的是
A)PER 是结构体变量名
B)PER是结构体类型名
C)typedef struct 是结构体类型
D)struct 是结构体类型名
正确答案: B
B)PER是结构体类型名
C)typedef struct 是结构体类型
D)struct 是结构体类型名
正确答案: B
11.5 已知有如下定义:struct a{char x; double y;}data,*t;,若有t=&data,则对data中的成员的正确引用是
A)(*t).data.x
B)(*t).x
C)t->data.x
D)t.data.x
正确答案: B
A)(*t).data.x
B)(*t).x
C)t->data.x
D)t.data.x
正确答案: B
11.6 以下程序的运行结果是
#include "stdio.h"
#include "stdio.h"
main()
{ struct date
{ int year,month,day; } today;
printf("%d\n",sizeof(struct date));
}
A)6
B)8
C)10
D)12
正确答案: A
{ struct date
{ int year,month,day; } today;
printf("%d\n",sizeof(struct date));
}
A)6
B)8
C)10
D)12
正确答案: A
11.7 设有如下定义:
struck sk
{ int a;
float b;
} data;
struck sk
{ int a;
float b;
} data;
int *p;
若要使P指向data中的a域,正确的赋值语句是
A)p=&a;
B)p=data.a;
C)p=&data.a;
D)*p=data.a;
正确答案: C
若要使P指向data中的a域,正确的赋值语句是
A)p=&a;
B)p=data.a;
C)p=&data.a;
D)*p=data.a;
正确答案: C
11.8 以下对结构体类型变量的定义中,不正确的是
A)typedef struct aa
{ int n;
float m;
} AA;
AA tdl;
B)#define AA struct aa
AA { int n;
A)typedef struct aa
{ int n;
float m;
} AA;
AA tdl;
B)#define AA struct aa
AA { int n;
float m;
} tdl;
C)struct
{ int n;
float m;
} aa;
struct aa tdl;
D)struct
{ int n;
float m;
} tdl;
正确答案: C
} tdl;
C)struct
{ int n;
float m;
} aa;
struct aa tdl;
D)struct
{ int n;
float m;
} tdl;
正确答案: C
11.9 若有下面的说明和定义
struct test
{ int ml; char m2; float m3;
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
} myaa;
则sizeof(struct test )的值是
A)12
B)16
C)14
D)9
正确答案: A
11.10 以下程序的输出是
struct st
{ int x; int *y;} *p;
int dt[4]={ 10,20,30,40
};
struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};
main()
struct st
{ int x; int *y;} *p;
int dt[4]={ 10,20,30,40
};
struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};
main()
{ p=aa;
printf("%d\n",++(p->x));
}
A)10
B)11
C)51
D)60
正确答案: C
printf("%d\n",++(p->x));
}
A)10
B)11
C)51
D)60
正确答案: C
11.11 有以下程序:
#include
union pw
{ int i;
char ch[2];
}a;
main()
#include
union pw
{ int i;
char ch[2];
}a;
main()
{ a.ch[0]=13;
a.ch[1]=0;
printf("%d\n",a.i);
}
程序的输出结果是
A)13
B)14
C)208
D)209
正确答案: A
a.ch[1]=0;
printf("%d\n",a.i);
}
程序的输出结果是
A)13
B)14
C)208
D)209
正确答案: A
11.12 已知学生记录描述为:
struct student
{ int no;
char name[20],sex;
struct
struct student
{ int no;
char name[20],sex;
struct
{ int year,month,day;
} birth;
};
struct student s;
设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是
A)year=1984;month=11;day=12;
B)s.year=h=11;s.day=12;
C)ar=h=11;birth.day=12;
D)ar=1984;h=11;s.birth.day=12;
正确答案: D
} birth;
};
struct student s;
设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是
A)year=1984;month=11;day=12;
B)s.year=h=11;s.day=12;
C)ar=h=11;birth.day=12;
D)ar=1984;h=11;s.birth.day=12;
正确答案: D
11.13 有如下定义
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);
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);
B)printf("%c\n",class[3].name[1]);
C)printf("%c\n",class[2].name[1]);
D)printf("%c\n",class[2].name[0]);
正确答案: B
C)printf("%c\n",class[2].name[1]);
D)printf("%c\n",class[2].name[0]);
正确答案: B
11.14 下列程序的输出结果是
struct abc
{ int a, b, c, s; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
t=s[0].a+s[1].b;
printf("%d\n",t);
}
A)5
B)6
C)7
struct abc
{ int a, b, c, s; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
t=s[0].a+s[1].b;
printf("%d\n",t);
}
A)5
B)6
C)7
D)8
正确答案: B
正确答案: B
11.15 若有下面的说明和定义,则sizeof(struct aa)的值是
struct aa
{ int r1; double r2; float r3;
union uu{char u1[5];long u2[2];}ua;
} mya;
A)30
B)29
C)24
D)22
正确答案: D
struct aa
{ int r1; double r2; float r3;
union uu{char u1[5];long u2[2];}ua;
} mya;
A)30
B)29
C)24
D)22
正确答案: D
11.16 有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是
struct node
{ char data;
struct node *next;
} a,b,*p=&a,*q=&b;
A)a.next=q;
B)p.next=&b;
C)p->next=&b;
D)(*p).next=q;
正确答案: B
{ char data;
struct node *next;
} a,b,*p=&a,*q=&b;
A)a.next=q;
B)p.next=&b;
C)p->next=&b;
D)(*p).next=q;
正确答案: B
11.17 下面程序的输出结果是
struct st
{ int x;
int *y;
} *p;
int dt[4]={10,20,30,40};
struct st
{ int x;
int *y;
} *p;
int dt[4]={10,20,30,40};
struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};
main()
{ p=aa;
printf("%d\n",++p->x);
printf("%d\n",(++p)->x);
printf("%d\n",++(*p->y));
}
A)10
B)50
C)51
D)60
20 60 60 70
20 21 21 31
正确答案: C
main()
{ p=aa;
printf("%d\n",++p->x);
printf("%d\n",(++p)->x);
printf("%d\n",++(*p->y));
}
A)10
B)50
C)51
D)60
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("%d\n",a.u.x);
}
A)4
B)5
C)6
D)0
正确答案: D
{ 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("%d\n",a.u.x);
}
A)4
B)5
C)6
D)0
正确答案: D
11.19 有以下程序
struct STU
{ char num[10]; float score[3];
};
main()
{ struct STU s[3]={{"20021",90,95,85}, {"20022",95,80,75},{ "20023",100,95,90},},*p=s;
int i; float sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
程序运行后的输出结果是
A)260.00
B)270.00
C)280.00
struct STU
{ char num[10]; float score[3];
};
main()
{ struct STU s[3]={{"20021",90,95,85}, {"20022",95,80,75},{ "20023",100,95,90},},*p=s;
int i; float sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
程序运行后的输出结果是
A)260.00
B)270.00
C)280.00
D)285.00
正确答案: B
正确答案: B
11.20 有以下程序
#include
struct NODE
{ int num; struct NODE *next; };
main()
{ struct NODE *p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p->num=10; q->num=20; r->num=30;
p->next=q;q->next=r;
printf("%d\n ",p->num+q->next->num);
}
#include
struct NODE
{ int num; struct NODE *next; };
main()
{ struct NODE *p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p->num=10; q->num=20; r->num=30;
p->next=q;q->next=r;
printf("%d\n ",p->num+q->next->num);
}
程序运行后的输出结果是
A)10
B)20
C)30
D)40
正确答案: D
A)10
B)20
C)30
D)40
正确答案: D
11.21 已知函数的原形如下,其中结构体a为已经定义过的结构,且有下列变量定义
struct a *f(int t1,int *t2,strcut a t3,struct a *t4)
struct a p,*p1;int i;
则正确的函数调用语句为
A)&p=f(10,&i,p,p1);
B)p1=f(i++,(int *)p1,p,&p);
C)p=f(i+1,&(i+2),*p,p);
D)f(i+1,&i,p,p);
正确答案: B
struct a *f(int t1,int *t2,strcut a t3,struct a *t4)
struct a p,*p1;int i;
则正确的函数调用语句为
A)&p=f(10,&i,p,p1);
B)p1=f(i++,(int *)p1,p,&p);
C)p=f(i+1,&(i+2),*p,p);
D)f(i+1,&i,p,p);
正确答案: B
11.22 下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非空
struct node{ float x;struct node *next;};
connect(struct node *t1, struct node *t2)
{ if(t1->next==NULL)t1->next=t2;
else connect(______ ,t2); }
要实现此功能则应该添入的选项是
A)t1.next
B)++t1.next
C)t1->next
D)++t1->next
正确答案: C
struct node{ float x;struct node *next;};
connect(struct node *t1, struct node *t2)
{ if(t1->next==NULL)t1->next=t2;
else connect(______ ,t2); }
要实现此功能则应该添入的选项是
A)t1.next
B)++t1.next
C)t1->next
D)++t1->next
正确答案: C
11.23 阅读如下程序段,则执行后程序的输出结果是
#include
main()
#include
main()
{ structa{int x; int y; } num[2]={{20,5},{6,7}};
printf("%d\n",num[0].x/num[0].y*num[1].y);
}
A)0
B)28
C)20
D)5
正确答案: B
printf("%d\n",num[0].x/num[0].y*num[1].y);
}
A)0
B)28
C)20
D)5
正确答案: B
11.24 阅读程序段,则执行后的输出结果为
#include "stdio.h"
typedef union{ long x[2];
int y[4];
char z[8];} atx;
typedef struct aa{ long x[2];
int y[4];
#include "stdio.h"
typedef union{ long x[2];
int y[4];
char z[8];} atx;
typedef struct aa{ long x[2];
int y[4];
char z[8]; } stx;
main()
{ printf("union=%d,struct aa=%d\n",sizeof(atx),sizeof(stx)); }
A)union=8,struct aa=8
B)union=8,struct aa=24
sizeof结构体大小C)union=24,struct aa=8
D)union=24,struct aa=24
正确答案: B
main()
{ printf("union=%d,struct aa=%d\n",sizeof(atx),sizeof(stx)); }
A)union=8,struct aa=8
B)union=8,struct aa=24
sizeof结构体大小C)union=24,struct aa=8
D)union=24,struct aa=24
正确答案: B
11.25 阅读下列程序段
#include "stdio.h"
typedef struct aa
{ int a;
struct aa *next;
} M;
void set(M *k,int i,int *
#include "stdio.h"
typedef struct aa
{ int a;
struct aa *next;
} M;
void set(M *k,int i,int *
B)
{ int j,d=0;
for(j=1;j<I;J++)
{ k[j-1].next=&k[j];
k[j-1].a=b[d++];
}
k[j].a=b[d];
}
main()
{ M k[5],*p;
int d[5]={23,34,45,56,67};
set(k,5,
D);
p=k+1;
printf("%d\n",table);
{ int j,d=0;
for(j=1;j<I;J++)
{ k[j-1].next=&k[j];
k[j-1].a=b[d++];
}
k[j].a=b[d];
}
main()
{ M k[5],*p;
int d[5]={23,34,45,56,67};
set(k,5,
D);
p=k+1;
printf("%d\n",table);
}
则下面的表达式在table处,能使程序执行后,打印输出数据45的是
A)p->next->a
B)++p->a
C)(*p).a++
D)p++->a
正确答案: A
则下面的表达式在table处,能使程序执行后,打印输出数据45的是
A)p->next->a
B)++p->a
C)(*p).a++
D)p++->a
正确答案: A
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论