第7讲 结构体与共用体 7.1 结构体 7.2 共用体.

Slides:



Advertisements
Similar presentations
目 录  第 1 章 C++ 概述  第 2 章 数据类型、运算符和表达式  第 3 章 简单的输入 / 输出  第 4 章 C++ 的流程控制  第 5 章 函数  第 6 章 编译预处理  第 7 章 数组  第 8 章 结构体、共同体和枚举类型  第 9 章 指针和引用  第.
Advertisements

程序设计导论 ——第15讲 结构与结构数组.
程序设计导论 结构与结构数组.
电子成绩单项目实现.
第10章 结构体与链表 本章要点: 结构体类型与结构体变量的定义 结构体变量的引用与初始化 结构体数组 链表处理 共用体类型和枚举类型
大学实用教程 C语言.
第八章 类和对象.
第九章 系 统 安 全 性 9.1 结构体 9.2 结构体型数组  9.3 结构体型指针 9.4 内存的动态分配 9.5 共用体
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
資料大樓 --談指標與陣列 綠園.
第九章 结构体 主讲教师 :贾月乐 电话:
第10章 结构体与共用体 概述 结构体 共用体 枚举类型.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
7.1 结构体类型 7.2 共用体 7.3 枚举类型 7.4 用typedef声明类型
第9章 结构体.
结构体和共用体 2 梁春燕 华电信息管理教研室.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
Chap 9 结构 9.1 构建手机通讯录 9.2 结构变量 9.3 结构数组 9.4 结构指针.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
程序设计专题 第2讲 - 结构 刘新国.
STRUCTURE 授課:ANT 日期:2010/5/12.
自定义数据类型 潘荣江 山东大学计算机科学与技术学院
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
Object-Oriented Programming in C++ 第一章 C++的初步知识
C语言程序设计 李祥.
辅导课程六.
第8章 结 构 体.
第11章 结构体和共用体.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 第二章 C++简单程序设计.
第七章 结构体、共同体和枚举类型.
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言复习3----结构体.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
第十章 结构体与链表 西安工程大学.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第九章 用户建立的数据类型.
第6讲 指针与引用 6.1 指针 6.2 引用.
第三章 数据抽象.
C++程式設計入門 變數與運算子 作者:黃建庭.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九节 赋值运算符和赋值表达式.
第二章 类型、对象、运算符和表达式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
本节内容 指针类型.
结构体与共用体 结构体 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体 自定义数据类型 结构体类型定义
本节内容 结构体.
C语言程序设计 第9章 结构体.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
第14讲 结构体和共用体 计算机与通信工程学院.
第八章 结构体和共用体 结构体类型和结构体变量 结构体数组 结构体指针变量 共用体.
變數與資料型態  綠園.
Chap 9 结构 9.1 构建学生信息库 9.2 计算学生平均成绩 9.3 学生成绩排序 9.4 修改学生成绩.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
安排座位.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第7讲 结构体与共用体 7.1 结构体 7.2 共用体

学习目标 理解结构体的概念。 掌握结构体、共用体类型的定义。 掌握结构体变量 、结构体数组和结构体指针 的使用。 理解共用体变量、共用体指针的使用。 理解链表的创建和输出。

第7讲 结构体与共用体 7.1.1 结构体的定义和初始化 7.1.2 结构体的使用 7.1.3 结构体数组 7.1.4 结构体与指针

字符串 字符+数字 数字 多种不同类型数据的混合结构 结构体数据 乘客信息系统,混合结构大数据管理

结构体的概念 结构体 将不同类型的数据有序组合在一起 是用户的自定义数据类型 需要先定义再使用

结构体的定义 结构体的定义格式: struct 结构体名 { 类型标识符1 成员名1; … 类型标识符n 成员名n; }; 自定义的结构体类型名 结构体的定义格式: struct 结构体名 { 类型标识符1 成员名1; … 类型标识符n 成员名n; }; struct是结构体类型的标识 结构体类型中成员的名字 分号不能缺!

登机乘客信息管理 登机乘客信息 编号 姓名 年龄 性别 体重 行李重量 所选套餐 No Name Age Sex Weight Luggage Meal 1 David 21 M 89.9 495.2 A 2 Kate 14 F 54.2 376.3 B 3 John 70 74.2 469.6 4 Mary 46 62.7 412.7

例1:定义结构体 struct passenger { int no; char name[20]; int age; char sex; float weight; float luggage; char meal; }; 编号 姓名 年龄 性别 体重 行李重量 所选套餐

结构体变量 结构体变量 为自定义结构体数据类型的变量 定义结构体类型变量时开辟内存空间 在内存所占的存储空间等于各成员存储空间的总和 1.先定义结构体类型再定义变量名 结构体变量定义方式 2.在定义结构体类型的同时定义变量名 3.不定义结构体类型名,只定义结构体变量名

结构体变量的定义 1. 先定义结构体类型再定义变量名 例1 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; 先定义结构体数类型 struct 结构体名 { 成员列表; } 结构体名 变量名列表 struct student student1, student2; 结构体类型名 变量1 变量2

结构体变量的定义方法 1. 先定义结构体类型再定义变量名 例2 struct date { int day; int month; int year; }; struct student char name[20]; struct date birthday; } struct student stu; 例2 一个结构体中可包含其他结构体的变量!

结构体变量的定义方法 1. 先定义结构体类型再定义变量名 例3 # define STUDENT struct student { int num; char name[20]; char sex; char addr[30]; }; STUDENT student1, student2; 利用宏简化程序! 凡是STUDENT的地方都用struct student机械替换

结构体变量的定义方法 2.在定义结构体类型的同时定义变量名 例1 struct 结构体名 { 成员列表 } 变量名列表; struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2; struct 结构体名 { 成员列表 } 变量名列表; 在定义结构体类型的同时定义变量

结构体变量的定义方法 3.不定义结构体类型名,只定义结构体变量名 例1 struct { 成员列表 } 变量名列表; struct { int num; char name[20]; char sex; int age; float score; char addr[30]; } student1, student2; 不出现结构体名 struct { 成员列表 } 变量名列表;

结构体变量定义 结构体变量的定义例 定义结构体类型变量时开辟内存空间 void main(void) { struct date { int year, month, day; } today; cout<<sizeof(struct date)<<endl; } 定义结构体类型变量时开辟内存空间 12

例:结构体变量的定义 变量类型 变量名 struct passenger person1, person2, person3, person4; struct passenger person[4]; 用数组替代具体变量

结构体变量的初始化 直接在结构体变量之后通过赋值语句完成初始化 对变量初始化,一一赋值 void main(void) { struct student { long int num; char name[20]; char sex; char addr[30]; } student1={901031, “Li Lin”, ‘M’, “123 Beijing Road”}; cout<<student1.name<<endl; 对变量初始化,一一赋值 输出: Li Lin

例3:结构体变量的初始化 struct passenger person[4]= { {1, “David”, 21, ‘M’, 89.9, 495.2, ‘A’}, {2, “Kate”, 14, ‘F’, 54.2, 376.3, ‘B’}, {3, “John”, 70, ‘M’, 74.2, 469.6, ‘B’}, {4, “Mary”, 46, ‘F’, 62.7, 412.7, ‘A’}; };

结构体变量的使用 结构体变量名 成员名 . 结构体变量的使用格式 成员运算符 cin>>student1; 结构体变量不能作为一个整体进行输入或输 出,只能分别使用变量的各个成员。 错误 cin>>student1; 必须用成员名引用 cin>>student1.num; student1.num=100;

结构体变量的使用 使用结构体变量成员格式 student1.birthday.day=25; 嵌套的结构体变量必须逐层引用。 student1.birthday.day=25; 如果结构体变量的成员本身又是一个结构体类型,则要用若干个成员运算符,由外向内逐层找到最内层的一级成员,而且只能对最内层的成员进行访问。

结构体变量的使用 如何统计选择B套餐的乘客数目,并输出他们的名字? for(i=0, select_B=0; i<4; i++) { if(person[i].meal==‘B’) select_B++; cout<<person[i].name<<endl; } cout<<“The total is”<<select_B<<endl; 结构体变量引用成员作为判断条件 统计B套餐的数目 输出选择B套餐的乘客姓名 Kate John The total is 2

结构体变量的使用 使用结构体变量成员格式 student1.birthday.day++; student1.score+=60; 结构体变量中的成员可以同一般变量一样进行运算。 student1.birthday.day++; student1.score+=60; 结构体变量的成员同普通变量一样,都可以进行同类型普通变量所允许的各种运算。

结构体数组 结构体数组定义 结构体数组:结构体数组中的每个元素都是 一个结构体类型的变量,其中包括该类型的 各个成员。数组各元素在内存中连续存放。 struct student { 成员列表; }; student std[5];

结构体数组 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } ; struct student stu[30]; struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; } stu[30]; 直接定义

结构体数组 结构体数组初始化 与数值型数组的初始化方式类似,只需将数组 的各个元素用花括号分隔开。 struct student 与数值型数组的初始化方式类似,只需将数组 的各个元素用花括号分隔开。 struct student { int num; char name[20]; char sex; } stu[3]={ {1011, "Li Lin",'M'}, {1012,"Wang Lan",'F'}, {1013,"Liu Fang",'F'}};

结构体数组 结构体数组名[下标].成员名 结构体数组的使用 结构体数组的引用与普通数组类似,同样通过下标 来访问。数组元素是结构体类型,所以只能对成 员进行访问。 结构体数组名[下标].成员名

例: struct person { char name[9]; int age; }; struct person bme[10]={ “Jone”,17, “Paul”,19, “Mary”,18, “Adam”,16 cout<<bme[3].name<<endl; cout<<bme[3].name[1]<<endl; cout<<bme[2].name[1]<<endl; cout<<bme[2].name[0]<<endl; 输出:Adam 输出:d 输出:a 输出:M

第7讲 结构体与共用体 7.1.1 结构体的定义和初始化 7.1.2 结构体的使用 7.1.3 结构体数组 7.1.4 结构体与指针 第7讲 结构体与共用体 7.1.1 结构体的定义和初始化 7.1.2 结构体的使用 7.1.3 结构体数组 7.1.4 结构体与指针 7.1.5 结构体的应用—链表

结构体与指针 例如:student stu; student *p=&stu; 结构体指针变量定义 结构体指针变量的定义和初始化格式与普通指 针变量类似。 例如:student stu; student *p=&stu;

结构体与指针 结构体指针变量的使用 格式: 结构体指针变量名->结构体成员名 (*结构体指针变量名).结构体成员名 例如:student stu; student *p=&stu; cout <<p->num <<(*p).num; 必须加圆括号,因为“.”运算符优先级更高。

例: #include <iostream> using namespace std; struct student //定义结构体 { long num; char name[20]; int age; }; void main() { student a={20418132,"ZhaoGang",23}; student *p; //定义结构体指针变量 p=&a; //给结构体指针变量赋值 cout<<a.num<<" "<<a.name <<" "; cout<<a.age<<endl; cout<<(*p).num<<" <<(*p).name<<" "; cout<<(*p).age<<endl; cout<<p->num<<" "<<p->name<<" "; cout<<p->age<<" "<<endl; }

第7讲 结构体与共用体 7.1 结构体 7.2 共用体

7.2 共用体 引入 定义一个student结构体,里面包含姓名、年龄、性别、班级等信息。 定义一个teacher结构体,里面包含姓名、年龄、性别、职称等信息。 定义一个结构体,它即表示student结构体,也表示teacher结构体。 在student结构体里面代表班级信息,在teacher结构体里面代表职称信息。 “共用”是指多种不同类型的变量从同一地址开始存放,共同占用同一段内存单元。

7.2 共用体 6.2.1 结构体与共用体变量的定义 6.2.2 共用体变量的使用 6.2.3 共用体与指针

7.2.1 共用体与共用体变量定义 共用体类型定义格式 union 共用体类型名 { 类型标识符1 成员名1; … 类型标识符n 成员名n; 7.2.1 共用体与共用体变量定义 共用体类型定义格式 union 共用体类型名 { 类型标识符1 成员名1; … 类型标识符n 成员名n; }; 共用体类型定义的标识符

7.2.1 共用体与共用体变量定义 共用体类型定义格式 union data { char a; int b; float c; };

7.2.1 共用体与共用体变量定义 所谓“共用”是指多种不同数据类型的变量从 同一地址开始存放,共同占用同一段内存单元 。 7.2.1 共用体与共用体变量定义 所谓“共用”是指多种不同数据类型的变量从 同一地址开始存放,共同占用同一段内存单元 。 但是在某一时刻有且仅有一个变量占用这一段 内存单元。 这种由不同类型的数据共用同一段内存单元的 用户自定义类型成为共用体。

7.2.1 共用体与共用体变量定义 可以把一个char型变量a,一个short型变量b和 一个long型变量c存放在起始地址为2000的同 一段内存单元中。 2000 a b c

7.2 共用体 7.2.1 结构体与共用体变量的定义 7.2.2 共用体变量的使用 7.2.3 共用体与指针

共用体变量的使用 共用体变量的使用 u1.a //只能直接使用变量中的成员 u1.b u1.c 不能对共用体变量初始化和赋值 union data { char a; int b; float c; }u1={‘A’, 25, 3.5}; //错误的! u1.a //只能直接使用变量中的成员 u1.b u1.c

共用体变量的使用 共用体变量的使用 共用体变量虽然可以存放几种不同类型的成员,但在同一时刻只能有一个成员起作用,其它成员不起作用。 不能对共用体变量初始化和赋值 共用体变量虽然可以存放几种不同类型的成员,但在同一时刻只能有一个成员起作用,其它成员不起作用。 共用体变量中起作用的成员是最后一次存放的成员。

共用体变量的使用 18 union un { int i; double y; }; struct st { char a[10]; union un b; cout<<sizeof(struct st)<<endl; 18

输出:4 8 x a b 4 2 1 in y 8 b void main(void) { union EXAMPLE { struct { int x, int y;} in; int a,b; }e; e.a=1; e.b=2; e.in.x=e.a*e.a; e.in.y=e.b+e.b; cout<<e.in.x<<‘\t’<<e.in.y<<endl; } x a b 4 2 1 in y 8 b 输出:4 8

共用体 7.2.1 结构体与共用体变量的定义 7.2.2 共用体变量的使用 7.2.3 共用体与指针

7.2 共用体 共用体与指针 共用体指针变量的定义与对共用体的引用形式与结 构体类似。 #include <iostream> 共用体指针变量的定义与对共用体的引用形式与结 构体类似。 #include <iostream> using namespace std; union data { char a; short b; long c; }; void main() { union data un,*p; p=&un; un.a='s'; cout<<p->a<<endl; un.b=6; cout<<p->b<<endl; un.c=18; cout<<p->c<<endl; }

7.2 共用体 7.2.1 结构体与共用体变量的定义 7.2.2 共用体变量的使用 7.2.3 共用体与指针

思考题: 额定重量是指安全飞行允许的每位乘客重量(乘客体重与 行李重量之和)的上限 额定重量是指安全飞行允许的每位乘客重量(乘客体重与 行李重量之和)的上限 2003年1月8日,由于多位乘客超过额定重量且满员飞行, 美联航一架客机在佛罗里达州失事。 设额定重量为530kg,编程检查班机上是否有超标乘客。若 有,输出乘客的信息。 网络课程平台http://course.cn/G2S/Template/View.aspx?action=view&courseType=0&courseId=2272