第十章 结构体与共用体
1.说明一个结构体变量时系统分配给它的内存是
A) 各成员所需要内存量的总和
B) 结构体中第一个成员所需内存量
C) 成员中占内存量最大者所需的容量
D) 结构中最后一个成员所需内存量
2.C语言结构体类型变量在程序执行期间
A) 所有成员一直驻留在内存中
B) 只有一个成员驻留在内存中
C) 部分成员驻留在在内存中
D) 没有成员驻留在内存中
3.设有以下说明语句
struct stu { int a ; float b ; } stutype ;
则下面的叙述不正确的是
A) struct 是结构体类型的关键字
B) struct stu 是用户定义的结构体类型
C) stutype 是用户定义的结构体类型名
D) a和b都是结构体成员名
4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是 【 】 。
struct stud { char num[6]; int s[4]; double ave; } a,*p;
5.程序中有下面的说明和定义
struct abc { int x;char y;}
struct abc s1,s2;
则会发生的情况是
A) 编译出错
B) 程序将顺利编译、连接、执行
C) 能顺利通过编译、连接、但不能执行
D) 能顺利通过编译、但连接出错
6.有如下定义
struct person { char name[9]; int age;};
struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam", 16};
根据上述定义,能输出字母M的语句是
A) prinft(" %c\n",class[3].name);
B) printf(" %c\n",class[3].name[1]);
C) prinft(" %c\n",class[2].name[1]);
D) printf(" %c\n",class[2].name[0]);
7.下面程序的输出是
A)0 B)1 C)3 D)6
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);}
8.下列程序的输出结果是
A)5 B)6 C)7 D)8
struct abc { int a, b, c; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}};
int t;
t=s[0].a s[1].b;
printf("%d \n",t);}
9.有以下程序
struct stu
{ int num;char name[10]; int age;};
void fun(struct stu *p)
{ printf("%s\n" ,(*p).name); }
main()
{ struct stu students[3]={{9801,"Zhang",20} ,{9802,"Wang", 19} , {9803,"Zhao",18} };
fun(students 2); }
输出结果是
A)Zhang B)Zhao C)Wang D)18
10.设有如下定义:
struct sk {int a ;float b ;}data ,*p ;
若有p=&data ; ,则对data中的a域的正确引用是
A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a
11.下面程序的输出结果为
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
12.为了建立如图所示的存储结构( 即每个结点含两个域, data 是数据域,next是指向结点的指针域,)请填空。
data next
|
|
struct link { char data;【 】}node;
13.有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是
A)a.next=q; B)p.next=&b;
C)p->next=&b; D)(*p).next=q;
struct node { char data; struct node *next;} a,b,*p=&a,*q=&b;
data next data next
┌──┬──┐ ┌──┬──┐
a │ 5 │ │ b│ 9 │ 0 │
└──┴──┘ └──┴──┘
↑p ↑q
14.当说明一个共用体变量时系统分配给它的内存是
A) 各成员所需要内存量的总和
B) 共用体中第一个成员所需内存量
C) 成员中占内存量最大者所需的容量
D) 共用体中最后一个成员所需内存量
15.以下对C语言中共用体类型数据的叙述正确的是
A) 可以对共用体变量名直接赋值
B) 一个共用体变量中可以同时存放其所有成员
C) 一个共用体变量中不可以同时存放其所有成员
D) 共用体类型定义中不能出现结构体类型的成员
16.C语言共用体类型变量在程序运行期间
A) 所有成员一直驻留在内存中
B) 只有一个成员驻留在内存中
C) 部分成员驻留在在内存中
D) 没有成员驻留在内存中
17.字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是
#include〈stdio.h〉
main( )
{ union { int i[2];long k; char c[4];}r,*s=&r;
s->i[0]=0x39; s->i[1]=0x38;
printf("%c\n",s->c[0]) }
A)39 B)9 C)38 D)8
18.若有以下说明和定义语句,则变量w在内存中所占的字节数是【 】。
union aa { float x,y ; char c[6]; };
struct st { union aa v;float b[5];double ave;} w;
19.设有以下定义:
#include “alloc.h”
typedef union { long i ;int k[5] ;char c ;}DATE ;
struct date
{ int cat ;DATE cow ;double dog ;}too ;
DATE max ;
则下列语句的执行结果是
printf("%d",sizeof(struct date) sizeof(max));
A)25 B)30 C)18 D)8
20.已知字符0的ASCII码为十六进制的30,下面程序的输出是
A)6 B)9 C)0 D)3
main()
{ union { unsigned char c;unsigned int i[4];}z;
z.i[0]=0x39; z.i[1]=0x36;
printf("%c\n",z.c);}
21.变量a所占内存字节数是
A)4 B)5 C)6 D)8
union U
{ char st[4] ;int i ;long l ;} ;
struct A { int c;union U u;} a ;
22.以下对枚举类型名的定义中正确的是
A) enum a={one ,two ,three} ;
B) enum a {one=9 ,two=-1 ,three} ;
C) enum a={"one" ,"two" ,"three"} ;
D) enum a {"one" ,"two" ,"three"} ;
23.设有如下枚举类型定义:
enum language { Basic=3 ,Assembly ,Ada=100 ,COBOL ,Fortran} ;
枚举量Fortran的值为
A)4 B)7 C)102 D)103
24.下面程序的输出是
A)0 1 2 3 B)0 4 0 10 C)0 4 5 15 D)1 4 5 15
main()
{ enum team { my ,your=4 ,his ,her=his 10};
printf("%d%d%d%d\n",my,your,his,her);}
25. 以下选项中,能定义s为合法的结构体变量的是
A)typedef struct abc B)struct
{ double a; { double a;
char b[10]; char b[10];
} s; } s;
C)struct ABC D)typedef ABC
{ double a ; { double a;
char b[10] ; char b[10] ;
} ABC s ; } ABC s ;
26.下面对的叙述中不正确的是
A) 用typedef可以定义各种类型名,但不能用来定义变量
B) 用typedef可以增加新类型
C) 用typedef只是将已存在的类型用一个新的标识符来代表
D) 使用typedef有利于程序的通用和移植
27.下面程序的输出是
A)32 B)16 C)8 D)24
typedef union { long x[2];int y[4];char z[8];}MYTYPE;
MYTYPE them;
main()
{ printf("%d\n",sizeof(them));}
28. 以下各选项企图说明一种新的类型名,其中正确的是
A) typedef v1 int; B) typedef v2=int;
C) typedefv1 int v3; D) typedef v4: int;
29. 以下程序的输出结果是
struct HAR
{ int x, y; struct HAR *p;} h[2];
main()
{ h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];
h[1].p=h;
printf(“%d %d \n”,(h[0],p)->x,(h[1],p)->y);
}
A) 12 B) 23 C) 14 D) 32