2022年C语言程序设计学习笔记 .pdf

上传人:Che****ry 文档编号:23786233 上传时间:2022-07-02 格式:PDF 页数:27 大小:243.81KB
返回 下载 相关 举报
2022年C语言程序设计学习笔记 .pdf_第1页
第1页 / 共27页
2022年C语言程序设计学习笔记 .pdf_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《2022年C语言程序设计学习笔记 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言程序设计学习笔记 .pdf(27页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C 语言设计学习笔记早晨:06:40 起床07:20 08:20 英语 1 小时新概念英语(单词、语法、听读背)大学英语(单词、语法、听读背)上午:08:30 10:30 计算机基础 2 小时10:50 11:30 计算机科学技术导论计算机组成原理微机原理及接口技术Intel微处理器结构编程与接口深入理解计算机系统80 x86 汇编语言程序设计8086-8088 宏汇编语言程序设计教程BIOS研发技术剖析自己动手写操作系统操作系统原理Windows操作系统原理Windows内部原理系列Windows程序内部运行原理计算机网络第五版中午:12:00 02:00 午休下午:02:30 04:30

2、计算机应用及编程Windows 用户管理指南、AD 配置指南、网络专业指南、 Windows 即学即会教程Windows下 32 位汇编语言程序设计、C#编程晚上:05:30 08:00 锻炼、晚餐08:00 09:00 辅导09:00 11:00 专业基础 2 小时大学数学、大学物理、电机及拖动、电力电子技术、通信技术11:30 休息名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 27 页 - - - - - - - - - 目 录第一章C 语言概述

3、. - 1 -1.1 C 程序结构特点16 . - 1 -1.2 C 程序上机步骤17 . - 1 -第二章程序的灵魂 算法 23 . - 2 -2.1 算法 24 . - 2 -2.2 算法的三种基本结构. - 2 -2.3 结构化程序设计方法42 . - 2 -第三章数据类型运算符与表达式48 . - 2 -3.1 C 语言的基本元素48 . - 2 -3.2 C 的数据类型48 . - 2 -3.3 常量与变量48 . - 3 -3.4 基本类型 . - 3 -3.5 变量 63 . - 4 -3.6 不同类型数据间的混合运算. - 5 -3.7 函数的调用过程(补充). - 5 -第四

4、章最简单的 C 程序设计顺序程序设计77 . - 5 -4.1 字符数据的输入输出. - 5 -第五章选择结构的程序设计97 . - 6 -第六章循环结构程序设计. - 6 -6.1 语句标号 . - 6 -6.2 break 语句和 continue 语句 . - 6 -第七章数组 132 . - 6 -7.1 构造类型 . - 6 -7.2 数组 133 . - 6 -7.3 二维数组 . - 6 -7.4 字符串字符数组. - 7 -7.5 字符串处理函数#include . - 7 -第八章函数 153 . - 8 -8.1 c 程序的结构154 . - 8 -8.2 函数调用参数传递

5、. - 8 -8.3 函数变量的作用范围. - 8 -8.4 变量的存储类别. - 8 -第九章预处理命令197 . - 9 -9.1 预编译命令作用. - 9 -第十章指针 211 . - 10 -10.1 变量的访问方式. - 10 -10.2 指针变量 . - 10 -第十一章结构体 270 . - 11 -11.1 结构体 270 . - 11 -名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 27 页 - - - - - - - - - 11.

6、2 声明结构体类型变量的方法271 . - 11 -11.3 结构体变量引用273 . - 11 -11.4 结构体变量初始化. - 12 -11.5 结构体数组275 . - 12 -11.6 结构体类型指针. - 12 -11.7 链表 283 . - 12 -11.8 共用体297 . - 13 -11.9 枚举类型 301 . - 13 -11.10 用 typedef 定义的类型304 . - 14 -第十二章位运算 308 . - 14 -12.1 位段 315. - 14 -第十三章文件 319 . - 14 -13.1 文件 319. - 14 -13.2 文件的分类319 .

7、 - 15 -13.3 C 语言对文件的处理方法319 . - 15 -13.4 文件结构体类型321 . - 15 -13.5 文件结构体数组和指针321 . - 16 -13.6 文件的操作321 . - 16 -13.7 文件的定位333 . - 17 -13.8 出错检测 335 . - 18 -13.9 小结 336. - 18 -第十四章C+对 C 的扩充338 . - 19 -14.1 C+的特点 338 . - 19 -14.2 C+的输入输出339 . - 19 -14.3 C+的输出 cout . - 19 -14.4 C+的输入cin 341 . - 21 -14.4 函

8、数的重载342 . - 21 -14.5 带缺省参数的函数344 . - 21 -14.6 变量的引用类型345 . - 22 -14.7 内置函数348 . - 23 -14.8 作用域运算符349 . - 24 -名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 27 页 - - - - - - - - - 第一章C 语言概述1.1 C 程序结构特点 16 1、C 程序的 基本构件 函数。2、一个 函数 由函数首部 和函数体 两部分构成。?函数首部 一

9、般包括 函数类型、函数名、函数参数等。?函数体 一般包括 声明部分 和 执行部分 。其中:在 声明部分 中 定义 所用到的 变量;执行部分 则由若干个 语句 组成。3、C 程序只有一个main 函数 ,且总是从main 函数开始执行。4、C 语言语句必须以“; ”结束。5、用 /* */作为 注释 。6、C 编译器一般 自顶向下 顺序编译C 源程序,如果被调函数 定义在 主调函数 之后位置时,要在主调函数前,给出被调函数的 原型说明 。以便编译器在编译被调函数的调用语句 时,对 调用语句 进行 参数检查 。如果不进行原型说明,则无法通过编译检查 。原型说明: 类型说明函数名 (参数类型 ,参数

10、类型 ,)7、头文件头文件 包含了 C 语言的标准函数库的原型说明。C 语言通过使用 #include 预处理命令,将库函数的原型说明插入到源文件中。1.2 C 程序上机步骤 17 1、编辑源文件 .c ;2、编译成目标文件.obj;3、连接将目标程序 和库函数 及其他目标程序 连接起来,生产可执行文件,文件扩展名为 .exe;4、执行。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 27 页 - - - - - - - - - 第二章 程序的灵魂算法2

11、3 2.1 算法 24 1、算法指为求解某一问题而采用的具体方法 和步骤 。2、两类算法数值运算算法 和非数值运算算法3、算法的特性有穷性 、确定性 、有效性 等4、算法描述文字描述法 (如伪代码描述算法) 、图形描述法 (如流程图和NS流程图描述算法) 。2.2 算法的三种基本结构顺序、选择、循环2.3 结构化程序设计方法42 1、自顶向下首先对问题进行分析,确定算法思路。2、逐步细化根据算法思路,制定原始算法流程,并不断细化流程。3、模块设计分解算法流程,将功能相对独立的部分划分为一个模块。4、结构化编码利用高级语言正确实现3 种基本结构。第三章 数据类型运算符与表达式48 3.1 C 语

12、言的基本元素 48 1、符号集 C 语言使用的基本符号。2、标识符 用来标记常量、变量、函数及文件名字的字符序列。3、关键字 C 程序规定的, 具有特定含义、 专门用作语言特定成分的一类标识符。 ANSI 推荐的 C 语言关键字是32 个。关键字全部应该小写。3.2 C 的数据类型 48 数据是操作的对象,数据类型是指数据的内在表现形式。如(数据代码、存储、运算) 。1、基本类型 :整型、字符型、实型。2、构造类型 :在基本类型的基础上,按照某种构成规则 构造而成 的类型。 数组、名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料

13、- - - - - - - - - - - - - - - 第 5 页,共 27 页 - - - - - - - - - 结构体、共用体、枚举型。3、指针类型 :用于存储地址的一类数据类型。4、空类型 :编译器根据变量的数据类型,给变量分配存储单元。3.3 常量与变量 48 1、符号常量符号常量在其作用域内不能改变,也不能被赋值。2、变量变量由变量名 和变量值 标识。?变量名实际上是一个符号地址 ,编译连接程序时给每个变量名 分配一个 内存地址 ,当程序访问变量值时,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。3.4 基本类型1、整形数据 在内存中的存放,是以补码形式 存放的

14、。2、实型数据 :单精度双精度。?在内存中以指数形势存放。?若数据超过有效位, 则超过 C 语言规定有效位的数据将被舍去,故产生误差。3、字符型数据 :用一个字节存储单元存储。即将字符的ASCII码存储到内存单元中。?用单引号括起来的一个字符。?转义字符特殊字符常量 或者 控制字符常量 ,它们都以“”开头。?Char、unsigned char 区别: char 用 7 位数表示,最大表示编码为127 的字符;unsigned char 用 8 位数表示,最大表示编码为255 的字符。?字符数据与整型数据可以相互赋值。?字符数据可以以字符数据输出,也可以以整型数据形式输出。4、字符串常量 :C

15、 语言中,必须是用字符数组 来保存字符串常量。在内存中顺序存储 。?用一对双引号括起来的字符序列。?每个字符串常量结尾以一个字符 0 作为 结束标记 。 (一般由系统自动加上)。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 27 页 - - - - - - - - - 3.5 变量 63 1、自动变量 在函数体内或复合语句中定义的非静态变量称为自动变量 。?C 语言编译时,不对自动变量赋初值。?当程序执行到自动变量的作用域时,程序才为自动变量分配空间。

16、当定义自动变量的函数或复合语句执行结束后,程序释放自动变量的存储空间。?自动变量保存在程序的动态存储空间 。2、静态局部变量在函数体内或复合语句中用static 定义的变量称为静态局部变量 。?C 语言编译时,对静态局部变量赋初值。?静态局部变量存储在程序的 静态存储空间 。?静态局部变量在程序的 整个运行期间 均占用程序的静态存储空间 ,直到程序退出后才释放存储空间。3、寄存器变量 用 register 声明的变量。4、外部变量(全局变量)在函数的外部定义的变量。它的作用域是从定义处开始,到本程序文件的末尾结束,在此作用域内,全局变量可以为程序的各个函数引用。?C 语言编译时,对全局变量赋初

17、值。?全局变量 存储在程序的静态存储空间 。?全局变量 在程序的 整个运行期间均占用程序的 静态存储空间,直到程序退出后才释放存储空间。注意:( 1)当引用本源文件后面定义的全局变量或引用在其他源文件中定义的全局变量是,应在引用位置前,利用extern 声明该全局变量,以告诉编译器编译时,引用的是一个 外部变量 ,在编译器连接时,将引用的外部变量的作用域扩展到本文件extern 声明处。( 2)用 static 声明的全局变量,不能被其他文件引用。注意:( 1)变量声明 分为 定义性声明 和引用性声明 。( 2)一般把建立存储空间的声明称为变量定义 ,把不需要建立存储空间的声明成为 变量声明。

18、名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 27 页 - - - - - - - - - 3.6 不同类型数据间的混合运算?不同类型数据进行混合运算时 ,不同类型的数据要先转换成 同一类型 ,按照类型级别由低到高(char, short int unsigned long double; float double)的顺序进行转换。?强制类型转换 (类型名)表达式 。强制类型转换也就是将存储数据的内存单元 强制转换为另一种数据类型的单元大小。即强制将存

19、放数据的内存单元 改变。?赋值时进行类型转换:将数据复制给变量时,将会将数据强制转换为要赋值变量的类型。 一般短类型转换为长类型时,进行符号扩展 ;长类型转换为短类型时,仅 赋值低位 ,难以保证数据的正确性。3.7 函数的调用过程(补充)?C 函数其实就是一个程序模块。?C 函数在编译时,单独编译成一个指令模块,在函数模块开始处定义保护现场指令 ,将用到的CPU 寄存器压入堆栈。在返回时定义了恢复现场指令,将堆栈数据恢复到CPU 寄存器。?在调用函数时,一般利用堆栈传递输入参数;利用EAX 传递输出参数 ,注意在函数调用完成后,要维持堆栈平衡 ,且函数返回输出参数在EAX 中,在使用输出参数前

20、,不要改变EAX 的值。第四章 最简单的 C 程序设计顺序程序设计77 4.1 字符数据的输入输出1、C 语言没有输入输出语句,IO 操作通过调用系统函数实现。2、在程序的开头,要有:#include “stdio.h”或 #include ,预定义语句,用来引用头文件,在编译时将头文件中的函数原型声明 添加到源文件中。默认输出设备显示屏,默认输入设备键盘。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 8 页,共 27 页 - - - - - - - - - 第五

21、章 选择结构的程序设计97 第六章 循环结构程序设计6.1 语句标号语句标号 用于定义程序中的某个位置 ,用 标识符表示 ,不能只用数字。6.2 break 语句和 continue 语句1、break 语句结束循环语句和switch 语句。2、continue 结束本次循环,即忽略循环体中剩余的语句。第七章 数组 132 7.1 构造类型构造类型 是 由基本类型 按照一定规则构造而成的 。 (如数组、结构体、共同体、枚举型)构造类型的每个分量(元素),是一个变量,它可以是一个简单类型或者构造类型。构造类型的分量占用相邻的存储空间。7.2 数组 133 1、数组是有序数据 的集合,数据元素类型

22、相同,顺序存储,占用相邻的存储空间。2、数组数组必须先定义后引用。静态数组变量定义时编译器自动初始化数据元素为0,动态数组变量在程序执行时分配存储空间,在未被赋值初始化之前其值随机。3、C 语言只能 逐个引用数组元素,不能一次引用整个数组。4、数组引用是“数组名+下标”引用,数组下标均为整数。如a2。7.3 二维数组1、数组元素为数组。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 27 页 - - - - - - - - - 2、在内存中,C 语言的二

23、维数组中数组元素的存放顺序是按行存放 的。3、二维数组引用是“数组名+下标 +下标” 。如 a12 。7.4 字符串字符数组1、一般用 0 来标识字符串结尾。0 占用一个字符变量空间。2、用 字符串赋值 字符数组时, C 编译器在字符串后自动加0 赋给字符数字。3、字符数组可以一次引用整个字符串数组。如整个字符串(数组)的输入输出,用%s 格式, 且在输入字符数组时,用数组名代表数组的首地址,对于二维数组, 仅仅写行下标不写列下标,也可以代表给行数组的首地址。在用 %s 输入输出字符串数组时,遇到0 结束。7.5 字符串处理函数#include 1、gets(字符数组名)从键盘输入一个字符串(

24、以回车结束 ) ,并返回字符 数组的起始地址。如 get(str) 。2、puts(字符数组名/字符串)将数组中的字符串(0 结尾的字符序列)输出到终端上,输完换行 。如 puts(str) ,puts( “ok” ) 。3、strcpy(目的字符数组1 名,源字符串 /字符数组2 名)拷贝时,将“0”一起拷贝过去。4、strcat(字符数组1 名,字符串 /字符数组2 名)将字符串 /字符数组2 连接到字符数组1 中。连接时,编译器去掉字符数组1 的“ 0” 。5、strcmp(字符串 /字符数组1 名,字符串 /字符数组2 名)比较字符串 /字符数组 1 名 和字符串 /字符数组2 名的大

25、小。字符串 /字符数组1字符串 /字符数组2,返回正数字符串 /字符数组1=字符串 /字符数组2,返回 0 字符串 /字符数组1字符串 /字符数组2,返回负数。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 10 页,共 27 页 - - - - - - - - - 第八章 函数 153 8.1 c 程序的结构 154 1、一个 C 程序可以分为若干个函数。2、每个程序只能有一个主函数,C 程序的执行从main 函数开始, 从 main 函数结束。3、函数间可以互相

26、调用,但主函数不能被调用。4、从用户角度看,函数可分为标准函数(库函数 )和 自定义函数 。其中,编译器仅编译自定义函数,在连接时才将标准库函数的目标代码连接到程序。5、一个 C 源程序由一个或多个文件构成,一个源程序文件是一个编译单位。8.2 函数调用参数传递1、值传递 如 数值形参 。此时,将 实参值 复制压栈 ,被调函数对复制到栈中的数值进行操作,不改变原来实参值。2、地址传递 如 数组形参(指针形参) ,此时,将实参数组的首地址压栈,被调函数引用实参数组的首地址,找到实参数组,对实参数组进行操作,改变实参数组值。即 形参数组和实参数组共享同一单元。8.3 函数变量的作用范围1、局部变量

27、 在定义局部变量的范围内有效。当局部变量重名时,有效范围小的优先 。?在函数内部定义局部变量?函数的形式参数?在某个复合语句中定义的变量。2、全局变量 在函数之外定义的变量。有效范围是从定义变量的位置开始到源文件结束 。8.4 变量的存储类别变量的存储类别,即生存期 。内存中供用户使用的存储空间包括:程序区 、静态存储区 、动态存储区 。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 11 页,共 27 页 - - - - - - - - - 1、静态存储区 在编译

28、时分配空间,在程序运行完后才释放存储空间。存储静态局部变量和全局变量。?局部静态变量在编译时赋初值,在执行时可改变该值,但该存储空间一直保存到程序结束。?定义局部静态变量,如果没有赋初值,编译时会自动赋默认初值。?局部静态变量只能在定义它的函数中使用。?全局变量都是静态的。?利用 extern 外部变量 方式表示变量的定义在别的文件中,提示 编译器 遇到此变量时,在其他模块中寻找其定义。而函数则是利用函数原型来声明。?用 static 关键字说明一个不能在其他源文件中引用的全局变量。即静态全局变量在声明它的整个文件都是可见的,但是在文件之外是不可见的。2、动态存储区 仅在在执行时分配空间,用完

29、后释放存储空间。存放 自动变量和形式参数。?寄存器变量 用register 关键字说明。寄存器变量对寄存器的占用是动态的。第九章 预处理命令 197 9.1 预编译命令作用预编译命令主要完成宏定义、文件包含、条件编译三种功能。1、宏定义 指用一个指定的标识符(名字)来代表一个 字符串 。在 预编译时 ,将宏名替代成字符串的过程称为宏展开 。如:?# define PI 3.1415926 定义宏 , # undef PI 终止宏定义的作用域。?#define V(a,b,c) a*b*c 定义带参数的宏。当宏展开时,将引用宏名语句 中的实参字符串 代替宏定义的 形参字符串。int v =V(2

30、,3,4) 则宏展开后为:int v= 2*3*4 ;2、文件包含 指一个源文件可以将另一个源文件的全部内容包含进来。如:?#include “文件名”或#include 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 12 页,共 27 页 - - - - - - - - - ?编译预处理时,将包含文件的全部内容复制到源文件中。在编译时作为一个源程序来编译。3、条件编译 在预编译处理时,确定编译时要编译的部分。如:?# ifdef 标识符程序段 1 # else

31、程序段 2 # endif ?# if 表达式程序段 1 # else 程序段 2 # endif 第十章 指针 211 10.1 变量的访问方式1、直接访问 如: int a = 10;2、间接访问 定义一个指针变量p,存放变量a 的首地址, 通过 p 访问变量a。则称指针变量p 指向变量a。如: int a=10;int *p1; p=&a ;b=*p1; 或 *p1=100 ;等价于a=100;10.2 指针变量1、指针变量 的类型 是指该变量指向的内存数据 的数据类型 。2、必须用 引用变量的地址给指针变量赋值。3、可以给指针变量赋值空值null ,防止指针变量存储随机值导致系统错误。

32、4、数组名 代表数据的首地址。数组指针或数组名+1,指向下一个数组元素的存储地址。声明格式: 数据类型*p ;赋值格式: p=a;或 p=&a0 ;引用格式: *p= 常量;等价于p0= 常量;等价于a0=常量;等价于*a=常量;名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 13 页,共 27 页 - - - - - - - - - * (p+1)=常量;等价于p1= 常量;等价于a1= 常量;等价于 *(a+1)=常量;5、数组名和指针变量虽然都可以代表数组的首

33、地址,但是指针变量值可以改变,而数组名的值不可以改变。6、函数的指针 专门用来存放函数的入口地址 ,当把函数的地址赋值给它时,它就指向该函数的入口地址。声明格式 :数据类型( * 指针变量名)() 如: int (*P) () ;赋值格式 :p=max; 注 max 为定义的函数名;函数名代表该函数的入口地址。引用格式 :c=( *p) (a,b) ;等价 c=max(a,b) ;7、只能将变量已分配的地址赋值给指针变量,不能直接将整数赋值给指针变量。8、指针变量可以有null 值,防止指针误作用。第十一章结构体 270 11.1 结构体 270 1、作用将不同类型的数据组合成一个有机的整体。

34、2、结构体的定义结构体是一种数据结构 ,按照某种规则定义,将若干个不同数据类型(也可相同)的数据项的组合成的一个有机整体 。3、声明结构体类型的形式:struct 结构体类型 名字成员列表 ;?成员列表形式:类型符成员名如: int num;11.2 声明结构体类型变量的方法271 1、先定义结构体类型:struct 结构体 类型 名字 成员列表 ;再定义结构体变量:struct 结构体 类型 名字结构体变量名。2、可在定义结构体类型时,定义结构体类型变量。struct 结构体 类型 名字成员列表结构体类型变量1,结构体类型变量2,;11.3 结构体变量引用 273 1、不能将一个结构体变量作

35、为一个整体进行输入输出,只能对结构体变量成员分别赋值。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 14 页,共 27 页 - - - - - - - - - 2、结构体变量成员引用方式:结构体变量名 .成员名3、如果结构体变量成员是另一个结构体变量,则要用若干个成员运算符,一级一级找到最低一级的成员。11.4 结构体变量初始化1、在 声明变量 时整体赋值。2、复制 相同结构的变量赋值。3、除以上两种情况下可以对结构体类型变量整体赋值, 其余情况下 只能对变量成员

36、分别赋值。11.5 结构体数组 2751、结构体 数组 在内存中 连续存放 。2、声明方式:与定义结构体变量方法相同。见11.2,只是在变量名后+n 。也可在定义结构体数组时直接初始化结构体数组,此时可采用+的形式。3、初始化方式:同定义结构体变量方法。11.6 结构体类型指针结构体类型指针是指指向结构体变量 所占据的内存的起始位置 的指针。声明形式 :struct 结构体类型名*指针名 。如: struct student *p ;赋值形式 :指针名 =& 结构体变量。如: p=&studengt1 ;引用形式 : (*P).成员名或 p-成员名。 *p 表示指针p 指向的结构体变量。注意:

37、1、定义的结构体类型,和声明结构体变量时不分配空间 。2、结构体可以嵌套定义。3、结构体成员名可以与变量名相同。11.7 链表 283 1、单项链表结构:链表有一个头指针 和 表尾 null 指针。每个结点包含实际数据和下一个结点的地址。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 15 页,共 27 页 - - - - - - - - - 2、可以用结构体类型指针,将多个结构体变量链接起来形成结构体链表 。如:11.8 共用体 297 1、共用体指将几种不同类型

38、的变量存储在同一段内存单元中。2、共用体变量的存储单元大小等于最长成员变量所占内存的长度3、共用体变量中起作用的是最后一次存放成员。4、共用体类型声明方式:union 公用体类型名称成员变量列表 ;5、共用体变量声明方式: (1)union 公用体类型名称成员列表共用体变量;(2)先声明共用体类型,然后声明共用体变量,union 公用体类型名称共用体变量。11.9 枚举类型 301 1、枚举类型指将变量的值一一列举出来,变量的值只限于列举出来的值的名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - -

39、 - - - - - - 第 16 页,共 27 页 - - - - - - - - - 范围内的一个。2、声明枚举类型:enum 枚举类型名称枚举常量列表 ;3、声明枚举变量:enum 枚举类型名称枚举类型变量;11.10 用 typedef 定义的类型 304 1、typedef 的作用可以用typedef 声明新的类型名来代替已有的类型名。2、声明方式:typedef 类型名称新的类型名称。第十二章位运算 308 12.1 位段 315 1、位段 是一种特殊的数据结构,它允许定义一个由位组成 段,并可为它赋以一个名字。位段一般作为结构体的成员。2、声明方法:?位段结构类型声明方法: st

40、ruct 结构体类型名称位段成员列表 ;?位段结构成员(即 位段变量 )声明方法: unsigned int 位段变量: n;如:?struct packed_struct unsigned int f1 :1; unsigned int f2 :1; unsigned int f3 :1; unsigned int type :4; unsigned int index :9; ;3、位段结构类型变量声明方法:同结构体。4、同一位段必须存储在同一个存储单元中,不能跨两个单元。第十三章文件 319 13.1 文件 319 1、文件指存储在外部介质上的数据集合(数据文件),操作系统以文件为单位对

41、数据进行管理。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 17 页,共 27 页 - - - - - - - - - 13.2 文件的分类 319 1、从用户的观点看:?特殊文件 指标准输入输出文件或标准设备文件。?普通文件 指磁盘文件。2、从操作系统的角度看:每一个与主机相关联的输入输出设备都可看作一个文件。( 1)根据文件的组织形式分为:顺序存取文件和 随机存取文件。( 2)根据文件的存储形式分为:ASCII 文件和 二进制文件 。13.3 C 语言对文件的

42、处理方法319 C 语言中对文件的存取是以字符(字节)为单位的,一个输入输出流就是一个字节流 或二进制流 。文件的存储方式分为 缓冲文件系统和非缓冲文件系统。区别是 缓冲文件系统 是系统自动开辟缓冲区, 非缓冲文件系统是由 程序 为每个文件 设定缓冲区 。ANSI C 标准只采用缓冲文件系统来处理文件。13.4 文件结构体类型321 缓冲文件系统中,每个被使用的文件都在内存中开辟一个FILE 结构体类型 的区,用来存放文件的有关信息(文件名字、文件状态、当前位置、缓冲区等有关信息),FILE 结构体类型原型:?typedef structshort level; *缓冲区 “ 满” 或“ 空

43、” 的程度 * unsigned flags; * 文件状态标志*char fd; *文件描述符 *unsigned char hold; *如无缓冲区不读取字符* short bsize; * 缓冲区的大小 * unsigned char *buffer; / * 数据缓冲区的位置*/ unsigned char *curp; /* 指针,当前的指向*/ unsigned istemp; /* 临时文件,指示器*/ 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第

44、18 页,共 27 页 - - - - - - - - - short token;/* 用于有效性检查*/FILE ;13.5 文件结构体数组和指针321 FILE *fp 声明了一个指向FILE 类型结构体的指针变量。FILE f5声明了一个文件结构体数组f,它有 5 个元素,存放5 个文件的信息。FILE 变量声明了一个文件结构体变量。13.6 文件的操作 321 C 语言要求,在文件读写之前要“打开”文件,在使用结束后要“关闭”文件。1、打开文件:?FILE *fp ;?fpfopen( “文件名”, “使用文件方式” ) ;指针变量指向被打开的文件。例如: fp = fopen( “

45、a1” , “r” ) 。2、关闭文件:fclose(文件指针) ;返回值: 关闭成功返回值为;否则返回EOF(-1) 。使文件指针变量不指向该文件,也就是文件指针变量与文件“ 脱钩 ” ,此后不能再通过该指针对原来与其相联系的文件进行读写操作。3、将字符写到文件中:fputc ( ch ,fp ) ;返回值: 如果输出成功,则返回值就是输出的字符;如果输出失败,则返回一个EOF(-1) 。将字符( ch 的值)输出到文件指针fp 所指向的文件中去。该文件必须是以写或读写方式 打开的。4、将字符从文件中读出:chfgetc(fp) ;返回值: 读取成功一个字符,赋给c。如果遇到文件结束符,返回

46、一个文件结束标志EOF(-1) 。从指定的文件读入一个字符,该文件必须是以读或读写方式 打开的。注意: ANSI C 提供一个feof ()函数来判断文件是否真的结束。如果是文件结束,函数 feof(fp)的值为(真) ;否则为(假) 。以上也适用于文本文件的读取。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 19 页,共 27 页 - - - - - - - - - 5、数据块读写:?fread (buffer,size,count, fp); ?fwrite(

47、buffer,size,count,fp); buffer :是一个指针。对fread 来说,它是读入数据的存放地址。对fwrite 来说,是要输出数据的地址(均指起始地址)。size:要读写的字节数。count: 要进行读写多少个size 字节的数据项。fp:文件型指针。6、格式化读写函数:?fprintf ( 文件指针,格式字符串,输出表列);?fscanf ( 文件指针,格式字符串,输入表列);注意:用 fprintf 和 fscanf 函数对磁盘文件读写,使用方便,容易理解,但由于在输入时要将ASCII 码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。因此,在内

48、存与磁盘频繁交换数据的情况下,最好不用fprintf 和 fscanf函数,而用fread 和 fwrite 函数。7、以“字”或者整数为单位读写函数:?putw(int i,FILE * fp);?int i = getw(FILE * fp);8、以“字符串”为单位读写文件的函数:?fgets(str,n,fp); 从 fp 指向的文件读出n-1 个字符, 在最后加一个 0 。返回值:str 的首地址。如果遇到EOF 则读入结束。?fputs(“ china” ,fp); 把字符串写入到fp 指向的文件。第一个参数可以是字符串常量、字符数组名或字符型指针。字符串末尾的不输出。13.7 文件

49、的定位 333 1、将文件当前的位置指针 重新返回到 文件的开头 位置:无返回值。?rewind (fp) ;执行后,将文件的位置指针重新定位到文件的开头。2、随机读写:改变文件的位置指针,一般用于二进制文件。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 20 页,共 27 页 - - - - - - - - - ?fseek(文件类型指针,位移量,起始点);无返回值。起始点:文件开头SEEK_SET 0 文件当前位置SEEK_CUR 1 文件末尾SEEK_END

50、 2 位移量:以起始点为基点,向后(前,末尾时)移动的字节数。一般要求为long型。3、获取 流式文件 当前的位置指针:返回当前位置用相对于文件开头的位移量来表示。,出错时返回EOF。?i = ftell(fp) ;13.8 出错检测 335 1、ferror (fp) ;返回 0,表示未出错;返回非0,表示出错。注意:在调用一个输入输出函数后立即检查ferror 函数的值,否则信息会丢失。在执行 fopen 函数时, ferror 函数的初始值自动置为。2、clearerr(fp) ; 使文件错误标志和文件结束标志置为0。只要出现错误标志,就一直保留,直到对同一文件调用clearerr 函数

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

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com