第10章 结构体、共用体、枚举类
- 格式:doc
- 大小:61.00 KB
- 文档页数:5
计算机二级C语言考点:结构体和共用体计算机二级C语言考点:结构体和共用体C语言是一门通用计算机编程语言,应用广泛。
以下就是店铺分享计算机二级C语言考点结构体和共用体,希望对大家有帮助!【考点1】结构体类型的说明结构体是若干个类型数据的集合,结构体类型说明格式:struct 类型名 {类型1 成员名1;类型2 成员名2;……};,以上整个部分是一个数据类型,与整型的int是同样地位。
可用typedef把结构体类型替换成一个只有几个字母的简短标识符。
【考点2】结构体变量的定义结构体变量是用说明的结构体类型所定义的一个变量,与结构体类型不是一回事。
一个结构体变量所占字节数为其所有成员所占字节数之和。
如struct stu{char name[10];int age;} a,b;则表明定义了两个结构体变量a,b,每个变量占14个字节。
a,b与int i,j;中的变量i,j是同样地位。
typedef 考的'很多(教材150页例6)。
【考点3】结构体成员的引用引用成员可用以下3种方式:(1)结构体变量名.成员名;(2)指针变量名->成员名:(3)(*指针变量名).成员名。
点(.)称为成员运算符,箭头(->)称为结构指向运算符。
【考点4】共用体共用体的使用格式与结构体相似,共用体定义的关键字为union,共用体所占字节数是所有成员中字节数最大的那个。
union TT{ int a;char ch[2];} t1 ;main(){t1.a=0x1234;printf("%x ",t1.ch[0] );printf("%x ",t1.ch[1] );}考点一: sizeof (struct TT) = 2;考点二: TT t1 ; t1.a=0x1234;那么 ch[0]=0x 34; ch[1]=0x12结构体和共用体以及链表要掌握最简单的。
typedef 考的很多,而且一定要知道如何引用结构体中的各个变量,链表中如何填加和删除节点,以及何如构成一个简单的链表,一定记住链表中的节点是有两个域,一个放数值,一个放指针。
共⽤体类型,结构体类型⽬录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 含义:由不同类型数据组成的组合型数据结构成为结构体。
C语言习题结构体和杂类(答案)第十章结构体和杂类一.选择题1.如下说明语句,则下面叙述不正确的是(C)。
tructtu{inta;floatb;}tutype;A.truct是结构体类型的关键字B.tructtu是用户定义结构体类型C.tutype是用户定义的结构体类型名(变量名)D.a和b都是结构体成员名2.在16位PC机中,若有定义:tructdata{inti;charch;doublef;}b;则结构变量b占用内存的字节数是(D)。
A.1B.2C.8D.11A.1和2B.2和3C.7和2D.7和84.以下程序的输出结果是(D)。
unionmyun{truct{int某,y,z;}u;intk;}a;main(){a.u.某=4;a.u.y=5;a.u.z=6;a.k=0;printf(\A.4B.5C.6D.05.当定义一个共用体变量时,系统分配给它的内存是(C)。
A.各成员所需内存量的总和B.结构中第一个成员所需内存量C.成员中占内存量最大的容量D.结构中最后一个成员所需内存量6.若有以下程序段:uniondata{inti;charc;floatf;}a;intn;则以下语句正确的是(C)。
A.a=5;B.a={2,’a’,1.2}C.printf(“%d”,a);D.n=a;7.设truct{inta;charb;}Q,某p=&Q;错误的表达式是(d)。
A.Q.aB.(某p).bC.p->aD.某p.b9.以下对C语言中共用体类型数据的叙述正确的是(c)。
A.可以对共用体变量直接赋值B.一个共用体变量中可以同时存放其所有成员C.一个共用体变量中不能同时存放其所有成员D.共用体类型定义中不能出现结构体类型的成员10.下面对typedef的叙述中不正确的是(b)。
A.用typedef可以定义多种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植二.判断题1.共用体类型的变量的字节数等于各成员字节数之和。
《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
C语言结构体嵌套枚举型1. 介绍C语言是一种广泛应用于系统编程和嵌入式开发的高级编程语言。
在C语言中,结构体和枚举类型是两种常用的数据类型,它们分别用于组织和表示复杂的数据结构和枚举值。
结构体(struct)是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起,形成一个逻辑上相关的数据单元。
结构体可以包含基本数据类型(如整型、浮点型等)和其他结构体类型,这样就可以实现更复杂的数据结构。
枚举类型(enum)用于定义一组具名的常量值,枚举值可以作为整型来使用,但它们的取值范围是有限的,只能是预定义的枚举成员。
本文将介绍C语言中结构体和枚举类型的基本概念和用法,并重点讨论结构体中嵌套枚举型的应用。
2. 结构体的定义与使用2.1 结构体的定义在C语言中,可以使用struct关键字来定义一个结构体类型。
结构体定义的一般形式如下:struct结构体名 {数据类型成员1;数据类型成员2;// ...};其中,结构体名是用户自定义的名称,成员1、成员2等是结构体的成员变量名,可以根据实际需要定义多个成员变量。
成员变量的数据类型可以是任意合法的C数据类型,包括基本数据类型和其他结构体类型。
2.2 结构体的使用定义结构体类型后,可以使用该类型来创建结构体变量。
结构体变量的创建方式与普通变量类似,可以在定义时进行初始化,也可以在后续使用过程中进行赋值。
struct结构体名变量名1 = {初始值1, 初始值2, ...};struct结构体名变量名2;变量名2.成员1 = 值1;变量名2.成员2 = 值2;// ...结构体变量的成员可以使用.运算符来访问和修改,其中.左边是结构体变量名,右边是成员变量名。
2.3 结构体的嵌套在结构体中,可以使用其他结构体类型作为成员变量,这样就可以实现结构体的嵌套。
嵌套结构体可以更好地组织和表示复杂的数据结构。
struct结构体名1 {数据类型成员1;struct结构体名2 成员2;// ...};上述代码中,结构体名2是另一个结构体类型,可以在结构体名1中作为成员变量使用。
在C语言中,枚举体、联合体和结构体是用来定义新的数据类型的关键字。
它们都能够帮助程序员更好地组织数据,提高代码的可读性和可维护性。
在本文中,我们将深入探讨这三种数据类型的区别和特点。
一、枚举体(enum)1. 枚举体是一种由程序员定义的数据类型,用来表示一组有限的取值范围。
2. 在定义枚举体时,需要使用关键字enum,然后在花括号中列出枚举的取值。
3. 枚举体的每个取值都有一个对应的整数值,默认从0开始递增。
4. 枚举体可以用来定义一些常用的状态值,比如星期几、月份等。
5. 枚举体的定义形式如下:```enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};```二、联合体(union)1. 联合体也是一种由程序员定义的数据类型,用来表示相同的内存空间可以存储不同类型的数据。
2. 在定义联合体时,需要使用关键字union,然后在花括号中列出联合体的成员。
3. 联合体的大小等于其最大成员的大小。
4. 联合体的所有成员共享同一块内存,可以存储不同类型的数据。
5. 联合体可以用来节省内存空间,但在使用时需要谨慎,以避免数据混乱。
6. 联合体的定义形式如下:```union Data {int i;float f;char str[20];};```三、结构体(struct)1. 结构体是一种由程序员定义的复合数据类型,用来表示一组不同类型的数据。
2. 在定义结构体时,需要使用关键字struct,然后在花括号中列出结构体的成员。
3. 结构体的成员可以是不同类型的数据,可以是基本类型、数组、指针等。
4. 结构体的大小等于所有成员大小的总和,但可能会因为对齐规则而有所增加。
5. 结构体可以用来表示复杂的数据结构,比如学生信息、员工信息等。
6. 结构体的定义形式如下:```struct Student {int id;char name[20];float score;};```枚举体、联合体和结构体是C语言中用来定义新的数据类型的关键字,它们分别用来表示有限取值范围的枚举、共享内存空间的联合和复合数据类型的结构。
第10章结构体与共用体1.以下叙述中错误的是()。
A) 可以通过typedef增加新的类型B) 可以用typedef将已存在的类型用一个新的名字来代表C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:A【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。
2.以下关于typedef的叙述错误的是A) 用typedef可以增加新类型B) typedef只是将已存在的类型用一个新的名字来代表C) 用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D) 用typedef为类型说明一个新名,通常可以增加程序的可读性参考答案:A【解析】typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强移植性。
所以A选项错误。
3.若有以下语句typedef struct S{ int g; char h; } T;以下叙述中正确的是A) 可用S定义结构体变量B) 可用T定义结构体变量C) S是struct 类型的变量D) T是struct S类型的变量参考答案:B【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。
4.设有以下语句typedef struct TT{ char c; int a[4]; } CIN;则下面叙述中正确的是A) CIN是struct TT类型的变量B) TT是struct类型的变量C) 可以用TT定义结构体变量D) 可以用CIN定义结构体变量参考答案:D【解析】本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D 选项正确。
5.以下叙述中错误的是A) 可以用typedef将已存在的类型用一个新的名字来代表B) 可以通过typedef增加新的类型C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:B【解析】本题考查typedef的用法,typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。
(完整)谭浩强c语言程序设计习题集编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)谭浩强c语言程序设计习题集)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)谭浩强c语言程序设计习题集的全部内容。
目录重要次重要重复或欲删除基础第一章 C语言概述1。
1 选择题1.2 填空题第二章数据类型、运算符与表达式2。
1 选择题2.2 填空题第三章最简单的C程序设计3。
1 选择题3。
2 填空题第四章逻辑运算和判断选取控制4。
1 选择题4。
2 填空题4。
3 编程题第五章循环控制5。
1 选择题5。
2 填空题5.3 编程题第六章数组6。
1 选择题6.2 填空题6.3 编程题第七章函数7。
1 选择题7.2 填空题7.3 编程题第八章编译预处理8.1 选择题8.2 填空题8。
3 编程题第九章指针9.1 选择题9.2 填空题9。
3 编程题第十章结构体和共用体10.1 选择题10.2 填空题10.3 编程题第十一章位运算11.1 选择题11。
2 填空题11。
3 编程题第十二章文件12。
1 选择题12。
2 填空题12.3 编程题第一章 C语言概述1。
1 选择题*1.1一个C程序的执行是从 A 。
A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束参考答案:A参考分析:C语言总是从main函数开始,main函数结束。
但是C语言中存在一个exit(0)函数,它可以使得程序在任何时候、任何位置结束程序的运行。
1 声明一个结构体类型的一般形式为:
struct 结构体名
{成员表列};
如:struct student
{
int num;char name[20];char sex;
int age;float score;char addr[30];
};
2 定义结构体类型变量的方法
(1)先声明结构体类型再定义变量名
例如:struct student student1, student2;
| | |
结构体类型名结构体变量名
(2)在声明类型的同时定义变量
这种形式的定义的一般形式为:
struct 结构体名
{
成员表列
}变量名表列;
(3)直接定义结构体类型变量
其一般形式为:
struct
{
成员表列
}变量名表列;
即不出现结构体名。
注意:
成员名可以与程序中的变量名相同,二者不代表同一对象。
3 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。
例如:
scanf(″%d″,&student1.num);
(输入student1.num的值)
printf(″%o″,&student1);
(输出student1的首地址)
4 结构体数组的初始化
struct student
{int num;char name[20]; char sex;
int age; float score; char addr[30];
}stu[2]={{10101,″LiLin″,′M′,18,87.5,″103 BeijingRoad″},{10102,″Zhang Fun″,′M′,19,99,″130 Shanghai Road″}};
5 指向结构体变量的指针
#include <string.h>
#include <stdio.h>
void main()
{struct student{long num;char name[20];
char sex; float score;};
struct student stu_1;
struct student* p; p=&stu_1;
stu_1.num=89101;strcpy(stu_,”LiLin”);
stu_1.sex=‘M’;stu_1.score=89.5;
printf(″No.:%ld\nname:%s\nsex:%c\nscore:%f\n″,stu-1.num,,stu-1.sex,stu-1.score);
printf(″No.:%ld\nname:%s\nsex:%c\nscore:%f\n″,(*p).num,(*p).name,(*p).sex,(*p).score);
}
6 以下3种形式等价:
结构体变量.成员名
(*p).成员名
p->成员名
7 用指针处理链表
(1)malloc函数
(2) calloc函数
(3) free函数
其函数原型为void free(void *p);
7.1 typedef struct
{
int n;
struct
{
int y,m,d;
}date;
}PERSON;
下面定义结构体数组并赋初值
PERSON x[2]={1,04,10,1,2,04,12,30};
PERSON x[2]={{1,04,10,1},{2,04,12,30}};
PERSON x[2]={1,{04,10,1},2,{04,12,30}};
7.2
struct person
{
int id;
char name[10];
}per={1,"123456"};
="123456"
[0]='1'
7.3
struct sk
{
int n;
float x;
}date,*p;
要使p指向date中的n域:
p=(struct sk *)&date.n;
8 共用体的概念
使几个不同的变量共占同一段内存的结构称为“共用体”类型的结构。
共用体变量所占的内存长度等于最长的成员的长度。
不能引用共用体变量,
而只能引用共用体变量中的成员。
不能对共用体变量名赋值,
不能企图引用变量名来得到一个值,
不能在定义共用体变量时对它初始化(只有一个成员时可以,也可以只初始化一个值)。
不能把共用体变量作为函数参数,
不能使函数带回共用体变量,
但可以使用指向共用体变量的指针
8.1 声明共用体类型、定义共用体类型变量的方法与结构体类型一样
9 枚举类型:
将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
说明:
(1)在C编译中,对枚举元素按常量处理,故称枚举常量。
它们不是变量,不能对它们赋值。
(2) 枚举元素作为常量,它们是有值的,C语言编译按定义时的顺序使它们的值为0,1,2…
(3) 枚举值可以用来作判断比较。
(4) 一个整数不能直接赋给一个枚举变量。
9.1 声明枚举类型、定义枚举类型变量的方法与结构体类型一样
10 枚举类型不支持++操作
enum color
{
red,yellow,blue,white,black
};
enum color i;
for (i=red;i<=black;i=(enum color)(i+1))
10.1
enum money
{
fen1=1,fen2=2,fen5=5,
jiao1=10,jiao2=20,jiao5=50,
yuan1=100,yuan2=200,yuan5=500,yuan10=1000,
yuan50=5000,yuan100=100000
};
11 用typedef定义类型
声明NUM为整型数组类型:
typedefintNUM[100];
声明STRING为字符指针类型:
typedef char *STRING;
声明POINTER为指向函数的指针类型,该函数返回
整型值:
typedef int (*POINTER)()
12 ①先按定义变量的方法写出定义体(如:int i)。
②将变量名换成新类型名(例如:将i换成COUNT)。
③在最前面加typedef
(例如:typedef int COUNT)。
④然后可以用新类型名去定义变量。
①先按定义数组变量形式书写:int n[100];
②将变量名n换成自己指定的类型名:
int NUM[100];
③在前面加上typedef,得到
typedef int NUM[100];
④用来定义变量:NUM n;
13(3) 当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。
(4) 使用typedef有利于程序的通用与移植。
(5) typedef与#define有相似之处,例如:typedef int COUNT;#define COUNT
int的作用都是用COUNT代表int。
但事实上,它们二者是不同的。
#define 是在预编译时处理的,它只能作简单的字符串替换,而typedef是在编译时处理的。
实际上它并不是作简单的字符串替换,而是采用如同定义变量的方法那样来声明一个类型。