C语言程序设计谭浩强重点笔记.doc
《C语言程序设计谭浩强重点笔记.doc》由会员分享,可在线阅读,更多相关《C语言程序设计谭浩强重点笔记.doc(31页珍藏版)》请在咨信网上搜索。
C语言设计 学习笔记 早晨: 06:40 起床 07:20——08:20 英语 1小时 新概念英语(单词、语法、听读背) 大学英语(单词、语法、听读背) 早晨: 08:30——10:30 计算机基础 2小时 10:50——11:30 计算机科学技术导论 计算机组成原理 微机原理及接口技术 Intel微处理器结构编程和接口 深入了解计算机系统 80x86汇编语言程序设计 8086-8088宏汇编语言程序设计教程 BIOS研发技术剖析 自己动手写操作系统 操作系统原理 Windows操作系统原理 Windows内部原理系列 Windows程序内部运行原理 计算机网络第五版 中午: 12:00——02:00 午休 下午: 02:30——04:30 计算机应用及编程 Windows用户管理指南、AD配置指南、网络专业指南、Windows即学即会教程 Windows下32位汇编语言程序设计、C#编程 晚上: 05:30——08:00 锻炼、晚餐 08:00——09:00 教导 09:00——11: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.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 字符串处理函数 #include <string.h> - 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 结构体类型指针 - 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 小结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程序结构特点16 1、C程序基础构件——函数。 2、一个函数由函数首部和函数体两部分组成。 Ø 函数首部通常包含函数类型、函数名、函数参数等。 Ø 函数体通常包含申明部分和实施部分。其中:在申明部分中定义所用到变量;实施部分则由若干个语句组成。 3、C程序只有一个main函数,且总是从main函数开始实施。 4、C语言语句必需以“;”结束。 5、用/* */作为注释。 6、C编译器通常自顶向下次序编译C源程序,假如被调函数定义在主调函数以后位置时,要在主调函数前,给出被调函数原型说明。方便编译器在编译被调函数调用语句时,对调用语句进行参数检验。 假如不进行原型说明,则无法经过编译检验。 原型说明:类型说明 函数名(参数类型,参数类型,……) 7、头文件——头文件包含了C语言标准函数库原型说明。 C语言经过使用#include <>预处理命令,将库函数原型说明插入到源文件中。 1.2 C程序上机步骤17 1、编辑源文件 .c; 2、编译成目标文件.obj; 3、连接——将目标程序和库函数及其它目标程序连接起来,生产可实施文件,文件扩展名为.exe; 4、实施。 第二章 程序灵魂——算法23 2.1 算法24 1、算法——指为求解某一问题而采取具体方法和步骤。 2、两类算法——数值运算算法和非数值运算算法 3、算法特征——有穷性、确定性、有效性等 4、算法描述——文字描述法(如伪代码描述算法)、图形描述法(如步骤图和NS步骤图描述算法)。 2.2 算法三种基础结构 次序、选择、循环 2.3 结构化程序设计方法42 1、自顶向下——首先对问题进行分析,确定算法思绪。 2、逐步细化——依据算法思绪,制订原始算法步骤,并不停细化步骤。 3、模块设计——分解算法步骤,将功效相对独立部分划分为一个模块。 4、结构化编码——利用高级语言正确实现3种基础结构。 第三章 数据类型 运算符和表示式48 3.1 C语言基础元素48 1、符号集——C语言使用基础符号。 2、标识符——用来标识常量、变量、函数及文件名字字符序列。 3、关键字——C程序要求,含有特定含义、专门用作语言特定成份一类标识符。ANSI推荐C语言关键字是32个。关键字全部应该小写。 3.2 C数据类型48 数据是操作对象,数据类型是指数据内在表现形式。如(数据代码、存放、运算)。 1、基础类型:整型、字符型、实型。 2、结构类型:在基础类型基础上,根据某种组成规则结构而成类型。数组、结构体、共用体、枚举型。 3、指针类型:用于存放地址一类数据类型。 4、空类型: 编译器依据变量数据类型,给变量分配存放单元。 3.3 常量和变量48 1、符号常量——符号常量在其作用域内不能改变,也不能被赋值。 #define 符号常量(大写) 常量 2、变量——变量由变量名和变量值标识。 数据类型 变量; Ø 变量名实际上是一个符号地址,编译连接程序时给每个变量名分配一个内存地址,当程序访问变量值时,实际上是经过变量名找到对应内存地址,从其存放单元中读取数据。 3.4 基础类型 1、整形数据在内存中存放,是以补码形式存放。 2、实型数据:单精度 双精度。 Ø 在内存中以指数形势存放。 Ø 若数据超出有效位,则超出C语言要求有效位数据将被舍去,故产生误差。 3、字符型数据:用一个字节存放单元存放。立即字符ASCII码存放到内存单元中。 Ø 用单引号括起来一个字符。 Ø 转义字符——特殊字符常量或控制字符常量,它们全部以“\”开头。 Ø Char、unsigned char区分:char用7位数表示,最大表示编码为127字符;unsigned char用8位数表示,最大表示编码为255字符。 Ø 字符数据和整型数据能够相互赋值。 Ø 字符数据能够以字符数据输出,也能够以整型数据形式输出。 4、字符串常量:C语言中,必需是用字符数组来保留字符串常量。在内存中次序存放。 Ø 用一对双引号括起来字符序列。 Ø 每个字符串常量结尾以一个字符\0作为结束标识。(通常由系统自动加上)。 3.5 变量63 1、自动变量——在函数体内或复合语句中定义非静态变量称为自动变量。 Ø C语言编译时,不对自动变量赋初值。 Ø 当程序实施到自动变量作用域时,程序才为自动变量分配空间。当定义自动变量函数或复合语句实施结束后,程序释放自动变量存放空间。 Ø 自动变量保留在程序动态存放空间。 2、静态局部变量——在函数体内或复合语句中用static定义变量称为静态局部变量。 Ø C语言编译时,对静态局部变量赋初值。 Ø 静态局部变量存放在程序静态存放空间。 Ø 静态局部变量在程序整个运行期间均占用程序静态存放空间,直到程序退出后才释放存放空间。 3、寄存器变量——用register申明变量。 4、外部变量(全局变量)——在函数外部定义变量。它作用域是从定义处开始,到本程序文件末尾结束,在此作用域内,全局变量能够为程序各个函数引用。 Ø C语言编译时,对全局变量赋初值。 Ø 全局变量存放在程序静态存放空间。 Ø 全局变量在程序整个运行期间均占用程序静态存放空间,直到程序退出后才释放存放空间。 注意: (1)当引用本源文件后面定义全局变量或引用在其它源文件中定义全局变量是,应在引用位置前,利用extern 申明该全局变量,以告诉编译器编译时,引用是一个外部变量,在编译器连接时,将引用外部变量作用域扩展到本文件extern 申明处。 (2)用static 申明全局变量,不能被其它文件引用。 注意: (1)变量申明分为定义性申明和引用性申明。 (2)通常把建立存放空间申明称为变量定义,把不需要建立存放空间申明成为变量申明。 3.6 不一样类型数据间混合运算 Ø 不一样类型数据进行混合运算时,不一样类型数据要先转换成同一类型,根据类型等级由低到高(char,short—int——unsigned—long—double;float—double)次序进行转换。 Ø 强制类型转换——(类型名) 表示式。强制类型转换也就是将存放数据内存单元强制转换为另一个数据类型单元大小。即强制将存放数据内存单元改变。 Ø 赋值时进行类型转换:将数据复制给变量时,将会将数据强制转换为要赋值变量类型。通常短类型转换为长类型时,进行符号扩展;长类型转换为短类型时,仅赋值低位,难以确保数据正确性。 3.7 函数调用过程(补充) Ø C函数其实就是一个程序模块。 Ø C函数在编译时,单独编译成一个指令模块,在函数模块开始处定义保护现场指令,将用到CPU寄存器压入堆栈。在返回时定义了恢复现场指令,将堆栈数据恢复到CPU寄存器。 Ø 在调用函数时,通常利用堆栈传输输入参数;利用EAX传输输出参数,注意在函数调用完成后,要维持堆栈平衡,且函数返回输出参数在EAX中,在使用输出参数前,不要改变EAX值。 第四章 最简单C程序设计——次序程序设计77 4.1 字符数据输入输出 1、C语言没有输入输出语句,IO操作经过调用系统函数实现。 2、在程序开头,要有:#include “stdio.h”或 #include <stdio.h>,预定义语句,用来引用头文件,在编译时将头文件中函数原型申明添加到源文件中。 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 结束此次循环,即忽略循环体中剩下语句。 第七章 数组132 7.1 结构类型 结构类型——是由基础类型根据一定规则结构而成。(如数组、结构体、共同体、枚举型) 结构类型每个分量(元素),是一个变量,它能够是一个简单类型或结构类型。 结构类型分量占用相邻存放空间。 7.2 数组133 1、数组——是有序数据集合,数据元素类型相同,次序存放,占用相邻存放空间。 2、数组——数组必需先定义后引用。静态数组变量定义时编译器自动初始化数据元素为0,动态数组变量在程序实施时分配存放空间,在未被赋值初始化之前其值随机。 3、C语言只能逐一引用数组元素,不能一次引用整个数组。 4、数组引用是“数组名+下标”引用,数组下标均为整数。如a[2]。 7.3 二维数组 1、数组元素为数组。 2、在内存中,C语言二维数组中数组元素存放次序是按行存放。 3、二维数组引用是“数组名+下标+下标”。如a[1][2]。 7.4 字符串——字符数组 1、通常见\0来标识字符串结尾。\0占用一个字符变量空间。 2、用字符串赋值字符数组时,C编译器在字符串后自动加\0赋给字符数字。 3、字符数组能够一次引用整个字符串数组。如整个字符串(数组)输入输出,用%s格式,且在输入字符数组时,用数组名代表数组首地址,对于二维数组,仅仅写行下标不写列下标,也能够代表给行数组首地址。 在用%s输入输出字符串数组时,碰到\0结束。 7.5 字符串处理函数 #include <string.h> 1、gets(字符数组名) 从键盘输入一个字符串(以回车结束),并返回字符数组起始地址。 如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名大小。 字符串/字符数组1>字符串/字符数组2,返回正数 字符串/字符数组1=字符串/字符数组2,返回0 字符串/字符数组1<字符串/字符数组2,返回负数。 第八章 函数153 8.1 c程序结构154 1、一个C程序能够分为若干个函数。 2、每个程序只能有一个主函数,C程序实施从main函数开始,从main函数结束。 3、函数间能够相互调用,但主函数不能被调用。 4、从用户角度看,函数可分为标准函数(库函数)和自定义函数。其中,编译器仅编译自定义函数,在连接时才将标准库函数目标代码连接到程序。 5、一个C源程序由一个或多个文件组成,一个源程序文件是一个编译单位。 8.2 函数调用参数传输 1、值传输——如数值形参。此时,将实参值复制压栈,被调函数对复制到栈中数值进行操作,不改变原来实参值。 2、地址传输——如数组形参(指针形参),此时,将实参数组首地址压栈,被调函数引用实参数组首地址,找到实参数组,对实参数组进行操作,改变实参数组值。即形参数组和实参数组共享同一单元。 8.3 函数变量作用范围 1、局部变量——在定义局部变量范围内有效。当局部变量重名时,有效范围小优先。 Ø 在函数内部定义局部变量 Ø 函数形式参数 Ø 在某个复合语句中定义变量。 2、全局变量——在函数之外定义变量。有效范围是从定义变量位置开始到源文件结束。 8.4 变量存放类别 变量存放类别,即生存期。内存中供用户使用存放空间包含:程序区、静态存放区、动态存放区。 1、静态存放区——在编译时分配空间,在程序运行完后才释放存放空间。存放静态局部变量和全局变量。 Ø 局部静态变量在编译时赋初值,在实施时可改变该值,但该存放空间一直保留到程序结束。 Ø 定义局部静态变量,假如没有赋初值,编译时会自动赋默认初值。 Ø 局部静态变量只能在定义它函数中使用。 Ø 全局变量全部是静态。 Ø 利用extern 外部变量方法表示变量定义在别文件中,提醒编译器碰到此变量时,在其它模块中寻求其定义。而函数则是利用函数原型来申明。 Ø 用static 关键字说明一个不能在其它源文件中引用全局变量。即静态全局变量在申明它整个文件全部是可见,不过在文件之外是不可见。 2、动态存放区——仅在在实施时分配空间,用完后释放存放空间。存放自动变量和形式参数。 Ø 寄存器变量——用register关键字说明。寄存器变量对寄存器占用是动态。 第九章 预处理命令197 9.1 预编译命令作用 预编译命令关键完成宏定义、文件包含、条件编译三种功效。 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 <文件名> Ø 编译预处理时,将包含文件全部内容复制到源文件中。在编译时作为一个源程序来编译。 3、条件编译——在预编译处理时,确定编译时要编译部分。如: Ø # ifdef 标识符 程序段1 # else 程序段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,预防指针变量存放随机值造成系统错误。 4、数组名代表数据首地址。数组指针或数组名+1,指向下一个数组元素存放地址。 申明格式:数据类型 *p ; 赋值格式:p=a;或p=&a[0]; 引用格式:*p=常量;等价于p[0]=常量;等价于a[0]=常量;等价于*a=常量; *(p+1)=常量;等价于p[1]=常量;等价于a[1]=常量; 等价于*(a+1)=常量; 5、数组名和指针变量即使全部能够代表数组首地址,不过指针变量值能够改变,而数组名值不能够改变。 6、函数指针专门用来存放函数入口地址,当把函数地址赋值给它时,它就指向该函数入口地址。 申明格式:数据类型(*指针变量名)()如:int (*P)(); 赋值格式:p=max; 注max为定义函数名;函数名代表该函数入口地址。 引用格式:c=(*p)(a,b);等价——c=max(a,b); 7、只能将变量已分配地址赋值给指针变量,不能直接将整数赋值给指针变量。 8、指针变量能够有null值,预防指针误作用。 第十一章 结构体270 11.1 结构体270 1、作用——将不一样类型数据组合成一个有机整体。 2、结构体定义——结构体是一个数据结构,根据某种规则定义,将若干个不一样数据类型(也可相同)数据项组合成一个有机整体。 3、申明结构体类型形式:struct 结构体类型名字 {组员列表}; Ø 组员列表形式:类型符 组员名 如:int num; 11.2 申明结构体类型变量方法271 1、先定义结构体类型:struct 结构体类型名字 {组员列表};再定义结构体变量:struct结构体类型名字 结构体变量名。 2、可在定义结构体类型时,定义结构体类型变量。struct 结构体类型名字 {组员列表}结构体类型变量1,结构体类型变量2,……; 11.3 结构体变量引用273 1、不能将一个结构体变量作为一个整体进行输入输出,只能对结构体变量组员分别赋值。 2、结构体变量组员引用方法:结构体变量名.组员名 3、假如结构体变量组员是另一个结构体变量,则要用若干个组员运算符,一级一级找到最低一级组员。 11.4 结构体变量初始化 1、在申明变量时整体赋值。 2、复制相同结构变量赋值。 3、除以上两种情况下能够对结构体类型变量整体赋值,其它情况下只能对变量组员分别赋值。 11.5 结构体数组275 1、结构体数组在内存中连续存放。 2、申明方法:和定义结构体变量方法相同。见11.2,只是在变量名后+[n]。也可在定义结构体数组时直接初始化结构体数组,此时可采取+[]形式。 3、初始化方法:同定义结构体变量方法。 11.6 结构体类型指针 结构体类型指针——是指指向结构体变量所占据内存起始位置指针。 申明形式:struct 结构体类型名 *指针名。如:struct student *p; 赋值形式:指针名=&结构体变量 。如:p=&studengt1; 引用形式:(*P).组员名 或 p->组员名。*p表示指针p指向结构体变量。 注意: 1、定义结构体类型,和申明结构体变量时不分配空间。 2、结构体能够嵌套定义。 3、结构体组员名能够和变量名相同。 11.7 链表283 1、单项链表结构:链表有一个头指针和表尾null指针。每个结点包含实际数据和下一个结点地址。 2、能够用结构体类型指针,将多个结构体变量链接起来形成结构体链表。如: 11.8 共用体 297 1、共用体指将多个不一样类型变量存放在同一段内存单元中。 2、共用体变量存放单元大小等于最长组员变量所占内存长度 3、共用体变量中起作用是最终一次存放组员。 4、共用体类型申明方法:union 公用体类型名称 {组员变量列表}; 5、共用体变量申明方法:(1)union 公用体类型名称 {组员列表}共用体变量;(2)先申明共用体类型,然后申明共用体变量,union 公用体类型名称 共用体变量。 11.9 枚举类型301 1、枚举类型——指将变量值一一列举出来,变量值只限于列举出来值范围内一个。 2、申明枚举类型:enum 枚举类型名称 {枚举常量列表}; 3、申明枚举变量:enum 枚举类型名称 枚举类型变量; 11.10 用typedef定义类型304 1、typedef 作用——能够用typedef申明新类型名来替换已经有类型名。 2、申明方法:typedef 类型名称 新类型名称。 第十二章 位运算308 12.1 位段 315 1、位段——是一个特殊数据结构,它许可定义一个由位组成段,并可为它赋以一个名字。位段通常作为结构体组员。 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、同一位段必需存放在同一个存放单元中,不能跨两个单元。 第十三章 文件319 13.1 文件319 1、文件——指存放在外部介质上数据集合(数据文件),操作系统以文件为单位对数据进行管理。 13.2 文件分类319 1、从用户见解看: Ø 特殊文件——指标准输入输出文件或标准设备文件。 Ø 一般文件——指磁盘文件。 2、从操作系统角度看:每一个和主机相关联输入输出设备全部可看作一个文件。 (1)依据文件组织形式分为:次序存取文件 和 随机存取文件。 (2)依据文件存放形式分为:ASCII文件 和 二进制文件。 13.3 C语言对文件处理方法319 C语言中对文件存取是以字符(字节)为单位,一个输入输出流就是一个字节流或二进制流。 文件存放方法分为缓冲文件系统和非缓冲文件系统。区分是缓冲文件系统是系统自动开辟缓冲区,非缓冲文件系统是由程序为每个文件设定缓冲区。 ANSI C标准只采取 缓冲文件系统 来处理文件。 13.4 文件结构体类型321 缓冲文件系统中,每个被使用文件全部在内存中开辟一个FILE结构体类型区,用来存放文件相关信息(文件名字、文件状态、目前位置、缓冲区等相关信息), FILE结构体类型原型: Ø typedef struct{ short level; /*缓冲区“满”或“空”程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读取字符*/ short bsize; /*缓冲区大小*/ unsigned char *buffer; / *数据缓冲区位置*/ unsigned char *curp; /*指针,目前指向*/ unsigned istemp; /*临时文件,指示器*/ short token;/*用于有效性检验*/}FILE; 13.5 文件结构体数组和指针321 FILE *fp——申明了一个指向FILE类型结构体指针变量。 FILE f[5]——申明了一个文件结构体数组f,它有5个元素,存放5个文件信息。 FILE 变量——申明了一个文件结构体变量。 13.6 文件操作321 C语言要求,在文件读写之前要“打开”文件,在使用结束后要“关闭”文件。 1、打开文件: Ø FILE *fp; Ø fp=fopen(“文件名”,“使用文件方法”);指针变量指向被打开文件。 比如:fp = fopen(“a1”,“r”)。 2、关闭文件: fclose(文件指针);返回值:关闭成功返回值为0;不然返回EOF(-1) 。 使文件指针变量不指向该文件,也就是文件指针变量和文件“脱钩”,以后不能再经过该指针对原来和其相联络文件进行读写操作。 3、将字符写到文件中: fputc ( ch,fp ) ;返回值:假如输出成功,则返回值就是输出字符;假如输出失败,则返回一个EOF(-1)。 将字符(ch值)输出到文件指针fp所指向文件中去。该文件必需是以写或读写方法打开。 4、将字符从文件中读出: ch=fgetc(fp);返回值:读取成功一个字符,赋给ch。假如碰到文件结束符,返回一个文件结束标志EOF(-1)。 从指定文件读入一个字符,该文件必需是以读或读写方法打开。 注意:ANSI C提供一个feof()函数来判定文件是否真结束。假如是文件结束,函数feof(fp)值为1(真);不然为0(假)。以上也适适用于文本文件读取。 5、数据块读写: Ø fread (buffer,size,count,fp); Ø fwrite(buffer,size,count,fp); buffer:是一个指针。对fread 来说,它是读入数据存放地址。对fwrite来说,是要输出数据地址(均指起始地址)。 size: 要读写字节数。 count: 要进行读写多少个size字节数据项。 fp: 文件型指针。 6、格式化读写函数: Ø fprintf ( 文件指针,格式字符串,输出表列); Ø fscanf ( 文件指针,格式字符串,输入表列); 注意: 用fprintf和fscanf函数对磁盘文件读写,使用方便,轻易了解,但因为在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符,花费时间比较多。所以,在内存和磁盘频繁交换数据情况下,最好不用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指向文件。第一个参数能够是字符串常量、字符数组名或字符型指针。字符串末尾′\0′不输出。 13.7 文件定位333 1、将文件目前位置指针重新返回到文件开头位置:无返回值。 Ø rewind (fp);实施后,将文件位置指针重新定位到文件开头。 2、随机读写:改变文件位置指针,通常见于二进制文件。 Ø fseek(文件类型指针,位移量,起始点);无返回值。 起始点:文件开头 SEEK_SET 0 文件目前位置 SEEK_CUR 1 文件末尾 SEEK_END 2 位移量:以起始点为基点,向后(前,末尾时)移动字节数。通常要求为long型。 3、获取流式文件目前位置指针:返回目前位置——用相对于文件开头位移量来表示。,犯错时返回EOF。 Ø i = ftell(fp); 13.8 犯错检测335 1、ferror(fp);返回0,表示未犯错;返回非0,表示犯错。 注意:在调用一个输入输出函数后立即检验ferror函数值,不然信息会丢失。在实施fopen函数时,ferror函数初始值自动置为0。 2、clearerr(fp);使文件错误标志和文件结束标志置为0。 只要出现错误标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其它一个输入输出函数。调用后feeror(fp)值变为0,且文件结束标志置为0。 13.9 小结336 分类 函数名 功效 打开文件 fopen() 打开文件 关闭文件 fclose() 关闭文件 文件定位 fseek() 改变文件位置指针位置 Rewind() 使文件位置指针重新至于文件开头 Ftell() 返回文件位置指针目前值 文件状态 feof() 若到文件末尾,函数值为真 Ferror() 若对文件操作犯错,函数值为真 Clearerr() 使ferror和feof()函数值置零 文件读写 fgetc(),getc()从指定文件取得一个字符 fputc(),putc()把字符输出到指定文件 fgets()从指定文件读取字符串 fputs()把字符串输出到指定文件 getw()从指定文件读取一个字(int型) putw()把一个字输出到指定文件 fread()从指定文件中读取数据项 fwrite()把数据项写到指定文件中 fscanf()从指定文件按格式输入数据 fprintf()按指定格式将数据写到指定文件中 第十四章 C++对C扩充 338 14.1 C++特点338 1、C++保留了C语言原有全部优点,增加了面向对象机制。 2、C++源文件以.cpp为后缀。 3、除了能够用 /*……*/ 形式注释行外,还许可使用以// 开头单行注释。 4、除了能够用printf函数输出信息外,还能够用cout进行输出。cout作用是将<<运算符右侧内容送到输出设备中输出。使用cout需要用到头文件iostream.h,在程序第一行用#include命令将该头文件“包含”进来。 Ø cout <<" This is a c++ program.\ n" ; 14.2 C++输入输出 339 C++为了方便使用,除了能够利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。cout是由c和out两个单词组成,代表C++输出流,cin是由c和in两个单词组成,代表C++输入流。它们是在头文件iostream.h中定义。在键盘和显示器上输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作流式文件。 14.3 C++输出cout 1、cout必需和输出运算符<<一起使用。<< 在这里不作为位运算左移运算符,而是起插入作用,比如:cout<<"Hello!\n";作用是将字符串“Hello!\n” 插入到输出流cout中,也就是输出在标准输出设备上。 2、也能够不用\n控制换行,在头文件iostream.h中定义了控制符endl代表回车换行操作,作用和\n相同。endl含义是end of line,表示结束一行。 3、能够在一个输出语句中使用多个运算符<< 将多个输出项插入到输出流cout中,<<运算符结合方向为自左向右,所以各输出项按自左向右次序插入到输出流中。每输出一项要用一个<< 符号。 比如: Ø for (i=1; i<=3;i++) cout<<"- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 谭浩强 重点 笔记
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文