1、C语言设计学习笔记早晨:06:40起床07:2008:20英语 1小时 新概念英语(单词、语法、听读背)大学英语(单词、语法、听读背)早晨:08:3010:30计算机基础 2小时10:5011:30计算机科学技术导论计算机组成原理微机原理及接口技术Intel微处理器结构编程和接口深入了解计算机系统80x86汇编语言程序设计8086-8088宏汇编语言程序设计教程BIOS研发技术剖析自己动手写操作系统操作系统原理Windows操作系统原理Windows内部原理系列Windows程序内部运行原理计算机网络第五版中午:12:0002:00午休下午:02:3004:30计算机应用及编程Windows用
2、户管理指南、AD配置指南、网络专业指南、Windows即学即会教程Windows下32位汇编语言程序设计、C#编程晚上:05:3008:00锻炼、晚餐08:0009:00教导09:0011:00专业基础 2小时大学数学、大学物理、电机及拖动、电力电子技术、通信技术11:30休息目 录第一章 C语言概述- 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、3.2 C数据类型48- 2 -3.3 常量和变量48- 3 -3.4 基础类型- 3 -3.5 变量63- 4 -3.6 不一样类型数据间混合运算- 5 -3.7 函数调用过程(补充)- 5 -第四章 最简单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 字符串处理函数 #i
4、nclude - 7 -第八章 函数153- 8 -8.1 c程序结构154- 8 -8.2 函数调用参数传输- 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 -11.2 申明结构体类型变量方法271- 11 -11.3 结构体变量引用273- 11 -11.4 结构体变量初始化- 12 -11.5 结构体数组275- 12 -11.6 结构体类型
5、指针- 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- 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 小
6、结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 函数重载342- 21 -14.5 带缺省参数函数344- 21 -14.6 变量引用类型345- 22 -14.7 内置函数 348- 23 -14.8 作用域运算符349- 24 -第一章 C语言概述1.1 C程序结构特点161、C程序基础构件函数。2、一个函数由函数首部和函数体两部分组成。 函数首部通常包含函数类型、函数名、函数参数等。 函数体通常包含申明部
7、分和实施部分。其中:在申明部分中定义所用到变量;实施部分则由若干个语句组成。3、C程序只有一个main函数,且总是从main函数开始实施。4、C语言语句必需以“;”结束。5、用/* */作为注释。6、C编译器通常自顶向下次序编译C源程序,假如被调函数定义在主调函数以后位置时,要在主调函数前,给出被调函数原型说明。方便编译器在编译被调函数调用语句时,对调用语句进行参数检验。假如不进行原型说明,则无法经过编译检验。原型说明:类型说明 函数名(参数类型,参数类型,)7、头文件头文件包含了C语言标准函数库原型说明。C语言经过使用#include 预处理命令,将库函数原型说明插入到源文件中。1.2 C程
8、序上机步骤171、编辑源文件 .c;2、编译成目标文件.obj;3、连接将目标程序和库函数及其它目标程序连接起来,生产可实施文件,文件扩展名为.exe;4、实施。第二章 程序灵魂算法232.1 算法241、算法指为求解某一问题而采取具体方法和步骤。2、两类算法数值运算算法和非数值运算算法3、算法特征有穷性、确定性、有效性等4、算法描述文字描述法(如伪代码描述算法)、图形描述法(如步骤图和NS步骤图描述算法)。2.2 算法三种基础结构次序、选择、循环2.3 结构化程序设计方法421、自顶向下首先对问题进行分析,确定算法思绪。2、逐步细化依据算法思绪,制订原始算法步骤,并不停细化步骤。3、模块设计
9、分解算法步骤,将功效相对独立部分划分为一个模块。4、结构化编码利用高级语言正确实现3种基础结构。第三章 数据类型 运算符和表示式483.1 C语言基础元素481、符号集C语言使用基础符号。2、标识符用来标识常量、变量、函数及文件名字字符序列。3、关键字C程序要求,含有特定含义、专门用作语言特定成份一类标识符。ANSI推荐C语言关键字是32个。关键字全部应该小写。3.2 C数据类型48数据是操作对象,数据类型是指数据内在表现形式。如(数据代码、存放、运算)。1、基础类型:整型、字符型、实型。2、结构类型:在基础类型基础上,根据某种组成规则结构而成类型。数组、结构体、共用体、枚举型。3、指针类型:
10、用于存放地址一类数据类型。 4、空类型:编译器依据变量数据类型,给变量分配存放单元。3.3 常量和变量481、符号常量符号常量在其作用域内不能改变,也不能被赋值。#define 符号常量(大写) 常量2、变量变量由变量名和变量值标识。数据类型 变量; 变量名实际上是一个符号地址,编译连接程序时给每个变量名分配一个内存地址,当程序访问变量值时,实际上是经过变量名找到对应内存地址,从其存放单元中读取数据。3.4 基础类型1、整形数据在内存中存放,是以补码形式存放。2、实型数据:单精度 双精度。 在内存中以指数形势存放。 若数据超出有效位,则超出C语言要求有效位数据将被舍去,故产生误差。3、字符型数
11、据:用一个字节存放单元存放。立即字符ASCII码存放到内存单元中。 用单引号括起来一个字符。 转义字符特殊字符常量或控制字符常量,它们全部以“”开头。 Char、unsigned char区分:char用7位数表示,最大表示编码为127字符;unsigned char用8位数表示,最大表示编码为255字符。 字符数据和整型数据能够相互赋值。 字符数据能够以字符数据输出,也能够以整型数据形式输出。4、字符串常量:C语言中,必需是用字符数组来保留字符串常量。在内存中次序存放。 用一对双引号括起来字符序列。 每个字符串常量结尾以一个字符0作为结束标识。(通常由系统自动加上)。3.5 变量631、自动
12、变量在函数体内或复合语句中定义非静态变量称为自动变量。 C语言编译时,不对自动变量赋初值。 当程序实施到自动变量作用域时,程序才为自动变量分配空间。当定义自动变量函数或复合语句实施结束后,程序释放自动变量存放空间。 自动变量保留在程序动态存放空间。2、静态局部变量在函数体内或复合语句中用static定义变量称为静态局部变量。 C语言编译时,对静态局部变量赋初值。 静态局部变量存放在程序静态存放空间。 静态局部变量在程序整个运行期间均占用程序静态存放空间,直到程序退出后才释放存放空间。3、寄存器变量用register申明变量。4、外部变量(全局变量)在函数外部定义变量。它作用域是从定义处开始,到
13、本程序文件末尾结束,在此作用域内,全局变量能够为程序各个函数引用。 C语言编译时,对全局变量赋初值。 全局变量存放在程序静态存放空间。 全局变量在程序整个运行期间均占用程序静态存放空间,直到程序退出后才释放存放空间。注意:(1)当引用本源文件后面定义全局变量或引用在其它源文件中定义全局变量是,应在引用位置前,利用extern 申明该全局变量,以告诉编译器编译时,引用是一个外部变量,在编译器连接时,将引用外部变量作用域扩展到本文件extern 申明处。(2)用static 申明全局变量,不能被其它文件引用。注意:(1)变量申明分为定义性申明和引用性申明。(2)通常把建立存放空间申明称为变量定义,
14、把不需要建立存放空间申明成为变量申明。3.6 不一样类型数据间混合运算 不一样类型数据进行混合运算时,不一样类型数据要先转换成同一类型,根据类型等级由低到高(char,shortintunsignedlongdouble;floatdouble)次序进行转换。 强制类型转换(类型名) 表示式。强制类型转换也就是将存放数据内存单元强制转换为另一个数据类型单元大小。即强制将存放数据内存单元改变。 赋值时进行类型转换:将数据复制给变量时,将会将数据强制转换为要赋值变量类型。通常短类型转换为长类型时,进行符号扩展;长类型转换为短类型时,仅赋值低位,难以确保数据正确性。3.7 函数调用过程(补充) C函
15、数其实就是一个程序模块。 C函数在编译时,单独编译成一个指令模块,在函数模块开始处定义保护现场指令,将用到CPU寄存器压入堆栈。在返回时定义了恢复现场指令,将堆栈数据恢复到CPU寄存器。 在调用函数时,通常利用堆栈传输输入参数;利用EAX传输输出参数,注意在函数调用完成后,要维持堆栈平衡,且函数返回输出参数在EAX中,在使用输出参数前,不要改变EAX值。第四章 最简单C程序设计次序程序设计774.1 字符数据输入输出1、C语言没有输入输出语句,IO操作经过调用系统函数实现。2、在程序开头,要有:#include “stdio.h”或 #include ,预定义语句,用来引用头文件,在编译时将头
16、文件中函数原型申明添加到源文件中。stdio.h 输入输出语句string.h 字符串操作函数math.h 定义数字函数ctype.h 字符函数库intrins.h 内部函数stdlib.h 标准函数库absacc.h 绝对地址访问reg.h 专用寄存器文件默认输出设备显示器,默认输入设备键盘。第五章 选择结构程序设计第六章 循环结构程序设计6.1 语句标号语句标号用于定义程序中某个位置,用标识符表示,不能只用数字。6.2 break语句和continue语句1、break语句结束循环语句和switch语句。2、continue 结束此次循环,即忽略循环体中剩下语句。第七章 数组1327.1
17、结构类型结构类型是由基础类型根据一定规则结构而成。(如数组、结构体、共同体、枚举型)结构类型每个分量(元素),是一个变量,它能够是一个简单类型或结构类型。结构类型分量占用相邻存放空间。7.2 数组1331、数组是有序数据集合,数据元素类型相同,次序存放,占用相邻存放空间。2、数组数组必需先定义后引用。静态数组变量定义时编译器自动初始化数据元素为0,动态数组变量在程序实施时分配存放空间,在未被赋值初始化之前其值随机。3、C语言只能逐一引用数组元素,不能一次引用整个数组。4、数组引用是“数组名+下标”引用,数组下标均为整数。如a2。7.3 二维数组1、数组元素为数组。2、在内存中,C语言二维数组中
18、数组元素存放次序是按行存放。3、二维数组引用是“数组名+下标+下标”。如a12。7.4 字符串字符数组1、通常见0来标识字符串结尾。0占用一个字符变量空间。2、用字符串赋值字符数组时,C编译器在字符串后自动加0赋给字符数字。3、字符数组能够一次引用整个字符串数组。如整个字符串(数组)输入输出,用%s格式,且在输入字符数组时,用数组名代表数组首地址,对于二维数组,仅仅写行下标不写列下标,也能够代表给行数组首地址。在用%s输入输出字符串数组时,碰到0结束。7.5 字符串处理函数 #include 1、gets(字符数组名)从键盘输入一个字符串(以回车结束),并返回字符数组起始地址。如get(str
19、)。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名大小。字符串/字符数组1字符串/字符数组2,返回正数字符串/字符数组1=字符串/字符数组2,返回0字符串/字符数组1字符串/字符数组
20、2,返回负数。第八章 函数1538.1 c程序结构1541、一个C程序能够分为若干个函数。2、每个程序只能有一个主函数,C程序实施从main函数开始,从main函数结束。3、函数间能够相互调用,但主函数不能被调用。4、从用户角度看,函数可分为标准函数(库函数)和自定义函数。其中,编译器仅编译自定义函数,在连接时才将标准库函数目标代码连接到程序。5、一个C源程序由一个或多个文件组成,一个源程序文件是一个编译单位。8.2 函数调用参数传输1、值传输如数值形参。此时,将实参值复制压栈,被调函数对复制到栈中数值进行操作,不改变原来实参值。2、地址传输如数组形参(指针形参),此时,将实参数组首地址压栈,
21、被调函数引用实参数组首地址,找到实参数组,对实参数组进行操作,改变实参数组值。即形参数组和实参数组共享同一单元。8.3 函数变量作用范围1、局部变量在定义局部变量范围内有效。当局部变量重名时,有效范围小优先。 在函数内部定义局部变量 函数形式参数 在某个复合语句中定义变量。2、全局变量在函数之外定义变量。有效范围是从定义变量位置开始到源文件结束。8.4 变量存放类别变量存放类别,即生存期。内存中供用户使用存放空间包含:程序区、静态存放区、动态存放区。1、静态存放区在编译时分配空间,在程序运行完后才释放存放空间。存放静态局部变量和全局变量。 局部静态变量在编译时赋初值,在实施时可改变该值,但该存
22、放空间一直保留到程序结束。 定义局部静态变量,假如没有赋初值,编译时会自动赋默认初值。 局部静态变量只能在定义它函数中使用。 全局变量全部是静态。 利用extern 外部变量方法表示变量定义在别文件中,提醒编译器碰到此变量时,在其它模块中寻求其定义。而函数则是利用函数原型来申明。 用static 关键字说明一个不能在其它源文件中引用全局变量。即静态全局变量在申明它整个文件全部是可见,不过在文件之外是不可见。2、动态存放区仅在在实施时分配空间,用完后释放存放空间。存放自动变量和形式参数。 寄存器变量用register关键字说明。寄存器变量对寄存器占用是动态。第九章 预处理命令1979.1 预编译
23、命令作用预编译命令关键完成宏定义、文件包含、条件编译三种功效。1、宏定义指用一个指定标识符(名字)来代表一个字符串。在预编译时,将宏名替换成字符串过程称为宏展开。如: # define PI 3.1415926 定义宏,# undef PI 终止宏定义作用域。 #define V(a,b,c) a*b*c 定义带参数宏。当宏展开时,将引用宏名语句中实参字符串替换宏定义形参字符串。int v =V(2,3,4)则宏展开后为:int v= 2*3*4;2、文件包含指一个源文件能够将另一个源文件全部内容包含进来。如: #include “文件名”或#include 编译预处理时,将包含文件全部内容复
24、制到源文件中。在编译时作为一个源程序来编译。3、条件编译在预编译处理时,确定编译时要编译部分。如: # ifdef 标识符程序段1# else程序段2# endif # if 表示式程序段1# else程序段2# endif第十章 指针21110.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、必需用引用变量地址给指针变量赋值。
25、3、能够给指针变量赋值空值null,预防指针变量存放随机值造成系统错误。4、数组名代表数据首地址。数组指针或数组名+1,指向下一个数组元素存放地址。申明格式:数据类型 *p ;赋值格式:p=a;或p=&a0;引用格式:*p=常量;等价于p0=常量;等价于a0=常量;等价于*a=常量; *(p+1)=常量;等价于p1=常量;等价于a1=常量;等价于*(a+1)=常量;5、数组名和指针变量即使全部能够代表数组首地址,不过指针变量值能够改变,而数组名值不能够改变。6、函数指针专门用来存放函数入口地址,当把函数地址赋值给它时,它就指向该函数入口地址。申明格式:数据类型(*指针变量名)()如:int (
26、*P)();赋值格式:p=max; 注max为定义函数名;函数名代表该函数入口地址。引用格式:c=(*p)(a,b);等价c=max(a,b);7、只能将变量已分配地址赋值给指针变量,不能直接将整数赋值给指针变量。8、指针变量能够有null值,预防指针误作用。第十一章 结构体27011.1 结构体2701、作用将不一样类型数据组合成一个有机整体。2、结构体定义结构体是一个数据结构,根据某种规则定义,将若干个不一样数据类型(也可相同)数据项组合成一个有机整体。3、申明结构体类型形式:struct 结构体类型名字 组员列表; 组员列表形式:类型符 组员名 如:int num;11.2 申明结构体类
27、型变量方法2711、先定义结构体类型:struct 结构体类型名字 组员列表;再定义结构体变量:struct结构体类型名字 结构体变量名。2、可在定义结构体类型时,定义结构体类型变量。struct 结构体类型名字 组员列表结构体类型变量1,结构体类型变量2,;11.3 结构体变量引用2731、不能将一个结构体变量作为一个整体进行输入输出,只能对结构体变量组员分别赋值。2、结构体变量组员引用方法:结构体变量名.组员名3、假如结构体变量组员是另一个结构体变量,则要用若干个组员运算符,一级一级找到最低一级组员。11.4 结构体变量初始化1、在申明变量时整体赋值。2、复制相同结构变量赋值。3、除以上两
28、种情况下能够对结构体类型变量整体赋值,其它情况下只能对变量组员分别赋值。11.5 结构体数组2751、结构体数组在内存中连续存放。2、申明方法:和定义结构体变量方法相同。见11.2,只是在变量名后+n。也可在定义结构体数组时直接初始化结构体数组,此时可采取+形式。3、初始化方法:同定义结构体变量方法。11.6 结构体类型指针结构体类型指针是指指向结构体变量所占据内存起始位置指针。申明形式:struct 结构体类型名 *指针名。如:struct student *p;赋值形式:指针名=&结构体变量 。如:p=&studengt1;引用形式:(*P).组员名 或 p-组员名。*p表示指针p指向结构
29、体变量。注意:1、定义结构体类型,和申明结构体变量时不分配空间。2、结构体能够嵌套定义。3、结构体组员名能够和变量名相同。11.7 链表2831、单项链表结构:链表有一个头指针和表尾null指针。每个结点包含实际数据和下一个结点地址。2、能够用结构体类型指针,将多个结构体变量链接起来形成结构体链表。如:11.8 共用体 2971、共用体指将多个不一样类型变量存放在同一段内存单元中。2、共用体变量存放单元大小等于最长组员变量所占内存长度3、共用体变量中起作用是最终一次存放组员。4、共用体类型申明方法:union 公用体类型名称 组员变量列表;5、共用体变量申明方法:(1)union 公用体类型名
30、称 组员列表共用体变量;(2)先申明共用体类型,然后申明共用体变量,union 公用体类型名称 共用体变量。11.9 枚举类型3011、枚举类型指将变量值一一列举出来,变量值只限于列举出来值范围内一个。2、申明枚举类型:enum 枚举类型名称 枚举常量列表;3、申明枚举变量:enum 枚举类型名称 枚举类型变量;11.10 用typedef定义类型3041、typedef 作用能够用typedef申明新类型名来替换已经有类型名。2、申明方法:typedef 类型名称 新类型名称。第十二章 位运算30812.1 位段 3151、位段是一个特殊数据结构,它许可定义一个由位组成段,并可为它赋以一个名
31、字。位段通常作为结构体组员。2、申明方法: 位段结构类型申明方法:struct 结构体类型名称 位段组员列表; 位段结组组员(即位段变量)申明方法: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、同一位段必需存放在同一个存放单元中,不能跨两个单元。第十三章 文件31913.1 文件3191、文件指存放在
32、外部介质上数据集合(数据文件),操作系统以文件为单位对数据进行管理。13.2 文件分类3191、从用户见解看: 特殊文件指标准输入输出文件或标准设备文件。 一般文件指磁盘文件。2、从操作系统角度看:每一个和主机相关联输入输出设备全部可看作一个文件。(1)依据文件组织形式分为:次序存取文件 和 随机存取文件。(2)依据文件存放形式分为:ASCII文件 和 二进制文件。13.3 C语言对文件处理方法319C语言中对文件存取是以字符(字节)为单位,一个输入输出流就是一个字节流或二进制流。文件存放方法分为缓冲文件系统和非缓冲文件系统。区分是缓冲文件系统是系统自动开辟缓冲区,非缓冲文件系统是由程序为每个
33、文件设定缓冲区。ANSI C标准只采取 缓冲文件系统 来处理文件。13.4 文件结构体类型321缓冲文件系统中,每个被使用文件全部在内存中开辟一个FILE结构体类型区,用来存放文件相关信息(文件名字、文件状态、目前位置、缓冲区等相关信息),FILE结构体类型原型: typedef struct short level; *缓冲区“满”或“空”程度* unsigned flags; *文件状态标志* char fd; *文件描述符* unsigned char hold; *如无缓冲区不读取字符* short bsize; *缓冲区大小* unsigned char *buffer; / *数据
34、缓冲区位置*/ unsigned char *curp; /*指针,目前指向*/ unsigned istemp; /*临时文件,指示器*/ short token;/*用于有效性检验*/FILE; 13.5 文件结构体数组和指针321FILE *fp申明了一个指向FILE类型结构体指针变量。FILE f5申明了一个文件结构体数组f,它有5个元素,存放5个文件信息。FILE 变量申明了一个文件结构体变量。13.6 文件操作321C语言要求,在文件读写之前要“打开”文件,在使用结束后要“关闭”文件。1、打开文件: FILE *fp; fpfopen(“文件名”,“使用文件方法”);指针变量指向被
35、打开文件。比如:fp = fopen(“a1”,“r”)。2、关闭文件:fclose(文件指针);返回值:关闭成功返回值为;不然返回EOF(-1) 。使文件指针变量不指向该文件,也就是文件指针变量和文件“脱钩”,以后不能再经过该指针对原来和其相联络文件进行读写操作。3、将字符写到文件中:fputc ( ch,fp ) ;返回值:假如输出成功,则返回值就是输出字符;假如输出失败,则返回一个EOF(-1)。将字符(ch值)输出到文件指针fp所指向文件中去。该文件必需是以写或读写方法打开。4、将字符从文件中读出:chfgetc(fp);返回值:读取成功一个字符,赋给c。假如碰到文件结束符,返回一个文
36、件结束标志EOF(-1)。从指定文件读入一个字符,该文件必需是以读或读写方法打开。 注意:ANSI C提供一个feof()函数来判定文件是否真结束。假如是文件结束,函数feof(fp)值为(真);不然为(假)。以上也适适用于文本文件读取。 5、数据块读写: fread (buffer,size,count,fp); fwrite(buffer,size,count,fp); buffer:是一个指针。对fread 来说,它是读入数据存放地址。对fwrite来说,是要输出数据地址(均指起始地址)。size: 要读写字节数。count: 要进行读写多少个size字节数据项。fp: 文件型指针。6、
37、格式化读写函数: fprintf ( 文件指针,格式字符串,输出表列); fscanf ( 文件指针,格式字符串,输入表列); 注意: 用fprintf和fscanf函数对磁盘文件读写,使用方便,轻易了解,但因为在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。所以,在内存和磁盘频繁交换数据情况下,最好不用fprintf和fscanf函数,而用fread和fwrite函数。7、以“字”或整数为单位读写函数: putw(int i,FILE * fp); int i = getw(FILE * fp); 8、以“字符串”为单位读写文件函数: fgets
38、(str,n,fp); 从fp指向文件读出n-1个字符,在最终加一个0。返回值:str首地址。假如碰到EOF则读入结束。 fputs(“china”,fp); 把字符串写入到fp指向文件。第一个参数能够是字符串常量、字符数组名或字符型指针。字符串末尾不输出。 13.7 文件定位3331、将文件目前位置指针重新返回到文件开头位置:无返回值。 rewind (fp);实施后,将文件位置指针重新定位到文件开头。2、随机读写:改变文件位置指针,通常见于二进制文件。 fseek(文件类型指针,位移量,起始点);无返回值。起始点:文件开头 SEEK_SET 0 文件目前位置 SEEK_CUR 1 文件末尾
39、 SEEK_END 2位移量:以起始点为基点,向后(前,末尾时)移动字节数。通常要求为long型。3、获取流式文件目前位置指针:返回目前位置用相对于文件开头位移量来表示。,犯错时返回EOF。 i = ftell(fp); 13.8 犯错检测3351、ferror(fp);返回0,表示未犯错;返回非0,表示犯错。注意:在调用一个输入输出函数后立即检验ferror函数值,不然信息会丢失。在实施fopen函数时,ferror函数初始值自动置为。 2、clearerr(fp);使文件错误标志和文件结束标志置为0。只要出现错误标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或
40、任何其它一个输入输出函数。调用后feeror(fp)值变为0,且文件结束标志置为0。13.9 小结336分类 函数名 功效 打开文件 fopen() 打开文件 关闭文件 fclose() 关闭文件文件定位 fseek() 改变文件位置指针位置 Rewind() 使文件位置指针重新至于文件开头 Ftell() 返回文件位置指针目前值文件状态 feof() 若到文件末尾,函数值为真 Ferror() 若对文件操作犯错,函数值为真 Clearerr() 使ferror和feof()函数值置零文件读写 fgetc(),getc()从指定文件取得一个字符 fputc(),putc()把字符输出到指定文件
41、 fgets()从指定文件读取字符串 fputs()把字符串输出到指定文件 getw()从指定文件读取一个字(int型) putw()把一个字输出到指定文件 fread()从指定文件中读取数据项 fwrite()把数据项写到指定文件中 fscanf()从指定文件按格式输入数据 fprintf()按指定格式将数据写到指定文件中第十四章 C+对C扩充 33814.1 C+特点3381、C+保留了C语言原有全部优点,增加了面向对象机制。2、C+源文件以.cpp为后缀。3、除了能够用 /*/ 形式注释行外,还许可使用以/ 开头单行注释。4、除了能够用printf函数输出信息外,还能够用cout进行输出
42、。cout作用是将运算符右侧内容送到输出设备中输出。使用cout需要用到头文件iostream.h,在程序第一行用#include命令将该头文件“包含”进来。 cout This is a c+ program. n ;14.2 C+输入输出 339C+为了方便使用,除了能够利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。cout是由c和out两个单词组成,代表C+输出流,cin是由c和in两个单词组成,代表C+输入流。它们是在头文件iostream.h中定义。在键盘和显示器上输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作流式文件。
43、14.3 C+输出cout1、cout必需和输出运算符一起使用。 在这里不作为位运算左移运算符,而是起插入作用,比如:coutHello!n;作用是将字符串“Hello!n” 插入到输出流cout中,也就是输出在标准输出设备上。2、也能够不用n控制换行,在头文件iostream.h中定义了控制符endl代表回车换行操作,作用和n相同。endl含义是end of line,表示结束一行。3、能够在一个输出语句中使用多个运算符 将多个输出项插入到输出流cout中,运算符结合方向为自左向右,所以各输出项按自左向右次序插入到输出流中。每输出一项要用一个 符号。比如: for (i=1; i=3;i+)cout