c语言程序设计等级考试第13、14、15、16章.ppt
第13章 编译预处理和动态存储分配13.1 宏定义不带参数的宏定义,带参数的宏定义,1.编译预处理就是对C源程序进行编译前,由编译预处理程序对预处理命令行进行处理的过程。 2.C语言中,凡是以开头的行,都称为编译预处理命令行。C语言中的编译预处命令有define,undef,include,if,else,elif,endif,ifdef,ifndef,line,pragma,error。这些预处理命令组成的预处理命令行必须在一行的开头以号开始,每行的未尾不得加;号,以区别于C语句、定义和说明语句。,3.不带参数的宏定义命令的一般形式为 define 标识符 字符串 定义中的标识符为用户定义的标识符,称为宏名。在预编译时,C预编译程序将出现的宏名替换成字符串的内容,这一过程也称为宏展开。 4.带参数的宏定义命令的一般形式为 define宏名形式参数 字符串 定义中的字符串应包含括号中所指定的形式参数。注意宏名与括号之间不要加空格,否则就成为不带参数的宏定义了。5.预编译时,遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换,原则是遇到实参则以实参代替,非形参字符原样保留,从而成展开后的内容。,13.2 “文件包含”处理,1.文件包含的一般形式为 include头文件名 include 头文件名一般由C语言提供,也可以是用户自己编写的,头文件通常用.h作为后缀。 2.当头文件名用双引号括起来时,系统首先在使用此命令的文件所在的目录中查找被包含的文件,找不到时,再按系统指定的标准方式检索其它目录;当头文件名用尖括号括起来时,则直接按系统指定的标准检索方式查找被包含的文件。 3.预编译时,将被包含文件的内容全部复制到包含文件中,这就是文件包含处理。,13.3 条件编译,C语言中的条件编译命令可对源程序代码的各部分有选择地进行编译。条件编译主要有如下3种使用格式 使用格式1 ifdef标识符 程序段1 else 程序段2 endif 使用格式2 ifndef标识符 程序段1 else 程序段2 endif 使用格式3 if表达式 程序段1 else 程序段2 endif 使用格式1表示如果已定义了“标识符”,则编译“程序段1”,否则编译“程序段2”;使用格式2表示如没有定义了“标识符”,则编译“程序段1”,否则编译“程序段2”;使用格式3表示如“表达式”的值为“真”时,则编译“程序段1”,否则编译“程序段2”。,第14章 结构体、共同体和用户定义类型14.1 结构体与共用体类型数据的定义方法和引用方法,1.结构体类型数据的定义方法可以采用下面三种方法来定义 1先定义结构体类型再定义变量名 先定义一个结构体类型,一般形式为 struct 结构体名 成员列表; 2在定义类型的同时定义变量一般形式为 struct 结构体名 成员列表 变量名列表; 3直接定义结构类型变量一般形式 struct 成员列表 变量名列表; 即不出现结构体名。,2.结构体类型变量的引用在定义了结构体变量后,可以采用下列方法引用结构体类型的变量 结构体变量名.成员名 这里.是成员分量运算符,它在所有的运算符中优先级最高。 3.共用体类型变量的定义形式为 union共用体名 成员列表 变量列表; 4.共用体变量的引用可以用下面的形式引用共用体变量 共用体变量名.成员名,14.2 用指针和结构体构成链表,单向链表的建立、输出、删除与插入,1.链表是一种常用的重要的数据结构,它是动态地进行存储分配的一种结构。 2.所谓建立链表是指从无到有地建立起一个链表,即一个一个地输入各结点数据,并建立起前后相链的关系。 3.所谓输出链表就是将链表各结点的数据依次输出。 4.所谓删除链表事实上就是删除链表中的某个结点。 5.所谓插入链表就是在链表中某个位置插入一个或几个结点。,第15章 位 运 算15.1 位运算的含义及应用,1.位的概念 大多数计算机系统的内存储器是由众多的存储单元构成的。在微机中,每个存储单元是1个字节,它由8位二进制数构成,可以表示28256种信息,各位的编号从07,最左边的位第7位是最高位,最右边的位第0位是最低位。由于二进制本身的特点,各位上的数字不是1,就是0。 本章中的位就是指上述提到的二进制位,本章中的位运算就是指对这些二进制的位进行逻辑运算、移位运算等操作。,2.数的编码,数在计算机中是以二进制表示的,但是它并不是简单地以它本身的数值的二进制形式来直接表示,而要进行一定的编码,以方便计算机进行处理。常用的编码有原码、反码、补码三种。,3.真值与原码,我们将一个十进制数的二进制表示称为这个十进制数的真值,它代表了这个十进制数本身的数值。 用真值表示的数只能是正数,对于负数,要用“一”号标明,例如 -7的真值为-0000000000000111 -65535的真值为-1111111111111111 这势必造成用计算机表示数时的不便,故引入了原码表示法。 在原码表示法中,最高位代表符号位,用“1”表示负数,“0”表示正数;余下的数位用来表示真值的绝对值。 数字零存在着两种表示方法0与-0。,4.反码 若采用反码表示,则对应的原码应按照以下方法进行转换 1如果真值为正,则它的反码与原码相同; 2如果真值为负,则反码的符号位为1,其余各位就是对原码取反即原码的1变为0,原码的0变为1。,5.补码 1为什么要引入补码 补码具有许多独特的优点首先它可以变减法运算为加法运算,使得计算时步骤统一,速度提高;其次,在这种系统下的“0”只有惟一的一种表示方法,这就是现代的计算机系统中大多采用补码的原因。 2补码的规定 正数的原码、补码、反码均相同; 计算负数的补码时,先置符号位为1,再对剩余原码的位数逐位取反,最后对整个数加1。 在微机上以8位二进制数为一字节的存储单元中采用补码系统,它可以存放的最小整数为-128,最大整数为127。若采用两个字节来表示一个整数,则可表示的最小整数为-32768,最大整数为32767。,15.2 简单的位运算,C语言提供了位bit运算的功能,这使它像汇编语言一样用来编写系统程序。位运算符共有六种,本节介绍前四种运算,即位的逻辑运算。 1.按位与运算 概念 “按位与”运算符“ fp文件名,使用文件方式; 文件的操作方式如下所示 文件操作方式 操作方式 属性 操作方式的功能 rrr 只读 为输入打开一个字符文件,The end