第8章 复杂构造数据类型
计算机导论第八章 程序设计语言

汇编语言比机器语言易读、易维护。但计算 汇编语言比机器语言易读、易维护。 机并不认识这些符号, 机并不认识这些符号,因此就需要一个专门 的程序负责将这些符号翻译成二进制数的机 器语言,这种翻译程序被称为汇编程序 汇编程序。 器语言,这种翻译程序被称为汇编程序。
1957年,第一个完全脱离机器硬件的高级语言- FORTRAN 年 第一个完全脱离机器硬件的高级语言 问世了。此后, 多年来 共有几百种高级语言出现。 多年来, 问世了。此后,40多年来,共有几百种高级语言出现。
信息表管理程序 编译过程
编译程序工作时,先分析,后综合, 编译程序工作时,先分析,后综合,从而得 词 语 语 中 代 目 到目标程序。所谓分析, 到目标程序。所谓分析,是指词法分析和语 法 法 义 间 码 标 分 分 分 代 优 代 法分析;所谓综合是指代码优化, 码 法分析;所谓综合是指代码优化,存储分配 析 析 析 码 化 程 程 程 生 程 生 和代码生成。 和代码生成。 序 序 序 成 序 成
8.2.3 赋值语句
赋值操作的意义就是把一个确定的数值放到 某个变量代表的那个内存单元中去。 某个变量代表的那个内存单元中去。 赋值号: 赋值号: “=”表示赋值操作 表示赋值操作 左值: 左值:等待被赋予值的变量 右值:将要被赋予的“ 右值:将要被赋予的“值”
8.2.4 分支语句
分支语句
成立
a
8.2程序设计语言的基本元素 程序设计语言的基本元素
1. 2. 3. 4. 5. 6. 7.
变量 数据类型 赋值语句 分支语句 循环语句 过程(函数) 过程(函数) 注释语句
8.2 基本元素
8.2.1 变量和常量
变量:在程序运行过程中, 变量:在程序运行过程中,其值可以被改变的量 称为变量。变量的两个要素: 变量名 变量名。 称为变量。变量的两个要素:1)变量名。每个变 量都必须有一个名字--变量名, --变量名 量都必须有一个名字--变量名,遵循标识符命 名规则。 )变量值。在程序运行过程中, 名规则。2)变量值。在程序运行过程中,变量 值存储在内存中。 值存储在内存中。程序通过变量名来引用变量的 值。 常量:在程序运行过程中, 常量:在程序运行过程中,其值不能被改变的量 变量在使用前, 变量在使用前,在内 称为常量。常量可分为整型常量,实型常量, 称为常量。常量可分为整型常量,实型常量,字 存中会给每个变量申 符常量,符号常量。 符常量,符号常量。 请一定的大小的空间。 请一定的大小的空间。
C语言程序设计知识点—第8章 指针结构体与预处理命令

指针使用示例 2 void main() { int num1 = 50, num2 = 100; int *ptr1, *ptr2; ptr1 = &num1; printf(" num1 的值是: %d", *ptr1); printf("\n num1 的地址是: %x \n", ptr1); ptr2 = &num2; printf("\n num2 的值是: %d", *ptr2); printf("\n num2 的地址是: %x \n", ptr2); *ptr2 = *ptr1; printf("\n 重新赋值后 num2 的值是: %d", *ptr2); printf("\n 重新赋值后 num2 的地址是: %x\n", ptr2); }
C 语言程序设计知识点
主讲教师:杨剑
第 8 章:指针、结构体与预处理命令
1. 本章目标
理解指针的概念 定义指针变量 掌握对指针的操作 理解指针和数组的关系 理解结构体的概念和定义 理解预处理指令
2. 内存地址
内存是一个连续编址的空间,每一个存储单元都有一个固定的编号,称为内存地址。 内存地址通常用 16 进制数表示。
-数据库原理及应用第二版-第8章数据库设计

需求 分析
逻辑结构 设计
物理 设计
图 7- 2
8.1.3数据库设计的基本步骤
需求分析阶段 概念结构设计 结构设计阶段 逻辑结构设计 物理结构设计 功能设计 行为设计阶段 事务设计 程序设计 数据库实施阶段 数据库运行和维护
需求分析:收集信息并进行分析和整理,是后 续的各个阶段的基础。概念结构设计:对需求分析 的结果进行综合、归纳形成一个独立于具体的DBMS 的概念模型。逻辑结构设计:将概念结构设计的结 果转换为某个具体的DBMS所支持的数据模型,并对 其进行优化。物理数据库设计:为逻辑结构设计的 结果选取一个最适合应用环境的数据库物理结构。 数据库行为设计:要设计所包含的功能,功能间的 关联关系以及一些功能的完整性要求;数据库实 施:运用DBMS提供的数据语言以及数据库开发工 具,根据逻辑设计和物理设计的结果建立数据库, 编制应用程序,组织数据入库并进行试运行。数据 库运行和维护阶段:投入正式使用,在其使用过程 中不断对其进行调整、修改和完善。
常用的发现事实的方法有: 1、检查文档 2、面谈 3、观察业务的运转 4、研究 5、问卷调查
8.3 数据库结构设计
8.3.1概念结构设计
概念设计的特点和策略 1、概念模型的特点 有丰富的语义表达能力。 易于交流和理解。 易于更改。 易于向各种数据模型转换,易于导出与DBMS 有关的逻辑模型。
必须注意:关系上定义的索引数并不是越多越好, 系统为维护索引要付出代价,查找索引也要付出代价。 例如,若一个关系的更新频率很高,这个关系上定义的 索引数不能太多。因为更新一个关系时,必须对这个关 系上有关的索引做相应的修改。
聚簇存取方法 为了提供某个属性或属性组的查询速 度,把这个或这些属性(称为聚簇码)上具有 相同值的元祖集中存放在连续的物理块称为 聚簇。 一个数据库可建立多个聚簇,一个关系 只能加入一个聚簇。
第8章 数组

– 二维数组的存储
• 从逻辑上看,二维数组元素间的关系相当 于矩阵:第一维长度是矩阵的行数,第二 维长度是矩阵的列数。 • 从存储上看,内存是一维的、线性的空间, 那么就要采取一定的方式将二维的数组映 射到一维的内存中去。 • C语言中采用行优先的方式来存储二维数 组,同一行中再按列顺序存放。 • 若有定义: static float f[3][4]; 则f是一个3行4列的数组,它在内存中的 存储示意图如右图所示: 上一页
• b[i]和b+i都表示第i行首地址,二者值相同,但类型却不同: 前者的基类型为二维数组元素类型,后者的基类型为二维数 组的行(即一维数组类型)。 • 若考虑b为一维数组类型的一维数组,*(b+i)为b的第i个元 素,则*(b+i)与b[i]等价。
– 数组元素的地址
• 二维数组元素地址的类型是基类型为数组元素类型的指针 类型,如&b[i][j]就可以看作基类型为整型的指针类型。 • 对于二维数组b中第i行、第j列(0<=i<=2,0<=j<=3)的元素的 地址可表示为:b[i]+j或*(b+i)+j。 •二维数组在内存中按行序顺次存放,元素b[i][j]之前已存放 了第0行、第1行、…第i-1行共i行元素;在第i行中,b[i][j]之 前已经存放了第0列、第1列、…第j-1列共j个元素,即b[i][j] 之前共有i*4+j个元素,那么,b[i][j]的地址也可表示为 : &b[0][0]+i*4+j或b[0]+i*4+j。 上一页
– 将字符串常量赋给字符数组
• 可将字符串常量中的字符逐个赋值给字符数组,且最后一 个字符是空字符。 • 可以在定义字符数组时同时将字符串常量赋值给它。 • 定义字符数组时可省略数组的长度,系统会根据所赋字符 串常量的实际长度来确定字符数组的长度。 上一页
第八章.位域等

型定义一个新名字,例如: typedef int integer;
定义的一般形式为:
typedef 类型 定义名;
必须强调指出,typedef的作用,在任何意义上讲都不是创建 一种新的数据类型,它仅仅为现有的数据类型赋予一个新的名 字,也没有任何新语义,因此,由定义名说明的变量的性质, 与原有类型说明的变量性质相同。
以上的结构变量payday就是嵌套在结构person 内的一个嵌套式结构变量。
8.2 联合
联合是一种与结构相类似的构造类型,联合与构造一样 ,可以包括不同类型和长度的数据。联合与结构的主要
区别在于,联合类型变量所占据的存储空间不是各成员
所需要的存储空间字节数总和,而是联合成员中所需要
存储空间最大的成员所要求的字节数。这是因为C编译
# define 宏标识符(参数表) 表达式
3.定义宏的几种情况 (1)要求两个数中较大数,可以定义宏:
#define MAX(a,b)(a>b)?a:b
(2)要求一个数的绝对值:
#define ABS(x)(((x)>0)?(x):(-x))
(3)要表示一个数的符号: #define SIGN(x)((x)>0?1:((x)==0?0:(-1)))
小结
1.
位域结构是结构的一种特殊形式。位域的长度是 以二进制位为单位定义的,其成员的数据类型只 能是整型和字符型。 联合是多个不同类型的变量公用同一个内存空间 的共享体,它与结构的主要区别:由于联合各成 员共享一个公共存储空间,因此在任何给定的时 刻,只能允许一个成员占据联合变量的空间。 联合变量与结构变量的主要相同点是:
复杂构造数据类型

组 struct student { char name[10] ; int age ; float s1 , s2 ; } st[6] ; (3). 直接定义结构体数组 struct { char name[10] ; int age ; float s1 , s2 ; } st[6] ;
2015-1-31
结构体变量st1和st2各自都 需要20个字节的存储空间
2015-1-31
st1
st2
s2
7
《C语言程序设计》
(2). 定义结构体类型同时定义变量 struct student (3). 直接定义结构体变量 { char name[10] ; struct int age ; { char name[10] ; float s1 , s2 ; int age ; } st1 , st2 ; float s1 , s2 ; } st1 , st2 ; birthday? 【 说明】 : 、month、day) (year (1) 结构体变量具有结构体类型的一切特征 在内存中结构体变量占有一片连续的存储单元 存储单元的字节数可用sizeof 运算符算出 printf(“%d\n” , sizeof(struct student) ) ; printf(“%d\n” , sizeof(st1) ) ;
struct student { char name[10] ; int age ; float score1 , score2 ; } st1={“ Mary”, 21, 78, 86} ;
这是初始化, 正确
struct stud { char name[10] ; 这是赋值, 错误 struct date birthday ; C不允许这么做 float score1 , score2 ; }; struct stud st2={ “John” , 1980 , 11 , 23 , 89 , 95 } ;
《复杂数据类型》课件

VS
详细描述
集合是由一组具有某种特定属性的事物组 成的,这些事物被视为一个整体。每个集 合中的元素都是确定的,互不相同的,并 且元素的顺序并不影响集合本身。
集合的创建和初始化
总结词
可以使用大括号、圆括号或set()函数来创建和初始化集 合。
详细描述
可以使用大括号、圆括号或set()函数来创建和初始化集 合。
集合的常用操作
总结词
集合支持交集、并集、差集等常用操作。
详细描述
集合支持多种常用的数学运算,如交集、并 集、差集等。这些操作可以帮助我们处理和 操作集合中的元素。例如,如果我们有两个 集合A和B,我们可以使用&运算符来计算 它们的交集,使用|运算符来计算它们的并 集,使用-运算符来计算B相对于A的差集等 。
列表的创建和初始化
总结词
Python提供了多种创建和初始化列表的方法。
详细描述
可以使用方括号[]来创建一个空列表,然后通过append()方法添加元素。也可以使用内置函数list()将 其他可迭代对象(如元组、字符串或集合)转换为列表。还可以使用list comprehension来创建包含 多个元素的列表。
列表的常用操作
总结词
列表支持多种操作,包括添加、删除、查找、排序等。
详细描述
可以使用append()方法向列表末尾添加元素,使用insert()方法在指定位置插入元素,使用remove()方法删除 指定元素,使用pop()方法删除指定位置的元素。还可以使用index()方法查找元素在列表中的位置,使用 count()方法统计元素出现的次数。此外,Python还提供了内置函数sorted()对列表进行排序。
04
元组
元组的定义和特性
大学计算机基础(第三版)-第8章 程序设计基础

算法的概念
用计算机解决问题的算法应具有以下特征:
有穷性
能行性
确定性
可输入输出信息
算法的表示
自然语言——使用人们能读懂的简短语句对算法的步骤 进行描述。
流程图法——用一些图框、线条以及文字说明来形象地、 直观地描述算法。 N-S流程图法—— 去掉了传统流程图中带箭头的流向线, 全部算法以一个大的矩形框表示,框内还可以包含一些从 属于它的小矩形框,适于结构化程序设计。 伪代码法—— 用介于自然语言和计算机语言之间的文 字和符号来描述算法。 计算机语言—— 用计算机语言描述算法,只有用计算 机语言编写的程序才能被计算机执行。
Hale Waihona Puke 算法的表示及三种基本结构1 顺 序 结 构
2 分 支 结 构
3 循 环 结 构
算法的表示及三种基本结构
(1)
顺序结构
块1
块2 块3
演示算法执行过程
【例】 求两数之和。
num115; num220; sumnum1+num2; 输出sum; 流程图
显示结果:35
num1 15 + num2 20 sum 35 寄存器 35
解释程序
高级语言源程序
计算结果
解释方式执行过程
程序设计语言的组成
一般来说,程序设计语言都应包含以下四 种成分:
数据成分 运算成分 控制成分 传输成分
用以描述程序中所涉及的数据 用以描述程序中所包含的运算 用以描述程序中的控制结构 用以表达程序中数据的传输
程序设计语言的组成
程序语言提供的数据类型:
8.1 程序设计的基本概念
语言 人类交流思想的工具
程序设计语言 人和计算机之间进行交流的语言
[计算机软件及应用]第8章第一部分 类与对象
![[计算机软件及应用]第8章第一部分 类与对象](https://img.taocdn.com/s3/m/d67b8b52b0717fd5370cdc7c.png)
class Date
{
public:
Date( );
// 默认构造函数
void setDate(int,int,int); // 设置年、月、日
17
class 类名
{ private:
私有数据和函数
public:
公有数据和函数
};
大括号后的分号“;”是类定义的结束
标志。类的成员分为数据和函数,分别
称为成员数据和成员函数。成员数据描
述类对象内部数据的结构,成员函数则
用于操作类对象的这些数据。
18
class Date
{ public:
Date( );
public: void putname(char *n); void getname(char *n);
private: long num;
public: void putnum(long n); long getnum();
};Leabharlann 24成员数据的说明 一般说来,类中的成员数据可以是任何类
型的。成员数据说明的形式等同C++程序中 一般变量的定义形式。
第八章 类与对象
1
80年代后期,在计算机软件领域发生了 许多变化,这些变化极大地影响着几乎所 有的程序设计者和系统分析员的工作。面 向对象的程序设计方法: (Object-Oriented Programming)就是其中之一。
OOP并不是一种程序设计语言,而是一 种新概念——关于数据、过程和它们之间 关系的一种新的思考方法。
int X,Y; 只是这里还要使用访问说明符(类型修饰 符)private、public和protected。在说明成员数 据时不再使用修饰符extern、auto、register。
FORTRAN95第八章 实用程序设计方法

直到 x 是一个素数
根据上面的伪码,可以比较容易地写出实现求出前 n个素数并打印的FORTRAN程序。但是, 这个程序的 效率是比较低的。为此可以利用数论的知识,从以 下两个方面考虑进行优化。 首先, 语句“对于k 从2 变到X-1,每次增 1 做:”
在以上各阶段都应有充分的文档资料。而且,以上过程是一个有限次 迭代过程。
8.2 结构化程序设计方法 8.2.1 结构化程序设计的概念 所谓结构化程序设计,就是以良好的程序结构为目标、遵照
“自顶向下、逐步求精”和模块化的方法、每个模块仅有一个 入口
和一个出口、程序中仅使用三种基本控制结构、尽量少用GOTO 语句的程序设计方法, 下面对结构化程序设计方法进行全面、细 致地阐述。
具体说来,计算机程序设计的准则有以下七个方面:
正确性:这是判定程序质量的永恒准则。 可靠性:这是指程序执行的可重复性要好。无论执行环境
如何变化,对相同的输入数据,一个程序的执行结果总是 不变的。 易读性:这是指程序结构要简单、语句要直观、程序内部 要有足够的注解等,以便维护和引用程序。遵照良好的编 程风格(习惯),会增大程序的可读性。 有效性:这是指程序应当少占存储空间、快速运行。良好 的时空效率永远是人类追求的目标。 可维护性:这是指程序应当容易查找错误、容易改正错误。 一个大型程序,常常需要数十人甚至数百人合作开发,代 价高昂。既使通过严格地检测,也不可能保证没有错误。 而且使用期常常达到10年至15年或更长。因此,在使用中, 排除错误、扩充、更新总是难免的。 适应性:这是指程序不应因计算机硬件或外部环境的变更 而更改或废弃。程序的适应性越强,可移植性越好,越能 适应各种机型和环境,其社会效益和经济效益就越好。 可重用性:这是指经过实践证明正确的己有源程序代码, 可以方便地被自己或他人利用,这样不仅能大大提高程序 的开发效率,而且能大大减少程序的错误。
C语言开发基础教程(Dev-C++) 第8章 结构体

✎
8.5 typedef的使用
3、为结构体类型取别名 typedef struct Student{
int num; char name[10]; char sex; }STU; STU stu1; //struct Student stu1;
✎
8.6 阶段案例——学生成绩管理系统
一、案例描述 案例要求模拟开发一个学生成绩管理系统,此系统具有以下功能: (1)添加学生信息,包括学号、姓名、语文、数学成绩; (2)显示学生信息,将所有学生信息打印输出; (3)修改学生信息,可以根据姓名查找到学生,然后可以修改学生姓 名、成绩项;
✎
8.1.2 结构体变量定义
1、先声明结构体类型,再声明结构体变量 定义了结构体变量stu1与stu2之后,stu1与stu2便占据了内存空间,它 们具有结构体特征。
stuu11: 201403001 Zhang San Man
23
Beijing
ssttuu22: 201403002 Li Yun
struct student {
char a; double b; int c; short d; };
字节对齐
✎
脚下留心:结构体嵌套
结构体类型中的成员可以是一个结构体变量。这种情况称为结构体嵌套。
struct Date {
int year; int month; int day; };
struct student{ char num[12]; double b; int c; struct Date d;
};
struct Student students[3] = { 定义数组 {20140101, "Zhang San",'M'}, {20140102, "Li Si",'W'} {20140103, "Zhao Liu",'M'} };
C语言程序设计-理论-教学大纲

《C语言程序设计》课程教学大纲课程中文名称:C语言程序设计课程英文名称:The C Programming Language课程编号:TS17003课程性质:通识教育课学时:总学时72、理论课学时48、实验课学时24学分:4开课学期:第3学期适用对象:电子科学、应用化学、机械电子、车辆工程、电信工程、地理信息系统等本科专业先修课程:高等数学、大学计算机基础课程简介:《C语言程序设计》是工学、理学类专业的一门重要基础课,通过讲授使学生掌握C语言的基本语法、语句、程序控制结构以及结构化程序设计的基本思想和方法,使学生认识计算机程序设计算法、养成良好的程序设计风格及认识程序设计实践在本课程学习中的重要性,培养学生熟练使用C语言分析和解决实际问题的能力,为学生进一步学习其他专业课程和今后从事软件开发工作打下坚实的基础。
一、教学目标及任务计算机程序设计是当代大学生必备的基本技能,C语言是一种功能完备、使用方便的程序设计语言,学生程序设计能力的培养和提高,也是其计算机应用水平的体现。
《C语言程序设计》是我校理工类非计算机专业学生的通识课,也是全国计算机专业等级考试二级C语言程序设计的重要内容。
本课程的任务是让学生掌握C语言基本知识及程序设计的基本方法,学会运用C语言作为工具,通过程序设计以解决和处理现实世界中尤其是与本专业有关的大量实际问题,着重于学生程序设计能力的培养。
二、学时分配三、教学内容及教学要求第一章 C语言程序设计概述(2学时)教学要求:1.了解C语言发展史、特点、基本词法;2.掌握C语言程序设计的基本结构;3.掌握C程序的上机步骤。
教学重点与难点:重点:C语言程序的基本结构。
难点:计算机程序设计算法。
教学内容:第一节 C语言的历史与特点1.C语言的由来;2.C语言的特点。
第二节 C语言概述1.C语言基本词法;2.计算机常用算法及其表示;3.C语言上机步骤。
本章习题要点:C语言的发展和特点;简单的C程序设计;计算机算法、程序设计语言和程序设计方法。
08章 结构体类型和联合体类型

C语言数据描述和C程序设计初步 语言数据描述和C 结构化程序设计基础和C 结构化程序设计基础和C语言的控制结构 数组及其应用 函数与C 函数与C程序结构 指针与函数 指针与数组 字符串及其应用 结构体类型和联合体类型 C语言的文件处理及其应用 位运算与枚举类型
结构体类型和联合体类型
结构体数据类型的基本概念 结构体数组 结构体数据类型与指针的关系 结构体数据类型的简单应用—— ——单链表 结构体数据类型的简单应用——单链表 联合体数据类型的基本概念
结构体数据类型的基本概念
结构体类型的定义
struct student { long id; struct 标识符 结构体成员1 { 数据类型名 结构体成员1; char name[20]; int age; 结构体成员i 数据类型名 结构体成员i; char sex; … char address[80]; 结构体成员n 数据类型名 结构体成员n; long tel; }; };
结构体数据类型的基本概念
结构体类型的定义和结构体变量的使用方法
结构体类型变量的引用 结构体变量一般也不能进行整体操作. 结构体变量一般也不能进行整体操作.只能通过对其中的 特别提示: 特别提示:结构体成员分量的数据类型与在其连接组合过 每一个数据项的操作达到操作结构体变量的目的. 每一个数据项的操作达到操作结构体变量的目的.对于结 程最后一个成员分量的数据类型一致. 程最后一个成员分量的数据类型一致. 构体变量中每一个数据项(成员分量) 构体变量中每一个数据项(成员分量)的引用要使用点运 例:设有结构体类型及变量定义 算符以组合成结构体成员分量,其一般形式为: 算符以组合成结构体成员分量,其一般形式为: struct A { 结构体变量名.成员分量名 b; int x; 结构体变量名. struct B float y; 则有: 则有: 嵌套结构体类型变量的引用 }; b.a.x 整型变量 对于嵌套的结构体类型的变量, 对于嵌套的结构体类型的变量,访问其成员时应采用逐级 struct B b.a.y 实型变量 访问的方法,直到得到所需访问的成员为止.其形式为: 访问的方法,直到得到所需访问的成员为止.其形式为: { struct A a; b.c 字符型变量 结构体变量名.一级成员分量名.二级成员分量名… 结构体变量名.一级成员分量名.二级成员分量名 char c; };
第8章(490)

第8章 面向对象开发方法
8.1.1 MIS开发存在的主要问题
造成“软件危机”的根本原因是目前采用冯·诺依曼原 理计算机, 它的求解问题方法的空间结构与人们认识问题 的空间结构很不一致。 冯·诺依曼计算机的基本特征是程序 存储和程序控制。 这种在机器上能接受的是面向过程语言, 随着管理信息系统规模的扩大, 结构越来越复杂, 上百万 条指令的应用程序比比皆是。 面向过程语言又是一种与人 们自然语言相差很远, 难以表达用户需求, 又不易与用户 交互的语言。
第8章 面向对象开发方法
客观世界是由万事万物组成的, 客观世界中的事物在 人头脑中的反映, 便是抽象的概念。 面向对象方法思想就 是直接面对现实世界(包括客观世界和主观世界), 在面 向对象的方法中, 大千世界可以抽象为由各种层次、 具有 各种属性、 彼此相互联系又相互作用的一系列对象构成的 一个复杂的体系结构。 把代表事物属性的数据抽象和代表 事物行为的功能抽象, “封装”为对象。 对象是程序设计 的基本元素, 将具体事物抽象为对象是面向对象的核心。 面向对象使系统分析员与用户交流有了共同语言, 同时, 虽然用户需求是多变的, 但问题域的对象是最稳定, 不变 的因素, 也解决了结构化方法的难题。
第8章 面向对象开发方法
面向对象系统开发的体系结构在20世纪90年代后占据主 导地位, 体现在面向对象程序设计语言、 面向对象数据库、 面向对象界面、 面向对象操作系统及面向对象开发环境的出 现方面。 在面向对象程序设计语言(OOPL)中, C++已成 为标准, 大多数主流程序设计语言实现了面向对象的扩充, 操作系统也被扩充了, 支持面向对象的应用程序设计和面向 对象的标准件设计。 面向对象程序设计不仅引入了开发人员, 而且也将引入最终用户。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.2.1共用体类型定义
• 3.共用体变量的引用 共用体变量只能引用它的成员,不能引用共用体 变量自身。例如前例中的变量aa,可以引用它的 成员,正确的书写方法是: aa.i=56; aa.f=123.6432; aa.ch=‘A’; 下面这样书写是错误的: printf(“%d”,aa);
• 案例分析:同前一个案例一样,定义“学生” 为结构体,包含学号、姓名、成绩等成员名。
8.1.3指向结构体类型数据的指针
• 一个结构体变量的指针就是该变量所占 据的内存段的起始地址。可以设一个指针 变量,用来指向一个结构体变量,此时该 指针变量的值是结构体变量的起始地址。 指针变量也可以用来指向结构体数组中的 元素。
8.1 结构体
例如:描述一个学生的完整信息时,有学号、姓名、性别、年龄、 成绩、家庭地址等项。这些项目之间是彼此联系的,应组织定义成 一个组合项,统一表示和使用,具体如表格所示: 这种由若干个不同类型的数据项组成的组合类型,在C语言中叫做 结构体类型,相当于其它语言中描述的“记录”。 结构体类型在使用之前应先定义其类型结构,然后再定义该类型 变量,才能使用。
8.3 枚举类型
• 说明: • C语言中枚举元素按常量处理,它们是有值的。它 们的值是系统按其定义顺序自动赋予的 0、1、2、 3、4、……。因此前文所举的枚举元素sun的值为0, mon的值为1,依次类推。
• 枚举变量的值即是它所取的枚举元素的值,此值 可输出查看,如day=fri;则day的值为5,可以输 出printf(“%d”,day); 输出结果为5。
学号
姓名
性别 女 char
年龄 20
int age
成绩 86
float score
家庭地址 北京 char
addr[20]
20130102 李梅 int char
num
name[8] sex
8.1.1结构体类型定义
• 1.结构体类型定义形式: struct 结构体类型名 { 类型标识符1 成员名1; 类型标识符2 成员名2; : : 类型标识符n 成员名n; }; • 注意: 用户需要先定义结构体类型, 之后才能定义结构体变 量,用{ } 将成员扩起来。每个成员名后面不要忘记书写分号。
• 枚举值可用来做判断比较,如: • if(day= =sun) ……; • if(day>mon &&day<fri) …… • 枚举变量取值只能是所列举的枚举元素, 不能直接赋予一个整数值,如:day=2;错 误。当然可以采用强制类型转换的方式赋 值,但多数情况不采用。
8.4用typedef为类型定义别名
• 4.结构体变量的初始化
struct student { char name[10] ; int age ; float score1 , score2 ; } st1={ “Lucy”, 19, 85 , 82 } ; struct student { char name[10] ; int age ; float score1 , score2 ; }; struct student st1; st1={ “Lucy”, 19, 85.0 , 82.0 } ; 错误
8.2.1共用体类型定义
• 4.共用体类型数据的特点:
• 每一瞬时只能存放其中的一个成员,而不是同时 存放几个,即其它成员不起作用。
• 只有最后一个存放的成员的值有效,其他成员将 失去原值。如前文中的变量aa 只有最后一个成员 值aa.ch=‘A’是有效的。 • 共用体变量的地址和它的成员地址都是同一地址。 即:&aa和&aa.i、&aa.ch、&aa.f的起始地址都是 一样的。
8.2 共用体
• 共用体的概念: 所谓“共用体”类型, 是指 使几个不同类型的变量共同占用同一段内 存单元。
8.2.1共用体类型定义
• 1.共用体类型定义形式: union 共用体类型名 { 类型标识符1 成员名1; 类型标识符2 成员名2; : : 类型标识符n 成员名n; };
8.2.1共用体类型定义
8.3 枚举类型
• 枚举元素的值也可以改变,但必须在定义时指定。 • 如:enum weekday {sun=7,mon=1,tue,wd,thu,fri,sat }; 如果定义时未指定值,则按顺序取默认值。 • 枚举元素是常量,不是变量,不能在定义以外的 任何位置对它们赋值,如sun=5;错误
8.3 枚举类型
8.1.1结构体类型定义
• 2.定义结构体变量的方法
name
age
s1 s2 name age s1 s2
图8.1
st1
st2
8.1.1结构体类型定义
• 3.结构体变量的引用 1)引用结构体变量中的成员 2)相同类型的结构体变量可以进行整体赋 值 3)结构体变量的输入、输出
8.1.1结构体类型定义
typedef int INTEGER; typedef struct student STUD; 其中,用STUD代替 struct student类型;例如: struct student { int num; char name[20]; char sex; int age; double score; char addr[30]; }; STUD student1,student2;
正确
8.1.2 结构体数组
1.结构体数组的定义 2.结构体数组的初始化,将每个数组元素的 数据用花括号{ } 括起来 3. 结构体数组的引用
案例
• 【案例8.1】有5名学生, 每个学生包括学号、姓 名、成绩,要求找出其中成绩最高者,并输出 他的信息。
• 【案例8.2】按成绩对五名学生信息进行从高到 底的排序。
8.2.1共用体类型定义
• 共用体变量不能初始化,也不能对变量名整体赋 值,不能引用变量名来输出一个值,只能引用它 的某个成员。
• 共用体变量不能作为函数的参数,也不能作为函 数返回值。但可以使用指向共用体变量的指针。 • 共用体类型可以出现在结构体中,共用体成员也 可以是结构体类型。 • 可以定义共用体数组。
案例
• 【案例8.5】问共用体类型EXAMPLE中,e.a 和e.b分别是多少? • 案例分析:在共用体中,所有的共用体 成员共用一个空间,并且同一时间只能储 存其中一个成员变量的值。 • 说明:请注意阅读程序注释,以帮助理 解。
8.3 枚举类型
• 所谓“枚举”,是指将变量的所有取值一一列举出 来,变量的取值只限于列举出来的值的范围。该 变量称之为枚举型变量。所列举的值叫做枚举元 素(又称枚举常量)。 • • 定义一个枚举类型名,再用它定义变量。如: enum 枚举类型名{枚举元素1,枚举元素2,…,枚 举元素n};enum 枚举类型名 变量列表;
第8章 复杂构造数据类型
•
在实际问题中,一组数据往往具有不同的数据类型。 例如,在学生登记表中,姓名应为字符型;学号可为整 型或字符型;年龄应为整型;性别应为字符型;成绩可 为整型或实型。 显然不能用一个数组来存放这一组数据。 因为数组中各元素的类型和长度都必须一致,以便于编 译系统处理。 • 为了解决这个问题,C语言中给出了另一种构造数 据类型——“结构(structure)”或叫“结构体”。 它相当 于其它高级语言中的记录。“结构”是一种构造类型,它 是由若干“成员”组成的。每一个成员可以是一个基本数 据类型或者又是一个构造类型。