admin 管理员组文章数量: 1184232
2024年1月23日发(作者:制表软件excel)
第八单元 结构体和共用体
一、选择题
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", 16};
根据上述定义,能输出字母M 的语句是 。
A. prinft(" %cn",class[3].name);
,"Adam",
1
18
B. printf(" %cn",class[3].name[1]);
C. prinft(" %cn",class[2].name[1]);
D. printf(" %cn",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("%dn",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 .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 的值为 。
2
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
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);
3
}
2、
#include
struct stu
{ int num;char name[10]; int age;};
void fun(struct stu *p)
{ printf("%sn" ,(*p).name); }
void main()
{ struct stu students[3]={{9801,"Zhang",20} ,{9802,"Wang", 19} ,
{9803,"Zhao",18} };
fun(students+2);
}
3、
#include
void main()
{ enum team { my ,your=4 ,his ,her=his+10};
printf("%d%d%d%dn",my,your,his,her);
}
4、
#include
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("%dn",++(*p->y));
}
5、
#include
union myun
{ struct
{ int x, y, z; } u;
int k;
4
} a;
void main()
{ a.u.x=4; a.u.y=5; a.u.z=6;
a.k=0;
printf("%dn",a.u.x);
}
6、
#include
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.2fn”,sum);
}
7、
#include
#include
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(“%dn”,p->num+q->next->num);
}
8、
#include
typedef union student
5
{ char name[10];
long sno;
char sex;
float score[4];
} STU;
void main()
{ STU a[5];
printf(“%dn”,sizeof(a));
}
三、填空题
1. 在C语言中,要定义一个结构体类型的变量,可采用三种方法,即 、 和 。
2. 编写一个程序,首先定义一个复数数据类型,即结构类型。然后按照复数的运算规则进行计算,并按照复数表示的格式进行输出。
main()
{ struct complex
{ int re;
int im;
}x,y,s,p;
scanf("%d%d",&,&);
scanf("%d%d",&,&);
= (1) ;
= (2) ;
printf(" sum=%5d+i*%5dn",,);
= (3) ;
=*+*;
printf("product=%5d+i*%5dn",,);
}
3. 有n个学生,每个学生的数据包括学号(num),姓名(name[20]),性别(sex),年龄(age),三门课的成绩(score[3])。要求在main函数中输入这n个学生的数据, 然后调用一个函数count,在该函数中计算出每个学生的总分和平均分, 然后打印出所有各项数据(包括原有的和新求出的)。
struct student
6
{ int num;
char name[20];
char sex;
int age;
float score[3];
float total;
float ave;
};
void count( (1) b[],int n)
{ int i,j;
for(i=0;i { (2) ; for(j=0;j<3;j++) b[i].total= (3) ; (4) ; } } void main() { int i;flaot s1,s2,s3; (5) ; struct student a[3]; for(i=0;i<3;i++) { scanf("%d%s %c%d%f%f%f",&a[i].num,a[i].name,&a[i].sex, &a[i].age,&s0,&s1,&s2); a[i].score[0]=s0;a[i].score[1]=s1;a[i].score[2]=s2; printf("%d %s %c %d %4.1f %4.1f %4.1fn",a[i].num,a[i].name, a[i].sex,a[i].age,a[i].score[0],a[i].score[1],a[i].score[2]); } count(a,3); printf("==============================================n"); printf("NO name sex age score[0] score[1] score[2] total aven"); for(i=0;i<3;i++) printf("%d %s %c %d %5.1f %5.1f %5.1f %5.1f %5.1fn", a[i].num,a[i].name,a[i].sex,a[i].age,a[i].score[0], a[i].score[1],a[i].score[2],a[i].total,a[i].ave); 7 } 4. 将上题改为用指针方法处理,即用指针变量逐次指向数组元素,然后向指针变量所指向的数组元素输入数据,并将指针变量作为函数参数将地址值传给count函数, 在函数count中作统计,再将数据返回到main函数,在main函数中输出。 struct student { int num; char name[20]; char sex; int age; float score[3]; float total; float ave; }a[3]; void count( (1) ,int n) { int i,j; for( (2) ) { (3) ; for(j=0;j<3;j++) b->total= (4) ; b->ave=b->total/3; } } main() {int i; float s0,s1,s2; struct student *p;
版权声明:本文标题:2016C语言习题全集及答案:第八单元结构体和共用体 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1705958308a495670.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论