11第十一章结构体和联合体练习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A、该共用体中第一个成员所需存储空间
B、该共用中最后一个成员所需存储空间
C、该共用体中占用最大存储空间的成员所需存储空间
D、共用体中所有成员所需存储空间的总和
3、共用体类型在任何给定时刻,()。
A、所有成员一直驻留在结构中
B、只有一个成员驻留在结构中
C、部分成员驻留在结构中
D、没有成员驻留在结构中
4、使用共用体union的目的是()。
struct st a[ ]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};
main()
{
p=a;
printf(“%d,”,p—>x);
printf(“%d,”,(++p)—>x);
printf(“%d,”,*(++p)—>y);
printf(“%d\n”,++(*(++p)—>y));
{
int x;
char * y;
}tab[2]={{1,”ab”},{2,”cd”}},*p=tab;
则:表达式*p—>y的结果是(1)。
表达式*(++p)—>y的结果是(2)。
3、有如下定义:
struct
{
int x;
int y;
}s[2]={{1,2},{3,4}},*p=s;
则:表达式++p—>x的结果是(1)。
#define NULL 0
main()
{
struct node
{
char info;
struct node(1);
}*top, *p;
char c;
top=NULL;
while ((c=getchar())!=’\n’)
{
p=getnode((2));
p—>info=c;
p—>link=(3);
top=(4);
{
staticsts1[2]={{“ABCD”,”EFGH”},
{“IJK”,”LMN”}};
static struct str2
{
st sr;
int d;
}s2={“OPQ”,”RST”,32767};
st *p[ ]={&s1[0],&s1[1]};
printf(“%c\n”,p[0]—>c[1]); /*输出(1)*/
8、若有以下说明和语句:
struct worker
{
int no;
char *name;
}work,*p=&work;
则以下引用方式不正确的是()。
A、work.noB、(*p).no
C、p—>noD、work—>no
9、以下程序执行后的正确结果是()。
struct tree
{
int x;
char *s;
}a;
a.x=0x1234;
printf(“%x,%x\n”,a.b.c1,a.b.c2);
}
A、12,34 B、34,12
C、12,00 D、34,00
15、以下程序的执行结果是()。
minin()
{
union
{
char s[2];
int i;
}a;
a.i=0x1234;
printf(“%x,%x\n”,a.s[0],a.s[1]);
A、将一组数据作为一个整体,以便于其中的成员共享同一存储空间
B、将一组具有相同数据类型的数据作为一个整体,以便于其中的成员共享同一存储空间
C、将一组相关数据作为一个整体,以便程序中使用
D、将一组具有相同数据类型的数据作为一个整体,以便程序中使用
5、以下typedef的叙述不正确的是()。
A、用typedef可以定义各种类型名,但不能用来定义变量
enum {a,b=5,c,d=4,e} k;
k=e;
A、3B、4C、5D、6
13、正确的k值是()。
enum {a,b=5,c,d=4,e} k;
k=a;
A、0B、1C、4D、6
14、以下程序的执行结果是()。
main()
{
union
{
int x;
struct
{
char c1;
char c2;
}b;
第十一章结构体和共用体
一、单项选择题:
1、在说明一个结构体变量时系统分配给它的存储空间是()。
A、该结构体第一个成员所需存储空间
B、该结构中最后一个成员所需存储空间
C、该结构体中占用最大存储空间的成员所需存储空间
D、结构体中所有成员所需存储空间的总和
2、在说明一个共用体变量时系统分配给它的存储空间是()。
mul.real,mul.virtual);
}
12、以下程序用于在结构体数组中查找分数最高和最低的同学姓名和成绩。请在程序中的空白处填入一条语句或一个表达式。
#include <stdio.h>
main()
{
int max,min,i,j;
static struct
{
char name[8];
int score;
复数的加法定义为:
(a+bi)+(c+di)=(a+c)+(b+d)i
复数的乘法定义为:
(a+bi)(c+di)=(ac-bd)+(bc+ad)i
请在程序的空白处填入一条语句或一个表达式。
#include <stdio.h>
struct mulp_number
{
float real,virtual;
}
10、以下程序的执行结果是。
#include <stdio.h>
main()
{
union u
{
char * name;
int age;
int income;
}s;
s.name=”WANGLING”;
s.age=28;
s.income=1000;
printf(“%d\n”,s.age);
}
11、以下程序中使用一个结构体变量表示一个复数,然后进行复数加法和乘法运算。根据复数的定义,其代数式为:A=a+bi,则:
}t;
func(struct tree t)
{
t.x=10;
t.s=”computer”;
return(0);
}
main()
{
t.x=1;
t.s=”minicomputer”;
func(t);
printf(“%d,%s\n”,t.x,t.s);
}
A、10,computerB、1,minicomputerC、1,computerD、10,minicomputer
(4)A、linkB、pC、p—>linkD、top—>link
(5)A、p—>linkB、top—>linkC、topD、link
18、阅读以下程序,请选择正确的编号填空。
#include <stdio.h>
typedef struct str1
{
char c[5];
char *s;
}st;
main()
B、用typedef可以增加新类型
C、用typedef只是将已存在的类型用一个新的名称来代表
D、使用typedef便于程序的通用
6、以下关于枚举的叙述不正确的是()。
A、枚举变量只能取对应枚举类型的枚举元素表中元素
B、可以在定义枚举类型时对枚举元素进行初始化
C、枚举元素表中的元素有先后次序,可以进行比较
}stud[5]={“李萍”,92,”王兵”,72,”钟虎”,83,”孙逊”,60,”徐军”,88};
}
6、以下程序的执行结果是。
main()
{
union
{
int i[2];
long k;
char c[4];
}r,*p=&r;
p—>i[0]=0x39;
p—>i[1]=0x38;
printf(“%x,%x,%x\n”,p—>c[0],p—>c[1],
p—>c[2],p—>c[3]);
}
7、以下程序的执行结果是。
printf(“%s\n”,(++p[0])—>s);/*输出(2)*/
printf(“%c\n”,s2.sr.c[2]); /*输出(3)*/
printf(“%d\n”,s2.d+1); /*输出(4)*/
}
(1)A、MB、JC、DD、B
(2)A、ABCDB、EFGHC、LMND、IJK
(3)A、QB、VC、YD、T
{
int no;
char name[10];
float score;
}
C、struct student
{
int no;
char name[10];
float score;
}stud[20];
D、struct
{
int no;
char name[10];
float score;
}stud[100];
12、正确的k值是()。
10、有如下定义:
struct date
{
int year,month,day;
};
struct worklist
{
char name[20];
char sex;
struct date birthday;
}person;
对结构体变量Байду номын сангаасerson的出生年份进行赋值时,下面正确的赋值语句是()。
A、year=1958
B、birthday.year=1958
C、person.birthday.year=1958
D、person.year=1958
11、在如下结构体定义中,不正确的是()。
A、struct student
{
int no;
char name[10];
float score;
}
B、struct stud[20]
sum.virtual=(2);
mul.real=(3)—(4);
mul.virtual=(5)+(6);
printf(“sum.real=%f,sum.virtual=%f\n”,
sum.real,sum.virtual);
printf(“mul.real=%f,mul.virtual=%f\n”,
D、枚举元素的值可以是整数或字符串
7、在下列程序段中,枚举变量c1和c2的值分别是()和()。
main()
{
enum color {red,yellow,blue=4,green,white} c1,c2;
c1=yellow;
c2=white;
printf(“%d,%d\n”,c1,c2);
}
A、1B、3C、5D、6
}
9、以下程序的执行结果是。
#include <stdio.h>
main()
{
union EXAMPLE
{
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\n”,e.in.x,e.in.y);
(4)A、-32768B、32768C、65535D、0
二、填空题:
1、以下程序的执行结果是。
typedef struct
{
long x[2];
int y[4];
char z[8];
}MYTYPE;
MYTYPEa;
main()
{
printf(“%d\n”,sizeof(a));
}
2、有如下定义:
struct
}
while (top!=NULL)
{
p=(5);
top=p—>link;
printf(“%c”,p—>info);
free(p);
}
}
(1)A、*pB、*linkC、*topD、link
(2)A、topB、pC、nodeD、struct node
(3)A、topB、top—>linkC、pD、p—>link
表达式(++p)—>x的结果是(2)。
4、以下程序的执行结果是。
struct stru
{
int x;
char c;
};
main()
{
struct stru a={10,’x’};
func(a);
printf(“%d,%c\n”,a.x,a.c);
}
func(struct stru b)
{
b.x=20;
}
A、12,34 B、34,12
C、12,00 D、34,00
16、以下程序的功能是读入一行字符,且每个字符存入一个结点,按输入顺序建立一个链表的结点序列,然后再按相反顺序输出并释放全部结点,请选择正确的编号填空。
#include <stdio.h>
#include <alloc.h>
#define getnode(type) ((type*)malloc(sizeof(type)))
};
main()
{
struct mulp_number a,b,sum,mul;
printf(“输入a.real、a.virtual、
b.real、b.virtual:”);
scanf(“%f%f%f%f”,&a.real,&a.virtual,
&b.real,&b.virtual);
sum.real=(1);
typedef union
{
long x[2];
int y[4];
char z[8];
}MYTYPE;
MYTYPE a;
main()
{
printf(“%d\n”,sizeof(a));
}
8、以下程序的执行结果是。
struct st
{
int x;
int *y;
}*p;
int s[ ]={10,20,30,40};
b.c=’y’;
}
5、以下程序的执行结果是。
struct stru
{
int x;
char c;
};
main()
{
struct stru a={10,’x’},*p=&a;
func(p);
printf(“%d,%c\n”,a.x,a.c);
}
func(struct stru b)
{
b—>x=20;
b—>c=’y’;
B、该共用中最后一个成员所需存储空间
C、该共用体中占用最大存储空间的成员所需存储空间
D、共用体中所有成员所需存储空间的总和
3、共用体类型在任何给定时刻,()。
A、所有成员一直驻留在结构中
B、只有一个成员驻留在结构中
C、部分成员驻留在结构中
D、没有成员驻留在结构中
4、使用共用体union的目的是()。
struct st a[ ]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};
main()
{
p=a;
printf(“%d,”,p—>x);
printf(“%d,”,(++p)—>x);
printf(“%d,”,*(++p)—>y);
printf(“%d\n”,++(*(++p)—>y));
{
int x;
char * y;
}tab[2]={{1,”ab”},{2,”cd”}},*p=tab;
则:表达式*p—>y的结果是(1)。
表达式*(++p)—>y的结果是(2)。
3、有如下定义:
struct
{
int x;
int y;
}s[2]={{1,2},{3,4}},*p=s;
则:表达式++p—>x的结果是(1)。
#define NULL 0
main()
{
struct node
{
char info;
struct node(1);
}*top, *p;
char c;
top=NULL;
while ((c=getchar())!=’\n’)
{
p=getnode((2));
p—>info=c;
p—>link=(3);
top=(4);
{
staticsts1[2]={{“ABCD”,”EFGH”},
{“IJK”,”LMN”}};
static struct str2
{
st sr;
int d;
}s2={“OPQ”,”RST”,32767};
st *p[ ]={&s1[0],&s1[1]};
printf(“%c\n”,p[0]—>c[1]); /*输出(1)*/
8、若有以下说明和语句:
struct worker
{
int no;
char *name;
}work,*p=&work;
则以下引用方式不正确的是()。
A、work.noB、(*p).no
C、p—>noD、work—>no
9、以下程序执行后的正确结果是()。
struct tree
{
int x;
char *s;
}a;
a.x=0x1234;
printf(“%x,%x\n”,a.b.c1,a.b.c2);
}
A、12,34 B、34,12
C、12,00 D、34,00
15、以下程序的执行结果是()。
minin()
{
union
{
char s[2];
int i;
}a;
a.i=0x1234;
printf(“%x,%x\n”,a.s[0],a.s[1]);
A、将一组数据作为一个整体,以便于其中的成员共享同一存储空间
B、将一组具有相同数据类型的数据作为一个整体,以便于其中的成员共享同一存储空间
C、将一组相关数据作为一个整体,以便程序中使用
D、将一组具有相同数据类型的数据作为一个整体,以便程序中使用
5、以下typedef的叙述不正确的是()。
A、用typedef可以定义各种类型名,但不能用来定义变量
enum {a,b=5,c,d=4,e} k;
k=e;
A、3B、4C、5D、6
13、正确的k值是()。
enum {a,b=5,c,d=4,e} k;
k=a;
A、0B、1C、4D、6
14、以下程序的执行结果是()。
main()
{
union
{
int x;
struct
{
char c1;
char c2;
}b;
第十一章结构体和共用体
一、单项选择题:
1、在说明一个结构体变量时系统分配给它的存储空间是()。
A、该结构体第一个成员所需存储空间
B、该结构中最后一个成员所需存储空间
C、该结构体中占用最大存储空间的成员所需存储空间
D、结构体中所有成员所需存储空间的总和
2、在说明一个共用体变量时系统分配给它的存储空间是()。
mul.real,mul.virtual);
}
12、以下程序用于在结构体数组中查找分数最高和最低的同学姓名和成绩。请在程序中的空白处填入一条语句或一个表达式。
#include <stdio.h>
main()
{
int max,min,i,j;
static struct
{
char name[8];
int score;
复数的加法定义为:
(a+bi)+(c+di)=(a+c)+(b+d)i
复数的乘法定义为:
(a+bi)(c+di)=(ac-bd)+(bc+ad)i
请在程序的空白处填入一条语句或一个表达式。
#include <stdio.h>
struct mulp_number
{
float real,virtual;
}
10、以下程序的执行结果是。
#include <stdio.h>
main()
{
union u
{
char * name;
int age;
int income;
}s;
s.name=”WANGLING”;
s.age=28;
s.income=1000;
printf(“%d\n”,s.age);
}
11、以下程序中使用一个结构体变量表示一个复数,然后进行复数加法和乘法运算。根据复数的定义,其代数式为:A=a+bi,则:
}t;
func(struct tree t)
{
t.x=10;
t.s=”computer”;
return(0);
}
main()
{
t.x=1;
t.s=”minicomputer”;
func(t);
printf(“%d,%s\n”,t.x,t.s);
}
A、10,computerB、1,minicomputerC、1,computerD、10,minicomputer
(4)A、linkB、pC、p—>linkD、top—>link
(5)A、p—>linkB、top—>linkC、topD、link
18、阅读以下程序,请选择正确的编号填空。
#include <stdio.h>
typedef struct str1
{
char c[5];
char *s;
}st;
main()
B、用typedef可以增加新类型
C、用typedef只是将已存在的类型用一个新的名称来代表
D、使用typedef便于程序的通用
6、以下关于枚举的叙述不正确的是()。
A、枚举变量只能取对应枚举类型的枚举元素表中元素
B、可以在定义枚举类型时对枚举元素进行初始化
C、枚举元素表中的元素有先后次序,可以进行比较
}stud[5]={“李萍”,92,”王兵”,72,”钟虎”,83,”孙逊”,60,”徐军”,88};
}
6、以下程序的执行结果是。
main()
{
union
{
int i[2];
long k;
char c[4];
}r,*p=&r;
p—>i[0]=0x39;
p—>i[1]=0x38;
printf(“%x,%x,%x\n”,p—>c[0],p—>c[1],
p—>c[2],p—>c[3]);
}
7、以下程序的执行结果是。
printf(“%s\n”,(++p[0])—>s);/*输出(2)*/
printf(“%c\n”,s2.sr.c[2]); /*输出(3)*/
printf(“%d\n”,s2.d+1); /*输出(4)*/
}
(1)A、MB、JC、DD、B
(2)A、ABCDB、EFGHC、LMND、IJK
(3)A、QB、VC、YD、T
{
int no;
char name[10];
float score;
}
C、struct student
{
int no;
char name[10];
float score;
}stud[20];
D、struct
{
int no;
char name[10];
float score;
}stud[100];
12、正确的k值是()。
10、有如下定义:
struct date
{
int year,month,day;
};
struct worklist
{
char name[20];
char sex;
struct date birthday;
}person;
对结构体变量Байду номын сангаасerson的出生年份进行赋值时,下面正确的赋值语句是()。
A、year=1958
B、birthday.year=1958
C、person.birthday.year=1958
D、person.year=1958
11、在如下结构体定义中,不正确的是()。
A、struct student
{
int no;
char name[10];
float score;
}
B、struct stud[20]
sum.virtual=(2);
mul.real=(3)—(4);
mul.virtual=(5)+(6);
printf(“sum.real=%f,sum.virtual=%f\n”,
sum.real,sum.virtual);
printf(“mul.real=%f,mul.virtual=%f\n”,
D、枚举元素的值可以是整数或字符串
7、在下列程序段中,枚举变量c1和c2的值分别是()和()。
main()
{
enum color {red,yellow,blue=4,green,white} c1,c2;
c1=yellow;
c2=white;
printf(“%d,%d\n”,c1,c2);
}
A、1B、3C、5D、6
}
9、以下程序的执行结果是。
#include <stdio.h>
main()
{
union EXAMPLE
{
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\n”,e.in.x,e.in.y);
(4)A、-32768B、32768C、65535D、0
二、填空题:
1、以下程序的执行结果是。
typedef struct
{
long x[2];
int y[4];
char z[8];
}MYTYPE;
MYTYPEa;
main()
{
printf(“%d\n”,sizeof(a));
}
2、有如下定义:
struct
}
while (top!=NULL)
{
p=(5);
top=p—>link;
printf(“%c”,p—>info);
free(p);
}
}
(1)A、*pB、*linkC、*topD、link
(2)A、topB、pC、nodeD、struct node
(3)A、topB、top—>linkC、pD、p—>link
表达式(++p)—>x的结果是(2)。
4、以下程序的执行结果是。
struct stru
{
int x;
char c;
};
main()
{
struct stru a={10,’x’};
func(a);
printf(“%d,%c\n”,a.x,a.c);
}
func(struct stru b)
{
b.x=20;
}
A、12,34 B、34,12
C、12,00 D、34,00
16、以下程序的功能是读入一行字符,且每个字符存入一个结点,按输入顺序建立一个链表的结点序列,然后再按相反顺序输出并释放全部结点,请选择正确的编号填空。
#include <stdio.h>
#include <alloc.h>
#define getnode(type) ((type*)malloc(sizeof(type)))
};
main()
{
struct mulp_number a,b,sum,mul;
printf(“输入a.real、a.virtual、
b.real、b.virtual:”);
scanf(“%f%f%f%f”,&a.real,&a.virtual,
&b.real,&b.virtual);
sum.real=(1);
typedef union
{
long x[2];
int y[4];
char z[8];
}MYTYPE;
MYTYPE a;
main()
{
printf(“%d\n”,sizeof(a));
}
8、以下程序的执行结果是。
struct st
{
int x;
int *y;
}*p;
int s[ ]={10,20,30,40};
b.c=’y’;
}
5、以下程序的执行结果是。
struct stru
{
int x;
char c;
};
main()
{
struct stru a={10,’x’},*p=&a;
func(p);
printf(“%d,%c\n”,a.x,a.c);
}
func(struct stru b)
{
b—>x=20;
b—>c=’y’;