当前位置:首页 > 第8单元 结构体与共用体
第8单元 结构体与共用体
一、单项选择题
1. 在C语言中,当定义一个结构体类型,并用其定义某变量后,系统分配给该变量的内存大小是 。
A. 各成员所需要内存空间的总和 B. 第一个成员所占内存空间 C. 成员中所有成员空间最大者 D. 成员中所有成员空间最小者 2. 以下对结构体变量成员引用非法的是 。
struct student
{ int age; int num; }stu1,*p;
A. stu1.num B. student.age C. p->num D.(*p).age; 3.下面程序的运行结果是 。
main()
{ struct abcd
{ int m ;
int n ; }cm[2]={1,2,3,7 };
printf(“%d\\n”,cm[0].n/cm[0].m*cm[1].m); } A. 0 B. 1 C. 3 D. 6
4. 若要利用下面的程序段对指针变量p指向一个存储整型变量的存储单元,则下面正确的选项是 。
int *p ; p= malloc(sizeof(int));
A. int B. int * C. (* int) D. (int *) 5.若有下面的定义和语句,执行完后正确的语句是 。
union data
{ int i; char c ; float f ; } a ; int n;
A. a=5 B. a={2,‘a’,1.2 } C. printf(“%d”,a); D. n=a;
6.在C语言中,若有如下的定义,则共用体变量m所占内存的字节是 。
union student
{ int a ; char b ; float c; } m ;
A.1 B. 2 C. 8 D. 11
7.在C语言中,若有如下的定义,当进行如下赋值后,m的结果是 。
union student
{ int a ; char b ; float c; } m ;
m.a=3; m.b=‘z’; m.c=3.7
A. 3 B. ‘z’ C. 3.7 D. 3+‘z’+3.7 8.设有如下定义,若使p1指向dt中的m域,正确的语句是 。
struct student
{ int m ; float n ; }dt ; struct *p1;
A. p1=&m; B. p1=dt.m; C. p1=&dt.m D. *p=&dt.m 9.若有下面的说明和定义,则sizeof(struct word)的值是 。
struct word
{ int a; char b; float c; union uu
{ float u; int v; }ua; }myaa; A. 13 B. 7 C. 9 D. 11 10.下面程序的输出结果是 。
union abcd
{ char i[2]; int k; }rat;
rat.i[0]=2; rat.i[1]=0; printf(“%d\\n”,r.k);
A. 2 B. 1 C. 0 D. 不确定 11.若有以下定义:
struct link
{ int data; struct link *next; }a,b,c,*p,*q;
设在一个链表中有a,b两个结点为相邻结点,指针p指向变量a ,另有新结点c,另q指向结点c。下面能够将结点c 插入到链表中a,b结点之间的语句是 。
A. a.next=c; c.next=b; B. p.next=q;q.next=p.next; C. p->next=&c; q->next=q->next; D. (*p).next=q;(*q).next=&b; 12.下面对结构体变量s定义合法的是( )。 A. typedef struct stu B. struct
{ double m; { float m; char n;} s; char n } s; C. struct s D. typedef stu { double a; { double a;
char b;} s; char b;} stu s; 13.设有如下定义,下面各输入语句中错误的是 。 struct ss
{ char name[10]; int age; char sex;}std[3],*p=std;
A.scanf(\.scanf(\ C.scanf(\.scanf(\ 14. C语言共用体变量在程序运行期间,满足 。
A.所有成员都不驻留内存 B.只有一个成员驻留内存 C.部分成员驻留内存 D.所有成员一直驻留内存 二、填空题
1.定义结构体的关键字是 ,定义共用体的关键字是 。 2.结构体和共用体的相同点是 ,
不同点是 , 结构体、共用体和数组构成之间的区别是 。
3.对于一个已经定义过的结构体,并且为该结构体定义了变量和指针变量,引用结构体变量的方法有: 。 4.若有以下定义和语句,则sizeof(a)的值是__ ___,而sizeof(b)的值是__ _。 struct tu
{ int m; char n; int y;}a; struct
{ float p, char q; struct tu r} b;
5.设有下面结构类型说明和变量定义,则变量a在内存所占字节数是 。如果将该结构改成共用体,结果为 。
struct stud
{ char num[6]; int s[4]; double ave; } a;
6.下面程序用来输出结构体变量ex所占存储单元的字节数,请填空。
struct st
{ char name[20]; double score; }; main()
{ struct st ex ; printf(\ 7.下面程序段用于构成一个简单的单向链表,请填空。
struct STRU
{ int x, y ;float rate; p; } a, b;
a.x=0; a.y=0; a.rate=0; a.p=&b;b.x=0; b.y=0; b.rate=0; b.p=NULL;
8. 下面定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。
struct node
{ int info; link; } 9.以下程序执行后输出结果是 。 main()
{ union { unsigned int n; unsigned char c; } u1; u1.c='A'; printf(\
10.变量root如图所示的存储结构,其中sp是指向字符串的指针域,next是指向该结构的指针域,data用以存放整型数。请填空,完成此结构的类型说明和变量root的定义。
sp next data root struct list
{ char *sp ; __ __; _ _; } root; 三、读下列程序,完成相应的题目
1. 下面的程序是有3个同学构成的结构体数组,对每个同学成绩求和,在程序的空白处添上适当的语句,使该程序完整。
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,j; float sum;
for(i=0; i<3; i++) {
for(j=0; j<3; j++)
sum=sum+p->score[j];
printf("%6.2f\\n",sum);
} }
2. 阅读下面的程序,写出程序结果
struct info
{ char a,b,c;}; main()
{ struct info s[2]={{‘a’,‘b’,‘c’},{‘d’,‘e’,‘f’}};int t;
t=(s[0].b-s[1].a)+(s[1].c-s[0].b); printf(\
该程序的运行结果是 3. 阅读下面的程序,写出程序结果
main()
{ union { char i[2]; int k; } stu;
stu.i[0]=2; stu.i[1]=0; printf(\
该程序的运行结果是 4. 阅读下面的程序,写出程序结果
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\ 该程序的运行结果是
共分享92篇相关文档