九、结构体与共用体(一) 选择题1、C语言结构体类型变量在程序执行期间_________。
A.所有成员一直驻留在内存中B.只有一个成员驻留在内存中C.部分成员驻留在内存中D.没有成员驻留在内存中2、下面程序的运行结果是_________。
main(){struct cmplx{ int x;int y;}cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}A.0 B.1 C.3 D.63、设有如下定义:struct sk{int n;float x;}data ,*p;若要使p指向data中的n域,正确的赋值语句是_________。
A.p=&data.n;B.*p=data.n;C.p=(struct sk *)&data.n;D.p=(struct sk *)data.n4、以下对结构体变量stu1中成员age的非法引用是_________。
struct student{int age;int num;}stu1,*p;p=&stu1;A.stu1.ageB.student.ageC.p->ageD.(*p).age5、下面对typedef的叙述中不正确的是_________。
A.用typedef可以定义各种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植6、以下scanf函数调用语句中对结构体变量成员的不正确引用是_________。
struct pupil{char name[20];int age;int sex;}pup[5],*p;p=pup;A.scanf("%s",pup[0].name);B.scanf("%d",&pup[0].age);C.scanf("%d",&(p->sex));D.scanf("%d",p->age);7、若有以下说明和定义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可以作为函数的实参8、有一下语句struct s { int i1; struct s,*i2};static struct s a[3]={1,&a[1],2,&a[2],3,&a[3]},*ptr;ptr=&a[1];则一下表达式结果为3的是_________.A.ptr->i1++B. ptr++->i1C.*ptr->i1D. ++ptr->i19、C语言结构体类型变量在程序执行期间_________。
A.所有成员一只驻留在内存中B.只有一个成员驻留在内存中C.部分成员驻留在内存中D.没有成员驻留在内存中10、若定义了如下共用体变量x,则x所占用的内存字节数为_________。
union data{int i;char ch;double f;}x;A.7B.11C. 8D. 1011、在下面的叙述中,不正确的是_________。
A.枚举变量只能取对应枚举类型的枚举元素表中的元素。
B.可以在定义枚举类型时对枚举元素进行初始化。
C.枚举元素表中的元素有先后次序,可以进行比较。
D.枚举元素的值可以是整数或字符串。
12、设有类型说明"enum color {red,yellow=4,white,black};",则执行语句"printf("%d",white);"后的输出是_________。
A.5B.2C.1D.013、设有说明:struct{char name[15],sex;int age;float score;}stu,*p=&stu;以下不能正确输入结构体成员值的是_________。
A.scanf("%c",&p->sex);B.scanf("%s",);C.scanf("%d",&stu.age);D.scanf("%f",p->score);14、设有说明:union data{int i;float f;struct{int x;char y;}s;double d;}a;在16位PC环境下,int类型的整数占用两个字节,则变量a在内存中所占字节数为_________。
A.8B.17C.9D.1515、设有说明:struct {int x,y;}s[2]={{1,2},{3,4}}, *p=s,*q=s;则表达式++p->x和表达式(++q)->x的值分别为_________。
A.1 1B.1 3C.2 3D.3 316、以下说法中正确的是_________。
A.一个结构只能包含一种数据类型B.不同结构中的成员不能有相同的成员名C.两个结构变量不可以进行比较D.关键字typedef用于定义新的数据类型17、设有以下说明语句,则值为210的表达式是_________。
struct s{int a;int *b;};int x0[]={110,120},x1[]={210,220};struct s x[]={{100},{200}},*p=x;x[0].b=x0;x[1].b=x1;A.*p->bB.(++p)->aC.*(p++)->bD.*(++p)->b18、当说明一个结构体变量时,系统分配给它的内存是_________。
A.各成员所需内存量的总和。
B.结构体中第一个成员所需内存量。
C.成员中占内存量最大者所需的容量。
D.结构体中最后一个成员所需内存量。
19、把一些属于不同类型的数据作为一个整体来处理时,常用_________。
A. 简单变量B.数组类型数据C. 指针类型数据D. 结构体类型数据20、在说明一个联合体变量时,系统分配给它的存储空间是_________。
A.该联合体中第一个成员所需存储空间。
B.该联合体中占用最大存储空间的成员所需存储空间。
C.该联合体中最后一个成员所需存储空间。
D.该联合体中所有成员所需存储空间的总和。
21、在下面的叙述中,不正确的是_________。
A.枚举变量只能取对应枚举类型的枚举元素表中的元素。
B.可以在定义枚举类型时对枚举元素进行初始化。
C.枚举元素表中的元素有先后次序,可以进行比较。
D.枚举元素的值可以是整数或字符串。
22、下面程序的输出结果是_________。
main(){struct cmplx{int x;int y;}cnum[2]={1,3,2,7};printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x);} A.0 B.3C.1D.623、若有如下说明:struct xx{int a;int b;};则_________是正确的应用或定义。
A.xx.a=5B.xx c;c.x=5C.struct c;c.x=5D.struct xx c={5}24、下面程序的输出结果是_________。
main(){struct cmplx{int x;int y;}cnum[2]={1,3,2,7};printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x);} A.0 B.3C.1D.6(二)填空题1、以下程序的运行结果是_________.struct n{int x;char c;};main(){struct n a={10,'x'};func(a);printf("%d,%c",a.x,a.c);}func(struct n b){b.x=20;b.c='y';}2、若有定义:struct num{int a;int b;float f;}n={1,3,5.0};struct num *pn=&n;则表达式pn->b/n.a*++pn->b的值是_________,表达式(*pn).a+pn->f的值是_________ 3、以下程序的运行结果是_________.struct ks{int a;int *b;}s[4],*p;main(){int n=1;printf("\n");for(i=0;i<4;i++){s[i].a=n;s[i].b=&s[i].a;n=n+2;}p=&s[0];p++;printf("%d,%d\n",(++p)->a,(p++)->a);}4、结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。
请在_________内填入正确内容。
stati struct man{char name[20];int age;}person[]={"li=ming",18,"wang-hua",19,"zhang-ping",20};main(){struct man *p,*q;int old=0p=person;for( ;p_________;p++)if(old<p->age){q=p; _________;}printf("%s %d",_________);}5、以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表不带头结点)。
请在_________内填入正确内容。
struct link{char data ;struct link *next;};....struct link *p,*first;int c=0;p=first;while(_________){_________;p=_________;}6、以下程序运行后的输出结果是_________ 。
struct NODE{int k;struct NODE *link;};main(){ struct NODE m[5],*p=m,*q=m+4;int i=0;while(p!=q){p->k=++i;p++;q->k=i++;q--;}q->k=i;for(i=0;i<5;i++)printf("%d",m[i].k);printf("\n");}7、下面的程序输入学生的姓名和成绩,然后输出,请填空。