第11 章结构与联合一、单选题1 下列关于结构的说法错误的是:A:结构是由用户自定义的一种数据类型B:结构中可设定若干个不同数据类型的成员C:结构中成员的数据类型可以是另一个已定义的结构D:在定义结构时,可以为成员设置默认值答案:D2 以下关于结构体的叙述中,错误的是:A:结构体是一种可由用户构造的数据类型B:结构体中的成员可以具有不同的数据类型C:结构体中的成员不可以与结构体变量同名D:结构体中的成员可以是指向自身结构的指针类型答案:C3 以下结构体类型说明和变量定义中,正确的是:A:struct SS{ char flag;float x;}struct SS a,b;B:struct{ char flag;float x;}SS;SS a,b;C:struct ss{ char flag;float x;};D:typedef{ char flag;float x;}SS;SS a,b;答案:C4 以下对结构体类型变量st的定义中,不正确的是:A:struct{ char c;int a;}st;B:struct{ char c;int a;}TT;struct TT st;C:typedef struct{ char c;int a;}TT;TT stD:#define TT structTT{ char c;int a;}st;答案:B5 设有以下说明语句:struct stu{ int a;float b;}stutype;则下面的叙述不正确的是:A:struct是结构体类型的关键字B:struct stu是用户定义的结构体类型名C:stutype是用户定义的结构体类型名D:a和b都是结构体成员名答案:C6 在16位IBM-PC机上使用C语言时,若有如下定义:struct data{ int i;char ch;double f;}b;则结构变量b占用内存的字节数是:A:1B:2C:8D: 11答案:D7 以下程序的运行结果是:#include "stdio.h"main( ){ struct date{ int year;int month;int day:}today;printf("%d\n",sizeof(struct date) );}A:6B:8C:10D: 12答案:A8 下面程序的运行结果是:main( ){ struct cmplx{ int x;int y;}c[2]={1,3,2,7};printf("%d",c[0].y/c[0].x*c[1].x);}A:0B:1C:3D:6答案:D9 若有以下说明和语句,则对pup中sex域的正确引用方式是:struct pupil{ char name[20];int sex;}pup,*p;p=&pup;A:p.pup.sexB:p->pup.sexC:(*p).pup.sexD:(*p).sex答案:D10 已知职工记录描述为struct workers{ int no;char name[20];char sex;struct{ int day;int month;int year;}birth;};struct workers w;设变量w中的“生日”应是“1993年10月25日”,下列对“生日”的正确赋值方式是:A:day=25;month=10;year=1993;B:w.dat=25;w.month=10;w.year=1993;C:w.birth.day=25;w.birth.month=10;w.birth.year=1993;D:birth.day=25;birth.month=10;birth.year=1993;答案:C11 当定义一个结构体变量时系统分配给它的内存是:A:各成员所需内存量的总和B:成员中占内存量最大者所需的容量C:结构中第一个成员所需内存量D:结构中最后一个成员所需内存量答案:A12 以下定义结构体类型的变量st1,其中不正确的是: A:typedef struct student{ int num;int age;}STD;STD st1;B:struct student{ int num;int age;}st1;C:struct{ int num;int age;}st1;D:truct student{ int num;int age;}struct student st1;答案:D13 设有以下定义:struct sk{ int a;float b;} data,*p;若要使p指向data中的a域,正确的赋值语句是:A:p=(struct sk *)&data.a;B:p=(struct sk *)data.a;C:p=&data.aD:*p=data.a答案:A14 若有以下的定义、说明和语句,则值为101的表达式是:struct wc{ int a; int *b;}*p;int x0[]={11,12},x1[]={31,32};static struct wc x[2]={100,x0,300,x1};p=x;A:*p->bB:p->aC:++p->aD:(p++)->a答案:C15 根据下面的定义,能打印出字母M的语句是:struct person{ char name[9];int age;};struct person chass[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};A:printf("%c",class[3].name);B:printf("%c",class[3].name[1]);C:printf("%c",class[2].name[1]);D:printf("%c",class[2].name[0]);答案:D16 若有以下定义:struct person{ int id;char name[10]:}per,*s=&per;则以下对结构体成员的引用中错误的是:A:B:s->name[0]C:(*per).name[8]D:(*s).id答案:C17 若有以下说明和语句,则下面表达式中值为1002的是()struct student{ int age;int num;};struct student stu[3]={ {1001,20},{1002,19},{1003,21} };struct student *p;p=stu;A:(p++)->numB:(p++)->ageC:(*p).numD:(*++p).age答案:D18 当说明一个共用体变量时,系统分配给它的内存是()A:各成员所需内存量的总和B:共用体中第一个成员所需内存量C:成员中占内存量最大者所需的内存量D:共用体中最后一个成员所需内存量答案:C19 以下对C语言中共用体类型数据的叙述正确的是()A:可以对共用体变量名直接赋值B:一个共用体变量中可以同时存放所有成员C:一个共用体变量中不能同时存放其所有成员D:共用体类型定义中不能出现结构体类型的成员答案:C20 若有以下定义和语句:union data{ int i;char c;float f;}a;则以下语句正确的是:A:a=5B:printf("%d\n",a.i);C:a={2,'a',1.2};D:n=a答案:B二、多选题1.若有以下说明和语句:struct student{ int age; int num;}std,*p;p=&std;则以下对结构体变量std中成员age的引用方式正确的是( )A.std.age B.p->age C.(*p).age D.*p.age 答案:ABC2.设有以下说明语句struct stu{ int a;float b; }stutype;则以下叙述正确的是( )A.struct 是结构体类型的关键字 B.struct stu 是用户定义的结构体类型C.stutype 是用户定义的结构体类型名 D.a 和 b 都是结构体成员名答案:ABD3.以下说法正确的是( )A.结构体变量的名称为该结构体变量的存储首地址B.结构体变量占用空间的大小为各成员项占用空间大小之和C.结构体类型定义时不分配存储空间D.同一结构体类型的不同变量的同名成员项数据类型相同答案:CD4.有以下语句:struct lie{ int a, float b;}st;则在下面叙述中,正确的是( )A.struct是结构类型的关键字B.struct lie是用户定义的结构类型C.st是用户定义的结构类型名D.a和b都是结构成员名答案:ABD5.在说明一个共用体变量时,系统分配给他的存储空间,描述不正确的是( )A.该共用体中第一个成员所需存储空间B.该共用体中最后一个成员所需存储空间C.该共用体中占用最大存储空间的成员所需存储空间D.该共用体中所有成员所需存储空间的总和答案:ABD6.若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中正确的是A.data的每个成员起始地址都相同B.变量data所占的内存字节数与成员c所占字节数相等C.程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000D.data可以作为函数的实参答案:ABD7.设有如下说明typedef struct ST{long a;int b;char c[2];}NEW;则下面叙述中不正确的是A.以上的说明形式非法B.ST是一个结构体类型C.NEW是一个结构体类型D.NEW是一个结构体变量答案:AD8.关于枚举类型,描述正确的是()A.枚举类型变量的取值范围只限于类型定义时所列出的值。
B.枚举值可以按整型输出其序号值。
C.枚举值可以进行加(减)一个整数n的运算,用以得到其前(后)第n个元素的值。
D.枚举值可以按定义时的序号进行关系比较。
答案:ABD三、判断题1.结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员,而结构的所有成员都存在。
()答案:正确2.对于联合的不同成员赋值,相会对其他成员重写,原来成员的值就不存在了而对于结构的不同成员赋值是互不影响的。