任务39:共用体 《编程语言-C语言》45分钟专题训练
|
2份
|
25页
|
86人阅读
|
1人下载
内容正文:
湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。
《编程语言—C语言》
项目八: 结构体、共用体、链表
第39卷: 共用体
时间:45分钟 总分:100分
班级___________ 姓名__________ 学号__________ 成绩________
一、选择题(共23小题,每小题2分,共46分)
1.设int占4字节,char占1字节,float占4字节,有以下定义语句段,则sizeof(x2)的值为( )
struct stu{union{char b1[5];int b2[2];}x1;char b3[8];float c;}x2
A.17 B.20 C.18 D.19
2.下列选项中,叙述正确的一项是( )
A.结构体一经定义,系统就给它分配了所需要的内存单元
B.结构体变量和共用体变量所占内存长度是各成员所占内存长度之和
C.可以对结构体类型和结构体类型变量赋值、存取和运算
D.定义共用体变量后,不能引用共用体变量,只能引用共用体变量中的成员
3.设有定义:union data{int i;char c;float f;}un;,则下列叙述中,不正确的一项是( )
A.un所占的内存长度等于成员c的长度
B.un的地址和其各个成员地址都是同一地址
C.un可以作为函数参数
D.不能对un赋值,但是可以在定义un时对它进行初始化。
4.在C语言中,共用体变量在程序运行期间( )
A.所有成员一直驻留在内存中 B.只有一个成员驻留在内存中
C.不分成员驻留在内存中 D.没有成员驻留在内存中
5.设有定义:union w{int a[3];float b[4];char c[10];}bb;,则语句:printf("%d
",sizeof(bb));的输出结果是( )
A.6 B.16 C.17 D.32
6.设有定义:union type{int i;char ch;}temp;,则执行语句:temp.i=266;后,temp.ch的数值为( )
A.266 B.256 C.10 D.1
7.下列选项中,对共用体类型数据的正确叙述是( )
A.一旦定义了一个共用体变量后,即可引用改变量或该变量中的任意成员
B.一个共用体变量中可以同时存放其所有成员
C.一个共用体变量中不能同时存放其所有成员
D.共用体类型数据可以出现在结构体类型定义中,但结构体类型数据不能出现在共用体类型定义中
8.设有以下程序,程序的输出结果是( )
union p{int i;char ch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf("%d
",a.i); getch();}
A.13 B.14 C.208 D.209
9.设有定义:union dt{int a;char b;double c;}data;,则下列选项中,叙述不正确的一项是( )
A.data的每个成员起始地址都相同
B.变量data所占的内存字节数与成员c所占字节数相等
C.程序段:data.a=5; printf("%f
",data.c);的输出结果是5.000000
D.data不可以作为函数的参数
10.设有定义:union data{int i;char ch;double f;}x;,则共用体变量x所占用的内存字节数为( )
A.7 B.8 C.10 D.11
11.设有定义:union data{int i;float f;struct{int x;char y;}s;char d;}a;则变量a在内存中所占字节数为( )
A.8 B.9 C.15 D.17
12.下列叙述中,正确的一项是( )
A.一个结构只能包含一种数据类型
B.不同结构中的成员不能有相同的成员名
C.两个结构变量不可以进行大小比较
D.关键字typedef用于定义新的数据类型
13.在C语言中,在定义一个联合体变量时,系统分配给它的存储空间是( )
A.该联合体中第一个成员所需存储空间
B.该联合体中占用最大存储空间的成员所需存储空间
C.该联合体中最后一个成员所需存储空间
D.该联合体中所有成员所需存储空间的总和
14.执行以下程序段的输出结果是( )
union aa{float x,y;
char c[6];};
struct st{union aa a1;float w[5];double bc;}wa;
main()
{printf("%d",sizeof(wa));getch();}
A.40 B.36 C.20 D.8
15.设有一个名为“data”的共用体,其中定义了两个成员变量“num”和“ch”,下列用于访问“data”共用体的“ch”成员变量的是( )
A.data.ch B.&data.ch C.(*data).ch D.data->ch
16.设有定义和语句: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;
17.设有定义:union data{int i;char c;float f;}un;,则下列叙述中,不正确的一项是( )
A.un所占的内存长度等于成员f的长度
B.un的地址和它的各个成员地址都是同一地址
C.un可以作为函数参数
D.不能对un赋值,但可以在定义un时对它初始化
18.执行以下程序段的输出结果是( )
main()
{int i,j;
union{char a;long b;unsigned char c;}m;
m.b=0x1234567;
printf("%x
",m.a);getch();}
A.1234567 B.12 C.67 D.123
19.执行以下程序段的输出结果是( )
main()
{int i,j;
union{short a;long b;unsigned char c;}m;
m.b=0x1234567;
printf("%x
",m.a);getch();}
A.1234 B.567 C.4567 D.34567
20.执行以下程序段的输出结果是( )
struct st{int a2;char a1;};
union ss{int r;char s[2];struct st t;};
main()
{union ss a;
a.s[0]='0';a.s[1]='1';
a.t.a2=a.s[0]+a.s[1];
printf("%d",a.r);getch();}
A.97 B.99 C.98 D.96
21.执行以下程序段的输出结果是( )
main()
{union{char a[2];int b;}s;
s.b=0x112233;
printf("%x",s.a[1]);getch();}
A.11 B.112 C.22 D.23
22.执行以下程序段的输出结果是( )
main()
{union{char a[2];int b;}s;
s.b=01122;
printf("%d",s.a[1]);getch();}
A.2 B.1 C.3 D.11
23.执行以下程序段的输出结果是( )
main()
{union{char a[2];int b;float c;}s;
s.a[1]='A';
s.c=2026;
printf("%d",s.a[1]);getch();}
A.64 B.65 C.66 D.67
二、程序运行结果题(本题共7小题,每题3分,共21分)
24.以下程序的运行结果是( )
main()
{union {unsigned char c;
unsigned int i[4];}z;
z.i[0]=0x39;
z.i[1]=0x36;
printf("%c
",z.c);
getch();};
25.以下程序的运行结果是( )
main()
{union {int i[2];long k;char c[4];}r,*s=&r;
s->i[0]=0x56;
s->i[1]=0x57;
printf("%c
",s->c[0]);
getch();};
26.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
struct w{ char low;char high;};
union u{struct w byte;int word;}uu;
main( )
{ uu.word=0x1234;
printf("Word value:%04x
",uu.word);
printf("High value:%02x
",uu.byte.high);
printf("Low value:%02x
",uu.byte.low);
getch();}
27.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
main( )
{union EX
{struct{ int x;int y;}in;
int a;int b;}e;
e.a=1;e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d %d",e.in.x,e.in.y);
getch();}
28.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
main( )
{struct EXAMPLE{
union{int x;int y;}in;
int a;int b;}e;
e.a=1;e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d",e.in.x,e.in.y);
getch();}
29.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
struct w
{ char low;
char high;};
union u
{ struct w byte;
short word;}uw;
main( )
{ int result;
uw.word=0x1234;
printf("word value:%04x
",uw.word);
printf("high byte:%02x
",uw.byte.high);
printf("low byte:%02x
",uw.byte.low);
getch();}
30.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
struct w
{ char low;
char high;};
union u
{ struct w byte;
short word;}uw;
main( )
{ int result;
uw.word=0x123;
uw.byte.low=0x89;
printf("word value:%04x
",uw.word);
result=uw.word+0x2a45;
printf("the result:%04x
",result);
getch();}
三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分)
31.设有一个unsigned long型整数,现在要将其前两个字符和后两个字符作为2个unsigned int 型整数输出(假设一个int型数据占2个字节)。程序实现在主函数中输入该long型整数,在函数partition中输出结果。程序中共有三处错误,请改正。
L1 #include <stdio.h>
L2 #include <conio.h>
L3 void partition(unsigned long int num)
L4 {union a
L5 {unsigned int part[2];
L6 unsigned long int w;}n,p;
L7 p=n;
L8 n.w=num;
L9 printf("long int=%lx
",num);
L10 printf("low—part num=%0x,high—partnum=%0x
",
L11 p->part[0],p->part[1]);}
L12 main( )
L13 { unsigned long int x;
L14 x=0x2345569;
L15 partition(*x);
L16 getch();}
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
32.下列程序的功能是:使用共用体来处理学校若干人员的数据信息,其中包括学生和教师,学生的数据中包括:姓名、号码、性别、职业、班级,教师的数据包括:姓名、号码、性别、职业、职务。请填空。
#include <stdio.h>
#include <conio.h>
struct
{int num;
char name[10];
char sex;
char job;
union
{int clas;
char position[10];
}category;
}【1】;
main()
{int i;
for(i=0;i<2;i++)
{printf("please ehter the date of person:
");
scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
if(person[i].job=='s')
scanf("%d",&person[i].category.clas);
else if(person[i].job=='t')
scanf("%s",【2】);
else printf("Input error!");}
printf("
");
printf("No. name sex job class/position
");
for(i=0;i<2;i++)
{if(【3】)
printf("%6d%10s%4c%4c%10d
",person[i].num,person[i].name,
person[i].sex,person[i].job,【4】);
else
printf("%6d%10s%4c%4c%10s
",person[i].num,person[i].name,
person[i].sex,person[i].job,person[i].category.position);}
getch();}
33.以下程序的功能是:读入两个学生的情况存入结构数组。每个学生的情况包括:姓名、学号 、性别。若是男生,则还登记视力正常与否(正常用 Y,不正常用 N);对女生则还登记身高和体重。请填空。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <conio.h>
【1】
{char name[10];int number;char sex;
union body
{【2】;
struct
{int hength;
int weight;
}f;
}body;
}per[2];
main( )
{int i;
for(i=0;i<2;i++)
{scanf("%s %d %c",&per[i].name,&per[i].number,&per[i].sex);
if(per[i].sex=='m')
scanf("%c",【3】);
else if(per[i].sex=='f')
scanf("%d %d",&per[i].body.f.hength,【4】);
else printf("input error'n");}
getch();}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
湖南省职教高考《编程语言—C语言》45分钟专题训练专辑,共43份试卷。试卷命题与高考紧密相关,精选具有代表性和典型性的高考常考题。旨在帮助学生系统地复习和巩固计算机类理论知识,熟悉高考题型和命题规律,提高解题能力和应试技巧,为高考取得优异成绩打下坚实的基础,本训练卷适用于即将参加计算机类高考的学生。与本专辑配套的还有湖南省职教高考《计算机应用基础》《计算机组装与维护》《计算机网络技术》45分钟专题训练专辑,欢迎同学和老师们下载使用。
《编程语言—C语言》
项目八: 结构体、共用体、链表
第39卷: 共用体
时间:45分钟 总分:100分
班级___________ 姓名__________ 学号__________ 成绩________
一、选择题(共23小题,每小题2分,共46分)
1.设int占4字节,char占1字节,float占4字节,有以下定义语句段,则sizeof(x2)的值为( )
struct stu{union{char b1[5];int b2[2];}x1;char b3[8];float c;}x2
A.17 B.20 C.18 D.19
【答案】B
2.下列选项中,叙述正确的一项是( )
A.结构体一经定义,系统就给它分配了所需要的内存单元
B.结构体变量和共用体变量所占内存长度是各成员所占内存长度之和
C.可以对结构体类型和结构体类型变量赋值、存取和运算
D.定义共用体变量后,不能引用共用体变量,只能引用共用体变量中的成员
【答案】D
3.设有定义:union data{int i;char c;float f;}un;,则下列叙述中,不正确的一项是( )
A.un所占的内存长度等于成员c的长度
B.un的地址和其各个成员地址都是同一地址
C.un可以作为函数参数
D.不能对un赋值,但是可以在定义un时对它进行初始化。
【答案】A
4.在C语言中,共用体变量在程序运行期间( )
A.所有成员一直驻留在内存中 B.只有一个成员驻留在内存中
C.不分成员驻留在内存中 D.没有成员驻留在内存中
【答案】B
5.设有定义:union w{int a[3];float b[4];char c[10];}bb;,则语句:printf("%d
",sizeof(bb));的输出结果是( )
A.6 B.16 C.17 D.32
【答案】B
6.设有定义:union type{int i;char ch;}temp;,则执行语句:temp.i=266;后,temp.ch的数值为( )
A.266 B.256 C.10 D.1
【答案】C
7.下列选项中,对共用体类型数据的正确叙述是( )
A.一旦定义了一个共用体变量后,即可引用改变量或该变量中的任意成员
B.一个共用体变量中可以同时存放其所有成员
C.一个共用体变量中不能同时存放其所有成员
D.共用体类型数据可以出现在结构体类型定义中,但结构体类型数据不能出现在共用体类型定义中
【答案】C
8.设有以下程序,程序的输出结果是( )
union p{int i;char ch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf("%d
",a.i); getch();}
A.13 B.14 C.208 D.209
【答案】A
9.设有定义:union dt{int a;char b;double c;}data;,则下列选项中,叙述不正确的一项是( )
A.data的每个成员起始地址都相同
B.变量data所占的内存字节数与成员c所占字节数相等
C.程序段:data.a=5; printf("%f
",data.c);的输出结果是5.000000
D.data不可以作为函数的参数
【答案】D
10.设有定义:union data{int i;char ch;double f;}x;,则共用体变量x所占用的内存字节数为( )
A.7 B.8 C.10 D.11
【答案】B
11.设有定义:union data{int i;float f;struct{int x;char y;}s;char d;}a;则变量a在内存中所占字节数为( )
A.8 B.9 C.15 D.17
【答案】A
12.下列叙述中,正确的一项是( )
A.一个结构只能包含一种数据类型
B.不同结构中的成员不能有相同的成员名
C.两个结构变量不可以进行大小比较
D.关键字typedef用于定义新的数据类型
【答案】C
13.在C语言中,在定义一个联合体变量时,系统分配给它的存储空间是( )
A.该联合体中第一个成员所需存储空间
B.该联合体中占用最大存储空间的成员所需存储空间
C.该联合体中最后一个成员所需存储空间
D.该联合体中所有成员所需存储空间的总和
【答案】B
14.执行以下程序段的输出结果是( )
union aa{float x,y;
char c[6];};
struct st{union aa a1;float w[5];double bc;}wa;
main()
{printf("%d",sizeof(wa));getch();}
A.40 B.36 C.20 D.8
【答案】A。注意系统分配空间时按字节。
15.设有一个名为“data”的共用体,其中定义了两个成员变量“num”和“ch”,下列用于访问“data”共用体的“ch”成员变量的是( )
A.data.ch B.&data.ch C.(*data).ch D.data->ch
【答案】A
16.设有定义和语句: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;
【答案】B
17.设有定义:union data{int i;char c;float f;}un;,则下列叙述中,不正确的一项是( )
A.un所占的内存长度等于成员f的长度
B.un的地址和它的各个成员地址都是同一地址
C.un可以作为函数参数
D.不能对un赋值,但可以在定义un时对它初始化
【答案】C
18.执行以下程序段的输出结果是( )
main()
{int i,j;
union{char a;long b;unsigned char c;}m;
m.b=0x1234567;
printf("%x
",m.a);getch();}
A.1234567 B.12 C.67 D.123
【答案】C
19.执行以下程序段的输出结果是( )
main()
{int i,j;
union{short a;long b;unsigned char c;}m;
m.b=0x1234567;
printf("%x
",m.a);getch();}
A.1234 B.567 C.4567 D.34567
【答案】C
20.执行以下程序段的输出结果是( )
struct st{int a2;char a1;};
union ss{int r;char s[2];struct st t;};
main()
{union ss a;
a.s[0]='0';a.s[1]='1';
a.t.a2=a.s[0]+a.s[1];
printf("%d",a.r);getch();}
A.97 B.99 C.98 D.96
【答案】A
21.执行以下程序段的输出结果是( )
main()
{union{char a[2];int b;}s;
s.b=0x112233;
printf("%x",s.a[1]);getch();}
A.11 B.112 C.22 D.23
【答案】C
22.执行以下程序段的输出结果是( )
main()
{union{char a[2];int b;}s;
s.b=01122;
printf("%d",s.a[1]);getch();}
A.2 B.1 C.3 D.11
【答案】A
23.执行以下程序段的输出结果是( )
main()
{union{char a[2];int b;float c;}s;
s.a[1]='A';
s.c=2026;
printf("%d",s.a[1]);getch();}
A.64 B.65 C.66 D.67
【答案】A
二、程序运行结果题(本题共7小题,每题3分,共21分)
24.以下程序的运行结果是( )
main()
{union {unsigned char c;
unsigned int i[4];}z;
z.i[0]=0x39;
z.i[1]=0x36;
printf("%c
",z.c);
getch();};
【答案】9
25.以下程序的运行结果是( )
main()
{union {int i[2];long k;char c[4];}r,*s=&r;
s->i[0]=0x56;
s->i[1]=0x57;
printf("%c
",s->c[0]);
getch();};
【答案】V
26.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
struct w{ char low;char high;};
union u{struct w byte;int word;}uu;
main( )
{ uu.word=0x1234;
printf("Word value:%04x
",uu.word);
printf("High value:%02x
",uu.byte.high);
printf("Low value:%02x
",uu.byte.low);
getch();}
【答案】
Word value:1234
High value:12
Low value:34
27.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
main( )
{union EX
{struct{ int x;int y;}in;
int a;int b;}e;
e.a=1;e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d %d",e.in.x,e.in.y);
getch();}
【答案】4 8
28.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
main( )
{struct EXAMPLE{
union{int x;int y;}in;
int a;int b;}e;
e.a=1;e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d",e.in.x,e.in.y);
getch();}
【答案】3,3
29.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
struct w
{ char low;
char high;};
union u
{ struct w byte;
short word;}uw;
main( )
{ int result;
uw.word=0x1234;
printf("word value:%04x
",uw.word);
printf("high byte:%02x
",uw.byte.high);
printf("low byte:%02x
",uw.byte.low);
getch();}
【答案】
word value:1234
high byte:12
low byte:34
30.以下程序的运行结果是( )
#include <stdio.h>
#include <conio.h>
struct w
{ char low;
char high;};
union u
{ struct w byte;
short word;}uw;
main( )
{ int result;
uw.word=0x123;
uw.byte.low=0x89;
printf("word value:%04x
",uw.word);
result=uw.word+0x2a45;
printf("the result:%04x
",result);
getch();}
【答案】
word value:0189
the result:2bce
三、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。每处3分,共9分)
31.设有一个unsigned long型整数,现在要将其前两个字符和后两个字符作为2个unsigned int 型整数输出(假设一个int型数据占2个字节)。程序实现在主函数中输入该long型整数,在函数partition中输出结果。程序中共有三处错误,请改正。
L1 #include <stdio.h>
L2 #include <conio.h>
L3 void partition(unsigned long int num)
L4 {union a
L5 {unsigned int part[2];
L6 unsigned long int w;}n,p;
L7 p=n;
L8 n.w=num;
L9 printf("long int=%lx
",num);
L10 printf("low—part num=%0x,high—partnum=%0x
",
L11 p->part[0],p->part[1]);}
L12 main( )
L13 { unsigned long int x;
L14 x=0x2345569;
L15 partition(*x);
L16 getch();}
答案:
L6 unsigned long int w;}n,*p;
L7 p=&n;
L15 partition(x);
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共24分)
32.下列程序的功能是:使用共用体来处理学校若干人员的数据信息,其中包括学生和教师,学生的数据中包括:姓名、号码、性别、职业、班级,教师的数据包括:姓名、号码、性别、职业、职务。请填空。
#include <stdio.h>
#include <conio.h>
struct
{int num;
char name[10];
char sex;
char job;
union
{int clas;
char position[10];
}category;
}【1】;
main()
{int i;
for(i=0;i<2;i++)
{printf("please ehter the date of person:
");
scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);
if(person[i].job=='s')
scanf("%d",&person[i].category.clas);
else if(person[i].job=='t')
scanf("%s",【2】);
else printf("Input error!");}
printf("
");
printf("No. name sex job class/position
");
for(i=0;i<2;i++)
{if(【3】)
printf("%6d%10s%4c%4c%10d
",person[i].num,person[i].name,
person[i].sex,person[i].job,【4】);
else
printf("%6d%10s%4c%4c%10s
",person[i].num,person[i].name,
person[i].sex,person[i].job,person[i].category.position);}
getch();}
答案:①person[2] ②person[i].category.position
③person[i].job=='s' ④person[i].category.clas
33.以下程序的功能是:读入两个学生的情况存入结构数组。每个学生的情况包括:姓名、学号 、性别。若是男生,则还登记视力正常与否(正常用 Y,不正常用 N);对女生则还登记身高和体重。请填空。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <conio.h>
【1】
{char name[10];int number;char sex;
union body
{【2】;
struct
{int hength;
int weight;
}f;
}body;
}per[2];
main( )
{int i;
for(i=0;i<2;i++)
{scanf("%s %d %c",&per[i].name,&per[i].number,&per[i].sex);
if(per[i].sex=='m')
scanf("%c",【3】);
else if(per[i].sex=='f')
scanf("%d %d",&per[i].body.f.hength,【4】);
else printf("input error'n");}
getch();}
答案:①struct ②char eye ③&per[i].body.eye
④&per[i].body.f.weight
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$