第八单元结构体和共用体
一、选择题sizeof结构体大小
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、程序中有下面的说明和定义
struct abc { int x;char y;}
struct abc s1,s2;
则会发生的情况是。
A. 编译出错
B. 程序将顺利编译、连接、执行
C. 能顺利通过编译、连接、但不能执行
D. 能顺利通过编译、但连接出错
5、有如下定义
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]);
6、下面程序的输出是。
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);}
7、设有如下定义:
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
8、当说明一个共用体变量时系统分配给它的内存是。
A. 各成员所需要内存量的总和
B. 共用体中第一个成员所需内存量
C. 成员中占内存量最大者所需的容量
D. 共用体中最后一个成员所需内存量
9、以下对C 语言中共用体类型数据的叙述正确的是。
A. 可以对共用体变量名直接赋值
B. 一个共用体变量中可以同时存放其所有成员
C. 一个共用体变量中不可以同时存放其所有成员
D. 共用体类型定义中不能出现结构体类型的成员
10、C 语言共用体类型变量在程序运行期间。
A. 所有成员一直驻留在内存中
B. 只有一个成员驻留在内存中
C. 部分成员驻留在在内存中
D. 没有成员驻留在内存中
11、以下对枚举类型名的定义中正确的是。
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"} ;
12、设有如下枚举类型定义:
enum language { Basic=3 ,Assembly ,Ada=100 ,COBOL ,Fortran} ;
枚举量Fortran 的值为。
A. 4
B. 7
C. 102
D. 103
13、下面对的叙述中不正确的是。
A. 用typedef 可以定义各种类型名,但不能用来定义变量
B. 用typedef 可以增加新类型
C. 用typedef 只是将已存在的类型用一个新的标识符来代表
D. 使用typedef 有利于程序的通用和移植
14、以下各选项企图说明一种新的类型名,其中正确的是。
A. typedef v1 int;
B. typedef v2=int;
C. typedefv1 int v3;
D. typedef v4: int;
15、设有以下说明语句
typedef struct
{ int n;
char ch[8];
}PER;
则下面叙述中正确的是。
A. PER 是结构体变量名
B. PER 是结构体类型名
C. typedef struct 是结构体类型
D. struct 是结构体类型名
16、设有如下定义:
struck sk
{ int a;
float b;
} data;
int *p;
若要使P 指向data 中的a 域,正确的赋值语句是。
A. p=&a;
B. p=data.a;
C. p=&data.a;
D. *p=data.a;
二、读程序题,写出程序运行的结果。
1、
#include <stdio.h>
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);
}
2、
#include <stdio.h>
struct stu
{ int num;char name[10]; int age;};
void fun(struct stu *p)
{ printf("%s\n" ,(*p).name); }
void main()
{ struct stu students[3]={{9801,"Zhang",20} ,{9802,"Wang", 19} ,  {9803,"Zhao",18} };
fun(students+2);
}
3、
#include <stdio.h>
void main()
{ enum team { my ,your=4 ,his ,her=his+10};
printf("%d%d%d%d\n",my,your,his,her);
}
4、
#include <stdio.h>
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] };
void main()
{ p=aa;
printf("%d, ", ++p->x);
printf("%d, ",(++p)->x);
printf("%d\n",++(*p->y));
}
5、
#include <stdio.h>
union myun
{  struct
{  int x, y, z; } u;
int k;
} a;
void main()
{  a.u.x=4; a.u.y=5; a.u.z=6;
a.k=0;
printf("%d\n",a.u.x);
}
6、
#include <stdio.h>
struct STU
{ char num[10]; float score[3]; };
void main()
{  struct STU s[3]={{“20021”,90,95,85},{“20022”,95,80,75},        {“20023”,100,95,90}},*p=s;
int i; float sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf(“%6.2f\n”,sum);
}
7、
#include <stdio.h>
#include <stdlib.h>
struct NODE
{ int num; struct NODE *next; };
void main()
{ struct NODE *p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p->num=10; q->num=20; r->num=30;
p->next=q;q->next=r;
printf(“%d\n”,p->num+q->next->num);
}
8、
#include <stdio.h>
typedef union student

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。