第9章结构体类型与共用体类型习题及答案

合集下载

结构体和共用体习题

结构体和共用体习题

习题六1. 从下列四个选项中选择一个正确的填入括号中。

(1)在说明一个结构体变量时系统分配给它的存储空间是(D)。

A该结构体中第一个成员所需存储空间B该结构体中最后一个成员所需存储空间C该结构体中占用最大存储空间的成员所需存储空间D该结构体中所有成员所需存储空间的总和(2)在说明一个共用体变量时系统分配给它的存储空间是(D )。

A该共用体中第一个成员所需存储空间B该共用体中最后一个成员所需存储空间C该共用体中占用最大存储空间的成员所需存储空间D该共用体中所有成员所需存储空间的总和(3)共用体类型在任何给定时刻, (B)。

A所有成员一直驻留在内存中B只有一个成员驻留在内存中C部分成员驻留在内存中D没有成员驻留在内存中(4)以下定义结构体类型的变量st1,其中不正确的是(A )A typedef stuct student{int num;int age;}STD;STD st1;B struct student{int num,age;}st1;C struct{int num;float age;}st1;D struct student{int num;int age;};struct student st1;(5)已知职工记录描述为:struct workers{int no;char name[20];char sex;struct{int day;int month;int year;}birth;};struct workers w;设变量w中的”生日”应是”1993年10月25日”,下列对”生日”的正确赋值方式是(C)。

A day=25; month=10; year=1993;B w.day=25w.month=10; w.year=1993;C w.birth.day=25; w.birth.month=10; w.birth.year=1993;D birth.day=25; birth.month=10; birth.year=1993;(6)设有如下定义:struct sk{int a;float b;}data,*p;若有p=&data;则对data中的a成员的正确引用是(B)。

C程序设计 第9章 结构型与共用型

C程序设计 第9章 结构型与共用型

上一页
返回
9.2 共用型


9.2.1共用型与共用型的定义
共用型和结构型类似,也是一种由用户自己定义的数据类型, 也可以由若干种数据类型组合而成,组成共用型数据的若干 数据也称为成员。和结构型不同的是,共用型数据中所有成 员占用相同的内存空间(以击要内存空间最大的成员的要求为 准)。设置这种数据类型的主要目的就是节省内存。 共用型击要用户在程序中自己定义,然后才能用这种数据类 型来定义相应的变量、数组、指针等。

上一页
下一页
返回
9.1 结构型


9.1.4结构型数组的定义
数组的元素也可以是结构型的,因此可以构成结构型数组。 结构型数组的每一个元素都具有相同结构型。在实际应用中, 经常用结构型数组来表小具有相同数据结构的一个群体,如 一个班的学生档案,一个车间的职工工资表等。定义方法和 结构型变量相似,只说明它为数组类型即可。




C语言不仅提供了丰富的数据类型,而目还允许用户用类型 定义符typedef定义类型说明符,也就是说允许用户为数据 类型取“别名”。 用typedef定义数组、指针、结构型等类型将带来很大的方 便,不仅使程序书写简单,而目使意义更为明确,因而增强 了可读性。 typedef 原类型名 新类型名 其中,新类型名一般用大写表示,以便于区别。 虽然也可用宏定义来代替typedef的功能,但是宏定义是由 编译预处理完成的,而用typedef定义类型是在编译时完成 的,后者更为灵活方便。
上一页
下一页
返回
9.2 共用型



9.2.2共用型变量的定义和使用
1.共用型变量的定义 共用型变量的定义与结构型变量定义相似,包括3种形式: ①union共用型名变量名表; ② union共用型名 成员表; 变量名表; ③union 成员表; 变量名表;

结构体与共用体相关题目练习

结构体与共用体相关题目练习

结构体与共用体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.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【】。

struct stud { char num[6]; int s[4]; double ave; } a,*p;5.程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是A)编译出错B)程序将顺利编译、连接、执行C)能顺利通过编译、连接、但不能执行 D)能顺利通过编译、但连接出错6.有如下定义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]);7.下面程序的输出是A)0 B)1 C)3 D)6main(){ struct cmplx { int x; int y;} cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}8.下列程序的输出结果是A)5 B)6 C)7 D)8struct 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);}9.有以下程序struct stu{ int num;char name[10];int age;};void fun(struct stu *p){ printf("%s\n" ,(*p).name); }main(){ struct stu students[3]={{9801,"Zhang",20} ,{9802,"Wang", 19} , {9803,"Zhao",18} };fun(students+2);}输出结果是A)Zhang B)Zhao C)Wang D)1810.设有如下定义: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.a11.下面程序的输出结果为int dt[4]={10 ,20 ,30 ,40} ;struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] } ;main(){ p=aa ;printf("%d\n" , ++p->x );printf("%d\n" ,(++p)->x);printf("%d\n" , ++( *p->y));}A)10 B)50 C)51 D)6020 60 60 7020 21 21 3112.为了建立如图所示的存储结构(即每个结点含两个域, data 是数据域,next是指向结点的指针域,)请填空。

共用体类型,结构体类型

共用体类型,结构体类型

共⽤体类型,结构体类型⽬录1.1 含义:⽤同⼀段内存存放不同类型的变量,也就是使⽤覆盖技术,后⼀个数据覆盖前⾯的数据,使⼏个不同的变量共享同⼀段内存的结构成为共⽤体。

往往在数据处理中,有时需要对同⼀段内存空间安排不同的⽤途,这时⽤共⽤体类型⽐较⽅便。

1.2 形式union Data{int i;char ch;float f;}a,b,c;1.3 引⽤共⽤体变量的⽅式如a.f;1.4 共⽤体类型的数据特点(1).共⽤体与结构体⾮常相似,结构体变量所占内存长度等于各个成员占内存长度的和,每个成员分别占有⾃⼰的内存,⽽共⽤体变量所占内存长度等关于最长的成员的长度。

(2).同⼀段内存可以存放⼏种不同类型的成员,但每⼀瞬间只能存放其中⼀个成员。

(3).可以对共⽤体变量初始化,但初始化表中只能有⼀个常量,union Data a = {16}。

(4).共⽤体变量中起作⽤的是最后⼀次被赋值的成员变量。

(5)共⽤体变量的地址和它的各个成员的地址都是同⼀地址。

(6)不能对共⽤体变量名赋值,也不能企图引⽤变量名来得到⼀个值,如a = 1 不对。

(7)可以使⽤共⽤体变量的指针做函数参数。

(8)共⽤体类型可以出现在结构体类型定义中,也可以定义共⽤体数组,繁反之也可以。

举⼀个简单的例⼦如下:1 #include<stdio.h>2struct3 {4int num;5char name[10];6char sex;7char job;8 union9 {10int clas;//成员班级11char posion[10];//成员职务12 }category; //成员共⽤体变量13 }person[2]; //定义结构体数组,有两个元素14int main()15 {16int i;17for (int i = 0; i < 2; i++)18 {19 printf("输⼊两个成员的数据信息:");20 scanf_s("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);21if (person[i].job == 's')22 scanf_s("%d",&person[i].category.posion);23else if (person[i].job == 't')24 scanf_s("%s", &person[i].category.posion);25else26 printf("输⼊有误");27 }28 printf("\n");29 printf("详细信息如下:");30for (int i = 0; i < 2; i++)31 {32if (person[i].job == 's')33 printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.clas); 34else35 printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.posion);36 }37return0;38 }View Code 含义:由不同类型数据组成的组合型数据结构成为结构体。

结构体和共用体习题

结构体和共用体习题

习题六1、从下列四个选项中选择一个正确得填入括号中。

(1)在说明一个结构体变量时系统分配给它得存储空间就是( D)。

A该结构体中第一个成员所需存储空间B该结构体中最后一个成员所需存储空间C该结构体中占用最大存储空间得成员所需存储空间D该结构体中所有成员所需存储空间得总与(2)在说明一个共用体变量时系统分配给它得存储空间就是(D )。

A该共用体中第一个成员所需存储空间B该共用体中最后一个成员所需存储空间C该共用体中占用最大存储空间得成员所需存储空间D该共用体中所有成员所需存储空间得总与(3)共用体类型在任何给定时刻, ( B)。

A所有成员一直驻留在内存中B只有一个成员驻留在内存中C部分成员驻留在内存中D没有成员驻留在内存中(4)以下定义结构体类型得变量st1,其中不正确得就是(A )A typedef stuct student{int num;int age;}STD;STD st1;B struct student{int num,age;}st1;C struct{int num;float age;}st1;D struct student{int num;int age;};struct student st1;(5)已知职工记录描述为:struct workers{int no;char name[20];char sex;struct{int day;int month;int year;}birth;};struct workers w;设变量w中得”生日”应就是”1993年10月25日”,下列对”生日”得正确赋值方式就是( C)。

A day=25; month=10; year=1993;B w、day=25w、month=10; w、year=1993;C w、birth、day=25; w、birth、month=10; w、birth、year=1993;D birth、day=25; birth、month=10; birth、year=1993;(6)设有如下定义:struct sk{int a;float b;}data,*p;若有p=&data;则对data中得a成员得正确引用就是( B)。

【VIP专享】程序设计基础(人民邮电出版社)答案第9章 结构体

【VIP专享】程序设计基础(人民邮电出版社)答案第9章  结构体

B.printf("%c\n",class[3].name[1]);
C.printf("%c\n",class[2].name[1]);
D.printf("%c\n",class[2].name[0]);
2. 若有以下结构体定义:
struct example
{int x1;
};
int y1;
则 B 是正确的使用方式。
{ int year,month,dat; } today; printf("%d\n",sizeof(struct date)); }
答案:6
(3) #include<stdio.h> void main() { struct MING
A.struct example.x1=100; B.struct example xy;xy.x1=100;
C.struct xy;xy.x1=100; D.struct example xy={100};
3. 下面结构体数组的定义,错误的是( D )。
A.struct student
{ int num;
一、选择题
1. 根据下面的定义,能打印出字母 M 的语句是( D )。
struct person{char name[9];
int age;
};
struct person class[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};
A.printf("%c\n",class[3].name);
};

结构体与共用体

结构体与共用体

4、共用体类型的变量如何赋初值,含义是什么?
不能对共用体变量名赋值,也不能在定义共用体变量时初始化。但可以用一个共用体变量为 另一个变量赋值
例:union
{ int i;
char ch;
double f;
}a={1,’a’,1.5}; ()
a=1;
()
m=a;
()
例:float x; union { int i; char ch; double f; }a,b; a.i=1; a.ch=‘a’; a.f=1.5; b=a; () x=a.f; ()
二. 枚举类型的应用
• 1.枚举类型变量的定义 ◆先定义枚举类型,再定义枚举类型变量
enum week{sun,mon,tue,wed,thu,fri,
sat};
enum week weekday,workday; ◆定义枚举类型的同时定义枚举变量 enum color {red,blue,green,black}a,b,c;
共用体类型的关键字
union 联合类型名 { 数据类型 成员名1 数据类型 成员名2
...........
数据类型 成员名n };
例:
union utype {
char ch; int i; float f; };
2、如何定义共用体类型的变量
(1)先定义类型,再定义变量,例如: union data /*共用体类型定义*/ { int i;
◆直接定义枚举变量 enum {male,female}sex1,sex2;
枚举类型变量的特点
例 enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN };
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

C语言程序设计ppt第9章 结构体、共用体和用户定义类型

C语言程序设计ppt第9章 结构体、共用体和用户定义类型

9.1.1 结构体类型数据的定义
• • • • 1.声明结构体标识名后,再定义结构体变量 格式: struct 结构体标识名 结构体变量名表 例如:在前面声明了结构体类型Student后,再来定义结构体变量stu1 和stu2。 • struct Student stu1,stu2; • 这种形式和定义其它类型变量形式相似(如int a,b;)。变量stu1和 stu2则具有Student类型的数据结构,是由多个数据成员组成的构造类 型的变量,如下图所示: • 在定义了结构体变量后,系统会为之分配内存单元,stu1和stu2分别占 据一段连续的存储单元,在Visual C++环境中,stu1和stu2分别占据33 字节(name 20个字节,sex 1个字节,age 4个字节,num 4个字节, score 4个字节)。
9.1 结构体
• • • • 9.1.1 结构体类型数据的定义 9.1.2 结构体类型数据成员的引用 9.1.3 结构体数组 9.1.4 结构体指针
9.1.1 结构体类型数据的定义
• • • • • • • • • • • • • • • • • • • • • 用户建立由不同类型数据组成的组合型的数据结构,称之为结构体类型,组成结构体 类型的每一个数据称之为该结构体类型的成员。在使用结构体类型时,首先要对结构 体类型的组成进行说明,称之为结构体类型的定义。 格式: struct 结构体标识名 { 数据类型 结构体成员名1; 数据类型 结构体成员名2; … 数据类型 结构体成员名n; }; 其中:“struct”为定义结构体类型的关键字。 例如: 以上学生的信息可定义为下列一个名为Student的结构体类型: struct Student // Student为结构体标识名 { char name[20]; //每个成员项以分号(;)结束 char sex; int age; int num; float score; }; //结构体定义以分号(;)结束 以上定义中,结构体类型Student由5个成员组成。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章结构体类型与公用体类型习题及其答案 9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。 解:#include "stdio.h" struct date { char month[10] ; int daynumber ; } main() { int i ; date a[12] ={{"January",31},{"February",29},{"March",31},{"Aprial",30},{"May",31},{"June",30},{"july",31},{"August",31},{"September",30},{"October",31},{"November",30},{"December",31}} ; for(i=0;i<12;i++); printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ; } 思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用? 9-4 编写程序求空间任一点到原点的距离,点用结构体描述。并请考虑求空间中任意两点的距离的程序。 解:#include "stdio.h" #include "math.h" struct point { float x ; float y ; float z ; } void main() { double d1,d2,d ; point p1,p2 ; printf("请输入第一个点的坐标:"); scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z); printf("请输入第二个点的坐标:"); scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z); d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z); d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z);

d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*(p2.z-p1.z)); printf("第一个点到原点的距离:%f\n",d1); printf("第二个点到原点的距离:%f\n",d2); printf("两点间的距离:%f\n",d); } 9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。 解:#include "stdio.h" struct AddressBook { char name[10] ; char address[30] ; char mailnumber[7] ; char telphone[12] ; char byphone[16] ; char movephone[1] ; } void main() { int i ; AddressBook fd[10] ; for(i=0;i<10;i++) { printf("请输入第%d个朋友的信息:\n",i+1); printf("姓名:"); scanf("%s",&fd[i].name) ; printf("地址:"); scanf("%s",&fd[i].address) ; printf("邮编:"); scanf("%s",&fd[i].mailnumber) ; printf("电话:"); scanf("%s",&fd[i].telphone) ; printf("传呼:"); scanf("%s",&fd[i].byphone) ; printf("手机:"); scanf("%s",&fd[i].movephone) ; } for(i=0;i<10;i++) { printf("\n第%d个朋友的信息:\姓名:%s\n 地址:%s\n 邮编:%s\n 电话:%s\n 传呼:%s\n 手机:%s\n",i+1,fd[i].name,fd[i].address,fd[i].mailnumber,fd[i].telphone,fd[i].byphone,fd[i].movephone) ; } } 思考:结构体类型变量的分量可以是各种基本数据类型(整型、实型、字符型等)或数组类型,是否可以是另一结构体类型? 9-6 用一个数组存放图书信息,每本图书包含书名、作者、出版年月、出版社、借出数目、库存数目等信息。编写程序输入若干本图书的信息,按出版年月排序后输出。 解:#include "stdio.h" #include "string.h" struct Book { char booktitle[30] ; char author[10] ; char publishday[10] ; char publishunit[22] ; char lendno[16] ; char stockno[11] ; } #define N 100 //假设图书数量不超过110册 main() { int i,j,k,n; Book ts[N] ,t; printf("请输入欲处理的图书数量:"); scanf("%d",&n); for(i=0;i{ printf("请输入第%d本书的信息:\n",i+1); printf("书名:"); scanf("%s",&ts[i].booktitle) ; printf("作者:"); scanf("%s",&ts[i].author) ; printf("出版年月:"); scanf("%s",&ts[i].publishday) ; printf("出版社:"); scanf("%s",&ts[i].publishunit) ; printf("借出数:"); scanf("%s",&ts[i].lendno) ; printf("库存数:"); scanf("%s",&ts[i].stockno) ; } for(i=0;i{ k=i; for(j=i+1;jif(strcmp(ts[k].publishday,ts[j].publishday)<0) k=j ; {t=ts[i],ts[i]=ts[j];ts[j]=t;} } printf("\n排序后的图书信息:"); for(i=0;i{ printf("\n书名: %s, 作者: %s, 出版年月: %s, 出版社: %s, 借出数: %s, 库存数:%s\n",ts[i].booktitle,ts[i].author,ts[i].publishday,ts[i].publishunit,ts[i].lendno,ts[i].stockno) ; } } 思考:在此程序中,ts[N]是一个什么类型的数组?每个数组的元素大约需占多少字节内存?为什么? 9-7 建立一张人员登记表,表中包括人员的姓名、性别、年龄、婚否,如为已婚,还包括爱人的姓名、年龄。将此表输出,假定人数不超过50人。 解:#include "stdio.h" #include "string.h" struct registerable { char name[10] ; char sex ; int age; char marry ; char wifename[10]; int wifeage ; } #define N 50 void main() { int i,n; struct registerable ts[N] ; printf("请输入欲录入人员数量:") ; scanf("%d",&n); for(i=0;i{ printf("请输入第%d个人的信息:\n",i+1); printf("姓名:") ; scanf("%s",ts[i].name); printf("性别:") ; scanf("%s",ts[i].sex); printf("年龄:") ; scanf("%s",ts[i].age); printf("婚否(y/n):") ; scanf("%s",ts[i].marry); if(ts[i].marry=='y'||ts[i].marry=='Y') { printf("妻子姓名:"); scanf("%s",&ts[i].wifename); printf("妻子年龄:"); scanf("%s",&ts[i].wifeage); } else { ts[i].wifename=" " ; ts[i].wifeage=0 ; } } printf("\n通信录信息表:"); printf("\n 姓名 性别 年龄 婚否 妻子姓名 妻子年龄\n") ; for(i=0;i{

printf("%8s %c %d %c %8s %d\n",ts[i].name,ts[i].sex,ts[i].age,ts[i].marry,ts[i].wifename,ts[i].wifeage); } } 思考: 结构体类型变量的分量与其对应类型的一般变量的区别是什么?在使用中有何不同? 9-8 定义一函数output(),输出学生的成绩数组。成绩数组中有20个学生的数据记录,每个记录包括学号、姓名及三门课的成绩。 解:#include "stdio.h"

相关文档
最新文档