中职类的C语言课件

上传人:平*** 文档编号:47563550 上传时间:2018-07-02 格式:PPT 页数:42 大小:325.14KB
返回 下载 相关 举报
中职类的C语言课件_第1页
第1页 / 共42页
中职类的C语言课件_第2页
第2页 / 共42页
中职类的C语言课件_第3页
第3页 / 共42页
中职类的C语言课件_第4页
第4页 / 共42页
中职类的C语言课件_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《中职类的C语言课件》由会员分享,可在线阅读,更多相关《中职类的C语言课件(42页珍藏版)》请在金锄头文库上搜索。

1、第9章编译预处理、结构体和共同 体 概述 9.1编译预处理 9.2结构体 9.3共同体 9.4 对于一个C程序来讲,不仅要求程序能实现 要实现的功能,而且还要力求程序最优化。 例如要结构简明,可读性好;少量的改动就 能满足不同的要求,适应性强;占用内存空 间少,内存开销小等。本章将介绍编译预处 理、结构体和共同体等知识,使用这些知识 可以进一步优化程序的设计环境,编写出更 加清晰、通用、紧凑和高效的程序。【学习目标】 掌握有关编译预处理的知识 掌握对简单的结构体的运用 了解有关共同体的知识9.1 概述 编译预处理是指在编译C语言程序之前,预先对以 “#”开头的命令行所指定的标识符、常量、表达式

2、或 文件等进行处理,目的在于帮助用户设计出易读、 易改、易移植的程序。在程序设计中合理地使用预 处理,可大大提高程序的执行效率。 结构体和共同体都是C语言中典型的复杂数据类型 ,与数组一样也包含多个数据“成员”;但是与数组 不同的是,结构体和共同体中的数据成员可以分属 于不同的数据类型,这样为程序设计提供了更加丰 富的手段。 结构体与共同体的区别在于:结构体把几种 不同类型的数据组成1个整体,其中每个成员 都要分别占用独立的内存空间;而共同体是 把几种不同类型的数据存放到同一段内存单 元中,每一时刻只有1个数据有效,它比前者 节约内存空间,但每一时刻只有1个数据可使 用。9.2 编译预处理 严

3、格地说,预处理命令并不是C语言本身的 组成部分,而是为了方便用户,ASCII标准规 定可以加入到C源程序中的命令。一般用户 编写程序都要经过如下3个步骤才能实现其功 能: 编译预处理; 编译; 链接。 编译预处理的作用是将预处理名(宏名)中所包含 的内容用文件、字符串等代替。此外,使用条件编 译可以对程序中的代码行有选择性地进行编译。 例如,若程序中有代码“#include”,则它表 示使用文件“stdio.h”中的全部内容代替该命令。1个 预处理命令可以写在程序中的任何位置,且从书写 位置开始到文件结束有效,但通常的做法是写在程 序的开头,以保持程序结构的清晰,增强程序的可 读性。 只有正确

4、区分编译预处理命令和C语句、正确区分 程序的预处理过程和编译过程,才能正确使用编译 预处理命令。能否使用编译预处理命令是C语言与 其他高级语言的一个重要区别,C语言提供预处理 功能主要有以下3种: 宏定义; 条件包含; 条件编译。 1宏定义 宏定义也称宏替换,是一种以“#define”开头 的命令,其基本功能是用1个标识符来代表1 个常数或一段程序代码。宏定义有两种形式 :带参数的宏和不带参数的宏。 (1)不带参数的宏 基本格式: #define 宏名 宏体 例如:#define PI 3.1415926 (2)带参数的宏 基本格式: #define 宏名(参数1,参数2) 宏体 例如:#de

5、fine S(r) PI*(r)*(r) (3)不带参数的宏的执行 程序中以“宏名”形式出现的内容都用“宏体”代替(引号中的 内容除外)。 例如,有以下定义: #define PI 3.1415926 则在程序中所有的符号“PI”都用3.1415926来代替。 (4)带参数的宏的执行 对于带有参数形式的“宏”,其功能得到了增强,其用法与函 数相似。在处理带参数的“宏”时,系统分两步执行,即先用 宏体替换掉宏名,再用参数的实际值替换掉参数。2文件包含 文件包含是指在程序中通过“#include”命令将另一个文件的 全部内容嵌入到本程序中来。而使用条件编译可以对程序中 的代码行进行选择性编译。 文

6、件包含主要有以下两种格式。 #include:使用这种格式时,系统将到存放C语 言库函数头文件所在的目录中查找要包含的文件。 #include“文件名“:使用这种格式时,系统先到用户保存 C程序文件的当前目录中寻找要包含的文件,如果找不到, 再到存放C语言库函数头文件所在的目录中查找要包含的文 件。9.3 结构体 9.3.1 定义结构体和结构体变量 9.3.2 结构体变量初始化 9.3.3 结构体变量成员的访问 在通讯录中,常常需要记录一个人的姓名、 年龄、地址以及电话号码等资料。很明显, 这些数据资料应该分别使用不同类型的数据 进行表达,这时可以使用结构体这种新的数 据类型来处理这些数据。9

7、.3.1 定义结构体和结构体变量 结构体与数组相似,也是一种复杂数据类型 。不过与数组不同的是,数组中每个元素的 数据类型是相同的,而结构体中的元素的数 据类型可以不同,它可以根据用户的需要对 每个元素的数据类型进行定义。这种由不同 类型的数据构成的复杂数据类型,称为结构 体。1结构体的定义 在正式使用结构体之前,应该首先对结构体 的构成进行描述,这称为结构体的定义。结 构体的定义用于说明: 结构体中包含哪些数据元素; 每个数据元素是什么数据类型。 在结构体中,每1个数据元素称为结构体的1 个数据成员。 (1)结构体的定义格式 在结构体的定义中包含了各个数据成员的基本信息,它的一 般形式为 s

8、truct 结构体名 数据类型1 成员名1; 数据类型2 成员名2; 数据类型n成员名n; ; (2)用法说明关于结构体的定义做如下说明。 “struct”为结构体类型定义的关键字,结构体名是此结构体的类 型标识。 结构体名(例如data)也是一种标识符,因此其定义规则和变 量名、数组名以及函数名相同。 结构体中的各成员必须用大括号括起来组成结构体的成员列表 ,结构体内的成员可以是一般数据类型(字符型、实型、整型等 ),也可以是复杂的数据类型(如数组等),还可以是结构体类 型。 结构名后的大括号中包含的内容是结构体中包含的成员,一经 定义后,结构体的构成就被固定下来了。 注意大括号后的分号不能

9、遗漏。 结构体是一种特殊的数据类型,一旦用户定义一个结构名后, 编译系统会将其同int,double,char等基本数据类型同等对待。 结构体仅仅描述一种数据组织格式,只是说明了这种结构所使 用的“内存模式”,因此结构是抽象的。通过结构定义,主要说明 在使用这种复杂数据类型时,这种数据占据内存的具体情况,取 决于结构体包含的成员的数量以及对应的数据类型。2定义结构体变量 结构体的定义只是创建了一种新的数据类型(一种 复杂数据类型),这种数据类型的地位与int, double等简单数据类型相同。 就像在使用整型变量时需要使用: int a; 定义一个具体的整型变量一样,也需要定义一个具 体的结构

10、体变量。 结构体变量是具体的,其中包含的每个成员都会被 分配相应长度的存储空间,这些成员可以通过一定 方法进行读写等操作。 (1)结构体变量的定义格式 结构体变量的定义格式为 struct 结构名 结构体变量名=初值表; 例如: struct data data1,data2; 其中,struct为结构体的标识符,data为结构体名称 ,data1,data2为两个具体的结构体变量。 定义结构体变量后,该变量包含的所有成员就会被 分配相应大小的存储空间。 (2)在定义结构体的同时也可以定义结构体变量 例如: struct data/定义结构体data char name20;/定义结构体成员变

11、量 short age; char address80; float wage; data1,data2;/定义结构体变量data1,data2 在定义结构体的同时定义了两个结构体变量data1和data2。 (3)在定义结构体时可以省略结构名 例如: Struct/定义省略结构名的结构体 char name20; /定义结构体成员变量 short age; char address80; float wage; wang,li,zhang;/定义结构体变量wang,li,zhang 这种定义方法简单明了,但是由于省略了结构名,在定义语 句之外无法定义新的结构体变量。 (4)结构数组 仿照基本

12、数据类型的用法,在定义结构体后,具有 相同数据类型的结构体变量也可以组成结构数组。 结构数组的格式为 struct 结构名 结构数组名元素个数; 例如: struct data man3; 其中man3由man0,man1和man2组成,每个 元素都是以data为结构类型的结构体变量。9.3.2 结构体变量初始化 初始化就是给结构体变量的每个成员赋初值 。 结构体变量可以在定义的同时进行初始化, 即使用一对大括号包围的初值表对结构体变 量的每个成员赋值,其用法和数组类似。 例如: struct data wang“wangwei“,20,“建设路 “,2234.5; 初始化后,将字符串“wan

13、gwei”赋给结构体变量 wang的成员name20;将整数20赋给结构体变量 wang的成员age;将字符串“建设路”赋给结构体变 量wang的成员address80;将实数2234.5赋给结 构体变量wang的成员wage。 9.3.3 结构体变量成员的访问 对结构体变量进行定义和初始化后,就可对 其中的成员进行引用。 C语言规定对结构体变量的成员进行赋值、 引用、输出时不能整体进行,因为它的各个 成员之间是相互独立的,要引用其成员,可 以使用两种运算符。 点运算符“”。 指针运算符“”。1使用点运算符“”访问结构体变 量成员 对于结构体变量,要通过成员运算符“”逐个 访问其成员,且访问的

14、格式为 结构体变量.成员 点运算符在所有的运算符中优先级最高,如 果成员本身又是一个结构体类型,则可以用 若干个点运算符一级一级地找到最低一级的 成员。在实际的运用中,通常对最底层的成 员进行赋值、存取以及运算。 2使用指针运算符“”访问结构体 变量的成员 使用指针不但可以访问普通变量和数组,使用指针来访问结 构体变量更能体现出简洁、高效的特点。 (1)取地址运算 使用“/*定义结构体 变量,指向结构的指针和结构数组*/ pd= /*将指针指向结构体变量*/ pd=man; /*将指针指向结构数组的首地址*/(2)使用指针访问结构体变量的成员 通过指向结构体变量的指针来访问结构体变量的成员,与

15、使用点运算符“ ”访问结构体变量成员的效果一样。其基本形式为 结构体变量名-成员名 通常,如果指针变量pointer已指向结构体变量var,则以下3种形式等价 : var.成员; pointer-成员; (*pointer).成员 (“*pointer”外面的括号不能省略)。 必须注意以下几点。 在第1种格式中,分量运算符左侧的运算对象,只能是结构体变量。 而在第2种格式中,指向运算符左侧的运算对象,只能是指向结构体 变量(或结构数组)的指针变量,否则都会出错。 9.4 共同体 在实际的程序编写中,为了减少内存空间的 开销,有时需要使用几个不同(或相同)类 型的变量共同用一块存储区域,以节约内存 或达到一些特殊的目的,如对数据进行拆分 等。在这种情况下可以使用共同体。 1共同体的定义 共同体也称为联合(体),用union表示,一般定义形式如 下: union 共同体名 类型1 成员1; 类型2 成员2;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号