结构体、共用体与枚举类型

合集下载

10 结构体

10 结构体

}
程序运行结果如下:
Number:102
Name:Zhang ping
Sex:M
Age:20
Score:78.5
本例中,对结构体变量 boy1 作了初始化赋值,然后把 boy1 的值整体赋予 boy2,最后 用 printf 函数输出 boy2 各成员的值。
10.3 结构体数组
10.3.1 结构体数组的定义 结构体数组的每一个元素都具有相同的结构体类型。在实际应用中,经常用结构体数
10.4.1 指向结构体变量的指针 指向结构体变量或结构体数组的指针称为结构体指针变量(可简称为结构指针),其
值为所指向的结构体变量或结构体数组的首地址。 定义结构体指针变量的一般形式为: struct 结构体名 *结构体指针变量名 例如: struct stu boy,*pstu; 定义了结构体变量 boy 和结构体指针变量 pstu,通过赋值语句可使 pstu 指向 boy,即: pstu=&boy; /* boy 的地址赋给 pstu */ 注意: (1) 结构体指针变量与普通指针变量的性质一样,赋值前不能使用。 (2) 编译系统不给代表结构类型的结构体名分配空间,所以下面的用法是错误的。 pstu=&stu; 利用结构体指针可以访问结构体变量的各个成员,一般形式为: 结构体指针变量->成员名 其中,运算符“->”的优先级比较高,高于算术运算符、关系运算符、逻辑运算符等。
char sex;
int age;
float score;
}boy2,boy1={102,"Zhang ping",'M',20,78.5};
boy2=boy1;
printf("Number:%d\nName:%s\n",boy2.num,);

C语言实验八

C语言实验八

实验8 结构体、共用体与枚举类型一、实验目的和要求1.掌握枚举类型的基本使用方法。

2.掌握共用体的概念和应用。

3.掌握结构体变量及结构体数组的定义和使用。

4.掌握简单链表的基本使用方法。

二、实验内容和步骤1.有5个学生,每个学生的数据包括学号、姓名、性别、4门课的成绩,从键盘输入5个学生的数据,要求输出4门课的平均成绩,以及平均成绩最高的学生信息(包括学号、姓名、性别、4门课的成绩、平均分数)。

同时要求用in函数输入5个学生数据;用aver函数求平均分;用max函数找出平均成绩最高的学生数据;学生的数据在out函数中输出。

2.输入和运行以下程序。

#include <stdio.h>union data{char c[4];long b;int i[2];};main(){union data s;scanf("%c,%c,%c,%c",&s.c[0],&s.c[1],&s.c[2],&s.c[3]);printf("i[0]=%d,i[1]=%d\nb=%ld\nc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c\n",s.i[0],s.i[1],s.b,s.c[0],s.c[1],s.c[2],s.c[3]);}(1)输入4个字符a,b,c,d给s.i[0],s.c[1],s.c[2],s.c[3],并分析运行结果。

(2)将scanf()改为:scanf("%ld",&s.b);输入876543给b,分析运行结果。

3.请用枚举类型表示一年的十二个月份,并输出每个月的天数。

4.建立一个有5个结点的单向链表,每个结点包含姓名、年龄和工资。

编写两个函数,一个用于建立链表,另一个用来输出链表。

5.在上面的基础上,写一函数find,根据姓名查找一个结点,并输出该结点信息。

6.在上面的基础上,写一函数del,根据姓名(假定姓名不能重名)删除一个结点,并输出删除后的链表。

第十一章结构体

第十一章结构体

第十一章结构体与共用体通过本章实验作业应达目标1.掌握结构类型变量与数组的定义和使用。

2.掌握使用结构指针和结构变量名使用结构成员的方法。

3.掌握链表的基本概念和操作(选做)。

本章上交作业程序11_1_1.c,11_2_1.c上传至211.64.135.121/casp。

实验一结构体类型、共用体类型和枚举类型的定义【预备知识】C语言按常量处理枚举元素。

枚举元素和枚举变量在内存中按整型(int)数据方式存储。

定义枚举类型时,用户可指定枚举元素的值,未指定值的枚举元素依前面枚举元素的值顺序排列。

多个枚举元素可取同一值。

共用体与结构体类型可以嵌套定义。

【实验目的】理解并掌握结构体类型、共用体类型和枚举类型的概念和定义方法,测试这几种自定义类型变量所占内存空间的字节数,掌握各类变量的定义和引用。

【实验内容】作业1.定义一个结构体类型,其成员包括:学号、姓名、性别(char型)、年龄、高数、计算机、物理、英语、总分、平均分。

同时定义一个该类型的变量,保存一个学生信息:203212022 李明 f 21 87 96 92 85 。

计算并保存该学生的总分与平均分。

请以11_1_1.c命名本程序。

实验二顺序表结构的数据管理程序(综合类)【实验目的】掌握使用结构体数组组织与管理数据的方法,掌握指向结构体变量的指针变量应用。

【实验内容】作业1.以本章“实验一结构体类型、共用体类型和枚举类型的定义”中的结构体类型定义一个结构体数组,编写函数input( )实现从键盘输入表11-1中数据给数组。

表11-1用以创建结构体数组的原始数据作业3.编写查询函数seek(),通过键盘输入一个姓名,查询该同学的各种数据;若此同学不存在,则输出“NO FIND”。

如:输入“Marry”,则输出1003号同学各项数据;输入“Machael”,则输出“No find”。

作业4.编写按总分排序程序sort(),根据每位学生的总分降序排列。

结构体、共用体、枚举和ty

结构体、共用体、枚举和ty

每个数组元素都是一个共用体变 量,可以存储不同类型的值。
共用体数组在内存中占用的空间 等于数组长度乘以共用体的大小。
共用体指针
共用体指针是指向共用体类型数据的 指针。
使用共用体指针可以方便地处理不同 类型的数据,提高代码的灵活性和效 率。
通过共用体指针可以访问共用体的成 员,并对其进行操作。
03
05
结构体、共用体、枚举和ty的应用
在数据结构中的应用
结构体
用于表示复杂的数据结构,如点、线、面等几何形状,或学生、 教师等具有多个属性的实体。
共用体
用于节省存储空间,当多个数据项不会同时出现时,可以使用共 用体来存储它们,以减少内存占用。
枚举
用于定义一组命名的常量,增加代码的可读性和可维护性。
ty类型变量的使用可以提高 代码的可读性和可维护性, 同时方便进行数据类型转换
和运算。
在定义ty类型变量时,需要注 意变量的作用域和生命周期, 避免出现变量名冲突和内存泄
漏等问题。
ty类型数组
1
ty类型数组是使用ty类型定义的数组,其定义方 式与基本数据类型数组的定义方式相同。
2
通过定义ty类型数组,可以方便地处理一组相同 类型的数据,提高代码的可读性和可维护性。
存空间大小以及可以进行的操作等。
ty类型的定义使用关键字`typedef`,语法格式为 `typedef 原有类型 别名;`,其中原有类型可以是基本
数据类型、结构体、共用体、枚举等。
通过定义ty类型,可以简化代码,提高代码的可读性 和可维护性。
ty类型变量
ty类型变量是使用ty类型定义 的变量,其定义方式与基本数 据类型变量的定义方式相同。
结构体指针

C语言第9章结构体、共用体、枚举

C语言第9章结构体、共用体、枚举

结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类

C语言知识总结——宏,枚举,结构体,共用体

C语言知识总结——宏,枚举,结构体,共用体

C语言知识总结——宏,枚举,结构体,共用体1、define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。

因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。

define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。

,因此在编译时它不对宏的定义进行检查,作用域不影响对常量的访问。

它的常量值只能是字符串或数字。

该命令有两种格式:一种是简单的常量宏定义, 另一种是带参数的宏定义。

不带参数的宏:#define< 名字 >< 值 > 要注意,没有结尾的分号,因为不是C的语句,名字必须是一个单词,值可以是各种东西,宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。

如有错误,只能在编译已被宏展开后的源程序时发现。

注意.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。

宏定义其作用域为宏定义命令起到源程序结束。

如要终止其作用域可使用#undef命令带参数的宏:像函数的宏,一般的定义形式:带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意带参数宏的原则一切都要有括号,参数出现的每个地方都要有括号。

带参数的宏在大型的程序的代码中使用非常普遍,在#和##这两个运算符的帮助下可以很复杂,如“产生函数”,但是有些宏会被inline函数代替(C++的函数)使用宏好处:“提高运行效”。

定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。

第9章 结构体、共用体和枚举类型

第9章 结构体、共用体和枚举类型
第9章 结构体、共用体和枚举类型
9.1 结构体类型与结构体变量 9.2 结构体数组 9.3 向函数传递结构体型数据 9.4 链表 9.5 共用体 9.6 枚举类型 9.7 用户自定义类型

9.1 结构体类型与结构体变量
• 结构体类型的定义
–概述:
• 建立单链表的主要步骤为:
– 生成只含有头结点的空链表; – 然后读取数据信息,生成新结点,将数据存放于新结点中, 插入新结点到单链表中 – 重复第二步,直到输入结束。 根据新结点插入到链表的位置的不同,建立链表的方式, 分为在表尾插入的方法和在表头插入的方法。 •表尾插入: 例9.6 •表头插入: 例9.7
• 共用体变量的定义
–用已定义的共用体类型去定义共用体变量 –定义共用体类型的同时定义变量: –定义无名共用体类型的同时定义变量:
• 共用体变量的引用
–引用方式:共用体变量名.成员名 共用体变量名. 共用体变量名 –说明: 对于共用体变量,只能引用它的成员,而不能引用整个 共用体变量。若共用体的成员是构造类型的,则需要逐级引 用至最低级的成员。 –能通过定义指向共用体的指针变量来引用共用体变量。
在实际应用中,一组相关的数据可能是不同类型的。C语 言提供了包含不同类型成员的类型来定义这样的数据,这 种类型就是结构体类型 结构体类型。 结构体类型
– 定义形式:
struct 结构体名 类型名1 成员名1 {类型名1 成员名1; 类型名2 成员名2 类型名2 成员名2; …… 类型名n 成员名n 类型名n 成员名n; };
• 举例
例9.11 上一页
9.6 枚举类型
• 枚举类型的定义–定义来自式:enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n}; •

c语言允许的数据类型

c语言允许的数据类型

c语言允许的数据类型C语言允许的数据类型在C语言中,数据类型是用来定义变量或函数返回值的属性。

C语言中允许的数据类型包括基本数据类型和派生数据类型。

本文将详细介绍C语言允许的数据类型及其特点。

1. 基本数据类型1.1 整型(int)整型是C语言中最基本的数据类型之一,用于表示整数。

整型可以分为有符号整型和无符号整型。

有符号整型可以表示正数、负数和零,而无符号整型只能表示非负数和零。

整型的大小取决于编译器和操作系统,但一般情况下,int类型占用4个字节。

1.2 浮点型(float和double)浮点型用于表示带有小数点的数值。

C语言中提供了两种浮点型数据类型:float和double。

float类型占用4个字节,而double类型占用8个字节。

double类型的精度比float类型更高,可以表示更大范围的数值。

1.3 字符型(char)字符型用于表示单个字符。

在C语言中,字符型变量通常占用1个字节。

字符型可以表示ASCII码、字母、数字、符号等各种字符。

2.1 数组(array)数组是由相同类型的元素组成的集合。

在C语言中,数组可以存储多个元素,并通过下标来访问各个元素。

数组的大小在定义时确定,并且不可改变。

2.2 指针(pointer)指针是用于存储内存地址的变量。

通过指针,可以间接访问存储在内存中的数据。

指针在C语言中非常重要,它可以用于动态分配内存、传递函数参数等。

2.3 结构体(struct)结构体是由不同类型的变量组成的集合。

在C语言中,结构体可以用来表示复杂的数据结构。

通过结构体,可以将多个不同类型的变量组织在一起,形成一个逻辑上的整体。

2.4 共用体(union)共用体是一种特殊的数据类型,可以在相同的内存位置存储不同的数据类型。

共用体的大小取决于最大的成员变量的大小。

2.5 枚举(enum)枚举用于定义一组命名的常量。

通过枚举,可以为一组相关的常量赋予有意义的名称,提高代码的可读性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

☆☆ 第8章 结构体、共用体与枚举类型
6
未了解决这个问题,C语言定义了一种可由用户自定义的数据 类型,根据实际问题,将不同数据类型集中一起,把内在有 联系的不同类型的数据统一成一个整体,设计符合要求的新 的数据类型,称为结构体类型。这样利用结构体的特性可以 把某一个学生的所有相关的不同类型的数据项都顺序存储在 一起,便于一个个学生的处理。
☆☆ 第8章 结构体、共用体与枚举类型
9
【例9-1】按表9-1的形式从键盘依次输入每个学生的学号,姓 名,出生年月,三门课的成绩,计算并打印出每个学生的平均 成绩。 分析:这里首先要定义一个描述学生学号,姓名,出生年月, 三门课,平均成绩的结构体类型,再定义一个结构体变量,通 过循环语句对这个结构体变量的各个成员的引用,读入某一个 学生的各个数据项,再计算出某一个学生的平均成绩并打印某 个学生的各个数据项。接着读下一个学生的数据项,再计算和 打印各个数据项。
❖ ……..
☆☆ 第8章 结构体、共用体与枚举类型
5
这些数组的数据在内存中的存储顺序是:先存储所有学生 的学号、再接着存储所有学生的姓名、接着性别、出生年 份、出生月份、联系电话、课程成绩、平均成绩。
也就是把所有学生的同一个类别(上表中某一列)以定义 某一个数组的形式单独放在一起,相当于所有学号放在一 个数组里里,所有姓名放在另一个数组里,依次类推,要 处理某一个学生的信息如计算平均值并打印某个学生的信 息,要分别查询所有不同的数组,很容易出错且效率不高。 这样为每一项内容分别定义变量或数组的方法导致存储结 构零乱,处理过程非常繁琐,一般不采用这种方法。
☆☆ 第8章 结构体、共用体与枚举类型
10
#include <stdio.h> #define M 10 struct student /*定义一个学生的结构体*/ { int stu_id; char stu_name[8]; struct datme[100][8]={“陈云”, “沈栋栋”, “易婷婷”, “谢浩杰”, “郑强”}; /*定义字符串数组存放每个学生的姓 名*/
❖ char stu_sex[100] ={‘m’ , ‘m’ ,‘f’ ‘m’, ‘m’}; /*定义字符数组 存放每个学生的性别*/
❖ int stu_year[100]={1989,1989,1990,1988,1988}; /*定义一维数 组存放每个学生的出生年份*/
☆☆ 第8章 结构体、共用体与枚举类型
3
9.1 问题的提出与示例
❖ 下表是一张100个学生成绩管理表,要求计算并打印出每个学生的平均 成绩。
学号
姓名 性 出生年 联系电话 家庭地址 数学 英语 C程序 平均
别月
成绩
84773801 陈 男 1989.2 87500341 浙江宁波 80 89 76 云
☆☆ 第8章 结构体、共用体与枚举类型
4
9.1 问题的提出与示例
❖ 如果按照以前学过的数组方法,可以定义如下的多个数组并 赋初值如下:
❖ int stu_id[100]={ 84773801 , 84773802, 84773803, 84773804, 84773805, 84773806}; /*定义一维数组存放每个学生的学号 */
第9章 结构体、共用体与枚举类型
❖ 本章要求
▪ 为什么要引入结构体,结构体与数组有什么本质不同? ▪ 如何定义结构体,有几种定义形式? ▪ 结构体变量与结构体指针变量有何区别,它们如何各自引用
结构体成员? ▪ 结构体数据如何作为函数的参数? ▪ 为什么要引入链表,如何利用链表对内存进行动态管理?
❖ 本章重点
};
☆☆ 第8章 结构体、共用体与枚举类型
8
声明了一种新的数据类型struct student。这个数据类 型仅相当于一种结构模式,与int,float,char等类型 具有同等地位,也就是用户自定义了一种新的数据类 型,但并没有为struct student分配相应的存储空间, 就像系统并没有为int分配存储空间一样,而是需要定 义一个整型变量,为这个整型变量分配存储空间。同 样的,也需要一个结构体变量,为这个结构体变量分 配存储空间。
☆☆ 第8章 结构体、共用体与枚举类型
7
如针对上述要求,可以定义为如下的学生的结构体:
struct student { int stu_id; /*学生的学号*/ char stu_name[8]; /*学生的姓名*/ char stu_sex; /*学生的性别*/
struct { int year; /*学生的出生年份*/
▪ 结构体变量的定义和使用 ▪ 链表的概念
❖ 本章难点
▪ 动态链表的常见操作
☆☆ 第8章 结构体、共用体与枚举类型
1
第9章 结构体、共用体与枚举类型
❖9.1 问题的提出与示例 ❖9.2 结构体类型的说明与变量定义 ❖9.3 结构体指针变量 ❖9.4 结构体数组 ❖ 9.5结构体与函数 ❖9.6 链表与动态内存管理 ❖9.7 结构体综合应用举例
int month; /*学生的出生月份*/
} birthday; int stu_phone; /*学生的联系电话*/ char stu_address[30]; /*学生的家庭地址*/ int stu_course[3]; /*学生的三门课成绩*/ float stu_average; /*学生的平均成绩*/
☆☆ 第8章 结构体、共用体与枚举类型
2
9.1 问题的提出与示例
❖9.1.1 结构体概述
例如,描述一个学生的数据实体包含学号、姓名、性别、 出生年月、课程成绩、家庭住址、联系电话等数据项。各 个数据项的类型是不同的,学号可为整型或字符串形式; 性别为字符型;出生年月又分为年,月,日,它们可以分 别为整型表示;课程成绩可以是整型或实型;家庭住址应 为字符串;电话号码可以是整型或字符串形式。对于这样 一个实体,不能统一用数组来描述,因为数组中各元素的 类型、长度必须一致。如果用独立的简单数据项或数组分 别表示它们,就不能体现一个实体数据的整体性和相互关 联性,也难以操作。对于这种由多种不同类型的数据组成 的数据实体,C语言专门用结构体数据类型来描述,结构体 中所包含的数据项称为结构体的成员,结构体由用户根据实 际来定义。
相关文档
最新文档