1、初级 C语言练习(六)结构与联合1、已知学生记录描述为struct studentint no;char name20;char sex;structint year;int month;int day; birth;struct student s;设变量 s中的“生日”应是“1984 年 11月 11日” ,下列对“生日”的正确赋值方式是( )(A) year=1984;month=11;day=11;(B) birth.year=1984;birth.month=11;birth.day=11;(C) s.year=1984;s.month=11;s.day=11;(D) s.birth
2、.year=1984;s.birth.month=11;s.birth.day=11;2、当说明一个结构变量时系统分配给它的内存是( )(A) 各成员所需内存量的总和(B) 结构中第一个成员所需内存量(C) 成员中占内存量最大者所需的容量(D) 结构中最后一个成员所需内存量3、以下对结构变量的定义中不正确的是( )(A) #define STUDENT struct studentSTUDENTint num;float age; std1;(B) struct studentint num;float age; std1;(C) structint num;float age; std1;(
3、D) structint num;float age; student;struct student std1;4、设有以下说明语句struct stuint a;float b; stutype;则下面的叙述不正确的是( )(A) struct是结构类型的关键字(B) struct stu是用户定义的结构类型(C) stutype是用户定义的结构类型名(D) a和 b都是结构成员名5、C 语言结构变量在程序执行期间( ) /此题不妥(A) 所有成员一直驻留在内存中(B) 只有一个成员驻留在内存中(C) 部分成员驻留在内存中(D) 没有成员驻留在内存中6、在 16位 IBM_PC机上使用 C语
4、言,若有如下定义:struct dataint i;char ch;double f; b;则结构变量 b占用内存的字节数是( )(A) 1(B) 2(C) 8(D) 117、以下程序的运行结果是( )#includevoid main()struct dateint year,month,day; today;printf(“%dn“,sizeof(struct date);(A) 6(B) 8(C) 10(D) 128、根据下面的定义,能打印出字母 M的语句是( )struct personchar name9;int age;struct person class10=“John“,17
5、,“Paul“,19,“Mary“,18,“adam“,16;(A) printf(“%cn“,class3.name);(B) printf(“%cn“,class3.name1);(C) printf(“%cn“,class2.name1);(D) printf(“%cn“,class2.name0);9、下面程序的运行结果是( )void main()struct cmplxint x;int y;cnum2=1,3,2,7;printf(“%dn“,cnum0.y/cnum0.x*cnum1.x);(A) 0(B) 1(C) 3(D) 610、若有以下定义和语句:struct stud
6、entint age;int num;struct student stu3=1001,20,1002,19,1003,21;void main()struct student *p;p=stu;.则以下不正确的引用是( )(A) (p+)-num(B) p+(C) (*p).num(D) p=int age;int sex; pup5,*p;p=pup;(A) scanf(“%s“,pup0.name);(B) scanf(“%d“,(C) scanf(“%d“,(D) scanf(“%d“,p-age);12、若有以下定义和语句,则以下引用形式不合法的是struct sint i1;str
7、uct s *i2,*i0;static struct s a3=2,ptr=a;(A) ptr-i1+(B) *ptr-i2(C) +ptr-i0(D) *ptr-i113、设有以下定义: /此题有点硬拗struct skint n;float x; data,*p;若要使 p指向 data中的 n域,正确的赋值语句是( )(A) p=(B) *p=data.n;(C) p=(struct sk *)(D) p=(struct sk *)data.n;14、若有以下说明和语句struct studentint age;int num; std,*p;p=则以下对结构变量 std中成员 age
8、的引用方式不正确的是( )(A) std.age(B) p-age(C) (*p).age(D) *p.age15、若有以下程序段:struct dentint n;int *m;int a=1,b=2,c=3;struct dent s3=101,void main()struct dent *p;p=s;.则以下表达式中值为 2的是( )(A) (p+)-m(B) *(p+)-m(C) (*p).m(D) *(+p)-m16、若有以下说明和语句,则对 pup中 sex域的正确引用方式是( )struct pupilchar name20;int sex;pup,*p;p=(A) p.pup
9、.sex(B) p-pup.sex(C) (*p).pup.sex(D) (*p).sex17、设有以下语句:struct stint n;struct st *next;static struct st a3=5,p=则以下表达式的值为 6的是( )(A) p+-n(B) p-n+(C) (*p).n+(D) +p-n18、以下程序的输出结果是( )struct stuint x;int *y; *p;int dt4=10,20,30,40;struct stu a4=50,void main()p=a;printf(“%d,“,+p-x);printf(“%d,“,(+p)-x);prin
10、tf(“%dn“,+(*p-y);(A) 10,20,20(B) 50,60,21(C) 51,60,21(D) 60,70,3119、若有以下说明和语句,则下面表达式中值为 1002的是( )struct studentint age;int num;struct student stu3=1001,20,1002,19,1003,21;struct student *p;p=stu;(A) (p+)-num(B) (p+)-age(C) (*p).num(D) (*+p).age20、以下对结构变量 stu1中成员 age的非法引用是( )struct studentint age;int
11、 num; stu1,*p;p=(A) stu1.age(B) student.age(C) p-age(D) (*p).age21、设有以下说明和定义语句,则下面表达式中值为 3的是( )struct sint i1;struct s *i2;static struct s a3=1,ptr=(A) ptr-i1+(B) ptr+-i1(C) *ptr-i1(D) +ptr-i122、以下程序的功能是:读入一行字符(如:a,.,y,z) ,按输入时的逆序建立一个链接式的节点序列,即先输入的位于链表尾(如下图) ,然后再按输入的相反顺序输出,并释放全部结点。请选择正确的内容填入【 】中。【1】
12、( )【2】( )【3】( ) NULL #include#define getnode(type) 【1】malloc(sizeof(type)void main()struct nodechar info;struct node *link; *top,*p;char c;top=NULL;while(c=getchar()【2】)p=getnode(struct node);p-info=c;p-link=top;top=p;while(top)【3】top=top-link;putchar(p-info);free(p);【1】(A) (type)(B) (type *)(C) typ
13、e(D) type *【2】(A) =0(B) !=0(C) =n(D) !=n【3】(A) top=p(B) p=top(C) p=top(D) top=p23、若要利用下面的程序片断使指针变量 p指向一个存储整型变量的存储单元,则【 】中应填入的内容是( )int *p;p=【 】malloc(sizeof(int);(A) int(B) int *(C) (* int)(D) (int *)24、若已建立下面的链表结构,指针 p、q 分别指向图中所示结点,则不能将 q所指的结点插入链表末尾的一组语句是( ) . NULL (A) p-next=NULL; p=p-next; p-next
14、=q;(B) p=p-next; q-next=p-next; p-next=q;(C) p=p-next; q-next=p; p-next=q;(D) p=(*p).next; (*q).next=(*)p.next; (*p).next=q;25、当说明一个联合变量时系统分配给它的内存是( )(A) 各成员所需内存量的总和(B) 结构中第一个成员所需内存量(C) 成员中占内存量最大者所需内存量(D) 结构中最后一个成员所需内存量26、以下对 C语言中联合类型数据的叙述正确的是( )(A) 可以对联合变量名直接赋值(B) 一个联合变量中可以同时存放其所有成员(C) 一个联合变量中不能同时存
15、放其所有成员(D) 联合类型定义中不能出现结构类型的成员27、若有以下定义和语句union dataint i;char c;float f; a;int n;则以下语句正确的是( )(A) a=5;(B) a=2,a,1.2;(C) printf(“%dn“,a);(D) n=a;28、设有以下说明,则下面不正确的叙述是( )union dataint i;char c;float f; un;(A) un所占的内存长度等于成员 f的长度(B) un的地址和它的各成员地址都是同一地址(C) un可以作为函数参数(D) 不能对 un赋值,但可以在定义 un时对它初始化29、C 语言联合类型变量
16、在程序运行期间( )(A) 所有成员一直驻留在内存中(B) 只有一个成员驻留在内存中(C) 部分成员驻留在内存中(D) 没有成员驻留在内存中30、以下程序的运行结果是( )#includevoid main()unionlong a;int b;char c; m;printf(“%dn“,sizeof(m);(A) 2(B) 4(C) 6(D) 831、对下面程序中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果。#includevoid main()unionint a2;long b;char c4; s;s.a0=0x39;s.a1=0x38;printf(“%lxn“,s.
17、b); /*【1】*/printf(“%cn“,s.c0); /*【2】*/【1】(A) 390038(B) 380039(C) 3938(D) 3839【2】(A) 39(B) 9(C) 38(D) 832、对下面语句中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果。#includevoid main()int j;unionint a;long b;unsigned char c; m;m.b=0x12345678;printf(“%xn“,m.a); /*【1】*/printf(“%xn“,m.c); /*【2】*/【1】(A) 1234(B) 5678(C) 1234567
18、8(D) 0【2】(A) 12(B) 78(C) 1234(D) 567833、在 16位 IBM-PC机上使用 C语言,若有如下定义:union dataint i;char ch;double f; b;则联合变量 b占用内存的字节数是( )(A) 1(B) 2(C) 8(D) 1134、以下程序的运行结果是( )#includeunion pwint i;char ch2; a;void main()a.ch0=13;a.ch1=0;printf(“%dn“,a.i);(A) 13(B) 14(C) 208(D) 20935、使用 typedef定义一个新类型的正确步骤是( )(A) 2
19、,4,1,3(B) 1,3,2,4(C) 2,1,4,3(D) 4,2,3,11、把变量名换成新类型名2、按定义变量的方法写出定义体3、用新类型名定义变量4、在最前面加上关键字 typedef36、下面对 typedef的叙述中不正确的是( )(A) 用 typedef可以定义各种类型名,但不能用来定义变量(B) 用 typedef可以增加新类型(C) 用 typedef只是将已存在的类型用一个新的标识符来代表(D) 使用 typedef有利于程序的通用和移植37、以下程序的运行结果是( )typedef unionlong a2;int b4;char c8; TY;TY our;void main()printf(“%dn“,sizeof(our);(A) 32(B) 16(C) 8(D) 24