哈工大c语言教学 结构体和共用体PPT课件
合集下载
C语言程序设计基础讲解第7章(结构体)PPT课件

2020/8/21
7.1 结构体数据类型
5
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整 体-------自定义数据类型
– 结构体类型定义
struct [结构体名]
Байду номын сангаас
合法标识符
{
可省:无名结构体
类型标识符 成员名;
struct是关 键字, };
类型标识符 成员名; …………….
成员类型可以是 基本型或构造型
定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名
例 struct student { int num;
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }变量名表列;
char name[20];
char sex;
int age;
float score;
char addr[30];
1
程序设计基础I
第七章 结构体与共用体
2
整体概况
+ 概况1
您的内容打在这里,或者通过复制您的文本后。
概况2
+ 您的内容打在这里,或者通过复制您的文本后。
概况3
+ 您的内容打在这里,或者通过复制您的文本后。
第七章 结构体和共用体
3
7.1结构体数据类型 7.2共用体数据类型 7.3枚举类型 7.4自定义数据类型
char name[2s0tr];ucctha结r 构n体am名e[2变0量]; 名表列;
char sex;
char sex;
int age;
int age;
float score; float score;
7.1 结构体数据类型
5
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整 体-------自定义数据类型
– 结构体类型定义
struct [结构体名]
Байду номын сангаас
合法标识符
{
可省:无名结构体
类型标识符 成员名;
struct是关 键字, };
类型标识符 成员名; …………….
成员类型可以是 基本型或构造型
定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名
例 struct student { int num;
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }变量名表列;
char name[20];
char sex;
int age;
float score;
char addr[30];
1
程序设计基础I
第七章 结构体与共用体
2
整体概况
+ 概况1
您的内容打在这里,或者通过复制您的文本后。
概况2
+ 您的内容打在这里,或者通过复制您的文本后。
概况3
+ 您的内容打在这里,或者通过复制您的文本后。
第七章 结构体和共用体
3
7.1结构体数据类型 7.2共用体数据类型 7.3枚举类型 7.4自定义数据类型
char name[2s0tr];ucctha结r 构n体am名e[2变0量]; 名表列;
char sex;
char sex;
int age;
int age;
float score; float score;
C语言程序设计结构体共用体及位运算PPT课件

个结构。成员可以在程序中单独使用,与普通变量完全相同。表示结构变量
成员的一般形式是:
•
结构变量名.成员名
•
例如:
•
jilu1.bianhao
/*记录1的编号
*/
• */
•
jilu2.xingbie
这有点像数据库中的字段。 第5页/共38页
/*记录2的性别
• 12.1.4 结构变量的赋值
• 完成。
结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来
放一个英文字母或符号,一个汉字通常要用两个字节来存储。每一个字节都
有自己的编号,叫做“地址”。一个字节由若干位(位的英文是bit)组成。
至于一个字节由几个位组成,取决于计算机的硬件系统。一般由8位、16位
或32位组成,所对应的计算机也被称为“8位机、16位机或32位机”。目
前微机以16位机或32位机为主。但在本书中作为原理讲述的是8位机。
•
我们把若干字节组成一个单元,叫做“字”(英文为word)。
一个字可以存放一个数据或指令。
第20页/共38页
• 2 原码
•
我们知道,计算机使用的是二进制数。但这些数据有不同的编码
方式,分别有原码、反码和补码。
•
以8位计算机系统为例,我们把最高位(即最左面的一位)留做
表示符号,其他7位表示二进制数,这种编码方式叫做原码。最高位为“0”
•
示例:如x=01010011,y=x>>2,则
y=00010100。
•
注意,左移会引起数据的变化,具体说,左移一位相当于对原来
的数值除以2。左移n位相当于对原来的数值除以2n。
• 4 按位与
第9章 结构体与共用体 教学PPT

9.1 结构体类型和结构体变量
• 9.1.2 结构体变量的定义
− 上个小节只是定义了结构体类型,它相当于一个模型,其中并无具体数 据,系统也不会为它分配实际的内存空间。为了能在程序中使用结构体 类型的数据,应该定义结构体类型的变量,并在其中存放具体的数据。
1.先定义结构体类型,再定义结构体变量 2.在定义结构体类型的同时定义结构体变量 3.直接定义结构体变量
9.7 进阶案例
• 求学生平均成绩
− 学习完了结构体与共用体的相关知识,接下来通过一个计算平均成绩 的案例来加深对结构体的理解,具体需求如下:
• 一个小组中有3个学生,每个学生修4门课程(三个学生修的课程 相同)
• 在程序中输入这3个同学的4门课程成绩,程序能自动计算出这4门 课程的小组平均成绩。
− 结构体变量作为函数参数的用法与普通变量类似,都需要保证调用函 数的实参类型和被调用函数的形参类型相同。结构体变量作函数参数 时,也是值传递,被调函数中改变结构体成员变量的值,主调函数中 不受影响。
9.4 结构体类型数据 在函数间的传递
• 9.4.2 结构体数组作为函数参数
− 函数间不仅可以传递一般的结构体变量,还可以传递结构体数组。接 下来,通过一个案例来演示如何使用结构体数组作为函数参数传递数 据,如例9-9所示。
结构体是一种构造数据类型,把不同类型的数据整 合在一起,每一个数据都称为该结构体类型的成员。
9.1 结构体类型和结构体变量
• 9.1.1 结构体类型定义
− 在程序设计中,使用结构体类型时,首先要对结构体类型的组成进 行描述,结构体类型的定义方式如下:
struct 结构体类型名称 {
数据类型 成员名1; 数据类型 成员名2; … 数据类型 成员名n; };
C语言程序设计第9章结构体与共用体简明教程PPT课件

//书名 //作者 //出版社 //价格
【例9.2】定义一个结构体类型struct student,描 述学生的基本信息,包含学号、姓名、性别和成绩
struct student { int num; //学号 char name[20]; //姓名 char sex; //性别, M-男,F-女 float score; //成绩 };
第9章
结构体与共用体
第9类型,但在实际问题中, 数据要复杂一些,往往具有不同的数据项和类型: 例如: 图书基本信息 用户自定义 学生基本信息 数据类型 球赛基本信息 ……
方法:创建结构体类型、共用体类型(或称为联合 体类型)和枚举类型
C语言程序设计 第9章 结构体与共用体 2
9.1 结构体类型
整 型
单精度型float
基本类型
实型(浮点型)
双精度型double
字符类型char
C 数 据 类 型
数组 构造类型
结构体struct 共用体union 枚举类型enum 指针类型
本章所介绍 空类型void 的数据类型
C语言程序设计
数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作
C语言程序设计
定义了结构体类型: struct book 定义了结构体变量: book1,book2;
第9章 结构体与共用体
14
• 方式三:
定义无名结构体类型的同时定义结构体变量
struct { 成员列表 } 变量名列表; struct { char name[40]; char author[100]; char publish[100]; float price; }book1,book2; 说明:第三种方法,由于没 有给出结构体类型标识符, 在实际应用中,此方法往往 是一次性的,适用于定义临 时的局部变量或者嵌套的结 构体成员变量。
第11章结构体与共用体共39页PPT资料

13.05.2020
10
#include<stdio.h>
#include<string.h>
struct person
{char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Fun",0}; void main()
{int i,j;
char leader_name[20];
➢在定义时初始化(eg11.1)
struct student { int num; char name[20]; char sex;
a.num=89031; a.sex=‘M’; name如何赋初值?
char addr[20];
}aa=;{89031,"Li Lin",'M',"123 Beijing Road"};
‘M’ 59B
18
87.5
stu[0]
“123 Beijing”
10102
“zhang fun” ‘M’ 19 99
“123 shanghai”
stu[1]
3)结构体数组的应用举例 例 11.2 对候选人得票的统计程 序。有3个候选人,每次输入一个 得票的候选人的名字,要求最后输 出各人的得票结果。
结构体类型
char sex;
short int age;
13.05.2020
float score;
struct student stu;
char addr[30];
};
1
➢ 结构体类型的形式:
struct 结构体名
《结构体和共用体》PPT课件

精选课件
13
在C语言的运算符中,取成员运算符“.”优先级最高, 故以上语句均为对引用之后的成员变量进行操作。若结构体 定义是嵌套的,则只能引用最低级的成员(用若干“.”运 算符,逐级引用到最低级)。如
stud3.birthday.year 是合法的,而
stud3.year 是非法的。
精选课件
14
2. 结构体类型变量可以整体引用来赋值。如stud2= stud1;即将变量stud1的所有成员的值一一赋给变量 stud2的各成员。结构体型变量只能对逐个成员进行输入或 输出,不可进行整体的输入输出,如:
};
有同样的地位和作分用号,不都可可少以用来定义变
量的类型。
精选课件
5
定义一个结构体类型的一般形式为: struct 结构体名
{ 类型标识符 成员1; 类型标识符 成员2; … 类型标识符 成员n;
};
成员的类型可为除该结构体类型外的任何一种类型,如 基本类型、指针类型和结构体类型。
精选课件
6
若定义结构体类型struct date如下:
10
3. 直接定义结构体类型变量,其一般形式为:
struct
{
成员表列;
}变量名表;
即不出现结构体名。如
struct
{char num[10];
char name[20];
char sex;
ቤተ መጻሕፍቲ ባይዱ
struct date birthday;
float score[3];
char tel[12];
}stud3,stud4;
结构体类型的名称
char sex;
结构体成员列表,
char birth在dasytr[u8c];t studen包t括类每型个起结作构用体的成范围内, float scorest[r3u]c;t student员和的系类统型提及供名的称标准类型
C语言程序设计教程第9章 结构体共用体PPT课件

2020/7/30
10
举例:
定义结构体: struct stu
{ char num[20]; char name[20]; char sex; float score;
}; 声明结构体变量: struct stu student1, student2;
2020/7/30
11
② 声明结构体类型的同时定义结构体 变量
第9章 结构体、共用体
9.1 结构体类型概述
9.2 结构体类型变量的定义和引用
9.3 结构体数组
9.4 结构体与指针
9.5 结构体与函数
9.6 链表的基本操作
9.7 共用体类型数据的定义和引用
9.9 位运算和位段
9.10 自定义类型(typedef)
9.11 常见错误及改正方法
2020/7/30
1
整体 概述
struct 结构体名 {
成员表列 }变量名表列;
如: struct stu { char num[20];
char name[20]; char sex; float score; } student1, student2
2020/7/30
12
③ 直接定义结构体类型变量
struct { 成员表列 }变量名表列; 这种定义方法没有出 现结构体名,只能定义 变量一次。
表中,通常包括学在生C语的言中学称号为结、构姓体类名型、性别、年
龄、姓成名绩、年家龄庭性地别址民等族项文目化。程度数组住只址能按电序话号组码 织多字符个数同组 类整型型的字数符据字,符显然整我型 们不字符能数用组 一长个整数型
2020/7/30
4
组来存放这一组数据。
9.1.1 结构体类型定义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体定义 可以嵌套
2020/11/8
16/60
12.2.6结构体变量的引用
访问结构体变量的成员必须使用成员选择运算符 (也称圆点运算符)
当出现结构体嵌套时,必须 以级联方式访问结构体成员
2020/11/8
17/60
12.2.6结构体变量的引用
【例12.1】演示结构体变量的赋值和引用方法
按结构体的成员顺序逐 一对相应成员进行赋值
有些语言(如PL/1)中试图规定较多的类型, 如数组、树、栈等,但实践证明不是个好办法
2020/11/8
4/60
12.1从基本数据类型到抽象数据类型
用户自己构造数据类型-复合数据类型 – 由基本数据类型迭代派生而来,表示复杂的数据对象
典型的代表就是“结构体”
抽象数据类型(Abstract Data Type,简称ADT) – 在复合数据类型基础上增加了对数据的操作
2020/11/8
6/60
数组的解决方法
2020/11/8
7/60
数组的解决方法
2020/11/8
8/60
数组的解决方法
数据的内存管理方式
分配内存不集中,寻址效率不高
对数组赋初值时,易发生错位
2020/11/8
结构显得零散,不易管理
9/60
希望的内存分配图
2020/11/8
10/60
结构体类型的声明
且结构所占的实际空间一般是按照机器字长对齐的
不同的编译器、平台,对齐方式会有变化
结构体变量的成员的存储对齐规则是与机器相关的
具有特定数据类型的数据项大小也是与机器相关的
所以一个结构体在内存中的存储格式也是与机器相关的
2020/11/8
22/60
12.3结构体数组的定义和初始化
2020/11/8
23/60
等价于
STUDENT *pt = &stu1;
stu1 成员1 成员2 成员3 成员4
成 员
5
2020/11/8
格式符%02d中2d前面的前导符0表示输
出数据时,若左边有多余位,则补0
2020/11/8
18/60
【例12.1】 若要从键 盘输入结 构体变量 stu1的内 容,那么 程序如何 修改?
2020/11/8
两个地址有何不同?
19/60
【例12.1】 若要从键 盘输入结 构体变量 stu1的内 容,那么 程序如何 修改?
二进制数——类型本不存在 – 内存里存的内容,你认为它是什么,它就
是什么
– 在早期的机器指令及汇编语言中,数据对
象均用二进制数表示,没有类型的概念
一般的CPU只支持两种类型 – 整数、浮点数
2020/11/8
3/60
12.1从基本数据类型到抽象数据类型
在高级语言引入了基本数据类型 – 整型、浮点型、字符型等 – 不同语言会定义不同的基本类型 – 基本数据类型并不能方便地解决所有问题
第12章 结构体和 共用体
本章学习内容
结构体数据类型,共用体数据类型,枚举数据类
型,定义数据类型的别名
结构体变量、结构体数组、结构体指针的定义和初
始化
结构体成员的引用,成员选择运算符,指向运算符 向函数传递结构体变量、结构体数组、结构体指针
2020/11/8
2/60
12.1从基本数据类型到抽象数据类型
声明了一个结构体类型
结构体的名字 称为结构体标 签(Structure Tag) 构成结构体的变量 称为结构体的成员
(Structure Member)
2020/11/8
11/60
结构体类型的声明
Don’t forget the
semicolon!!
2020/11/8
结构体模板
(Structure Template)
/*Can this work?*/
STUDENT stБайду номын сангаас1, stu2;
2020/11/8
/*It works!*/
14/60
12.2.4结构体变量的初始化
等价于 等价于
2020/11/8
15/60
12.2.5嵌套的结构体
嵌套的结构体(Nested Structure)就是在一个 结构体内包含了另一个结构体作为其成员
关键字typedef为一种 已存在的类型定义一个 别名,并未定义新类型
STUDENT与struct student类型是同义词
struct student stu1, stu2;/*It works*/
student stu1, stu2;
/*Can this work?*/
struct stu1, stu2;
【例12.2】
printf("%d\n", sizeof(struct sample)); printf("%d\n", sizeof(SAMPLE));
12
2020/11/8
21/60
12.2.7结构体所占内存的字节数
ch
f
ch
ch
f
ch12个字节
事实上,所有数据类型在内存中都是从偶数地址开始存放的
形成一个类型声明的样板 用于生成结构体变量 但并未声明结构体变量 因而编译器不为其分配1内2/60存
12.2.2结构体变量的定义
(1)先定义结构体类型,再定义变量名
(2)在定义类型的同时定义变量 (3)直接定义结构体变量(不指定结构体标签)
2020/11/8
13/60
12.2.3用typedef定义数据类型
12.3结构体数组的定义和初始化
2020/11/建8 立了数据库中的多条记录,每条对应一个学生信息24/60
2020/11/8
【例12.3】利用 结构体数组计 算每个学生的 平均分
25/60
12.4结构体指针的定义和初始化
如何定义指向结构体变量的指针?
pt STUDENT stu1; STUDENT *pt; pt = &stu1;
2020/11/8
结构体成员的地址与 该成员在结构体中所 处的位置及其所占内 存的字节数相关 结构体变量的地址 &stu2是该变量所占 内存空间的首地址
20/60
12.2.7结构体所占内存的字节数
struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
抽象数据类型进而进化为“类(Class)” – 这是一个跨时代的进步 – Class是Object-Oriented的一个重要概念
2020/11/8
5/60
12.2.1为什么要定义结构体类型
在程序里表示一个人(姓名、年龄、性别…), 怎么表示? 想表示多个人呢? 如何用计算机程序实现下述表格的管理?