C高级语言程序设计:11预处理与文件函数_第1页
C高级语言程序设计:11预处理与文件函数_第2页
C高级语言程序设计:11预处理与文件函数_第3页
C高级语言程序设计:11预处理与文件函数_第4页
C高级语言程序设计:11预处理与文件函数_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、预处理的应用预处理的应用o 定义:在编译器进行编译前要求其按照特定需要进行预先的源代码编辑处理的功能被称为预处理。预处理语句以“#”为前缀符号,在其后的功能语句后安排有编辑参数。o 预处理不是编译,而是编译前对源代码进行的一种有规律的编辑行为,因而语句结束处没有分号;o 预处理语句的位置通常应置于全程作用域内;o 预处理的需求分类:n嵌入型编辑o #includeo #define预处理的应用预处理的应用o 典型的嵌入型预处理语句include有以下两类格式n 预定路径的文件嵌入:#includen 扩展路径的文件嵌入:#include ”文件名”n 如果指定特定的目录位置,则可以在文件名中使

2、用目录路径描述,如:#include ”c:tempa.h”n 在同一工程文档内部要重复使用同一个嵌入的文件名;预处理的应用预处理的应用o 典型的替换型编辑:n #define a bn #define pai 3.14n #define pai2 (pai+pai) o 替换编辑的注意要点:n 源代码替换编辑不能被理解为机器指令的替换;预处理的应用预处理的应用例:#define sq(x) (x)*(x)void main()int i=3,j;j=sq(i+);/(i+)*(i+)printf(“%d %d”,j,i);/*显示结果为:12还是9*/预处理的应用预处理的应用n 恰当使用参数

3、替换,#表示字符串,#表示数值;#define pr(x) printf(#xn)#define pai 3.14#define pai2 pai+pai#define paiout(x) printf(%fn,pai#x)void main()pr(abc);/*输出结果为:abc*/paiout(2); /*输出结果为:6.28*/预处理的应用预处理的应用o 分段替换编辑:例:#define alfa(x,y)void ();void main()#undef alfa#define alfa 2.72void sb()文件的分类文件的分类o 从用户观点:n 特殊文件(标准输入输出文件或标

4、准设备文件)n 普通文件(磁盘文件)o 从操作系统的角度看,每一个与主机相连的输入n 输出设备看作是一个文件。n 例:输入文件:终端键盘n 输出文件:显示屏和打印机文件的分类文件的分类o 按数据的组织形式:n ASCII文件(文本文件):每一个字节放一个ASCII代码n 二进制文件:把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放.n 例:整数10000在内存中的存储形式以及分别按ASCII码形式和二进制形式输出如下图所示:文件的分类文件的分类o C语言对文件的处理方法:n 缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。用缓冲文件系统进行的输入输出又称为高级磁盘

5、输入输出。n 非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。用非缓冲文件系统进行的输入输出又称为低级输入输出系统。文件的使用文件的使用o 文件是程序访问磁盘数据的最基本单位;o C语言中的文件是以指针为单位进行访问的;o 语法:FILE* 文件指针名;typedef struct shortlevel; * *缓冲区缓冲区“满满”或或“空空”的程度的程度* * unsignedflags; * *文件状态标志文件状态标志* * charfd; * *文件描述符文件描述符* * unsigned charhold; * *如无缓冲区不读取字符如无缓冲区不读取字符*

6、 * shortbsize; * *缓冲区的大小缓冲区的大小* * unsignedchar*buffer;/;/* *数据缓冲区的位置数据缓冲区的位置* */ / unsignedar*curp;/ /* *指针,当前的指向指针,当前的指向* */ / unsignedistemp;/ /* *临时文件,指示器临时文件,指示器* */ / shorttoken;/ /* *用于有效性检查用于有效性检查* */ /FILE;文件的使用文件的使用o FILE *fopen(const char *filename, const char *mode);o FILE *fp = fopen(C:C

7、ONFIG.SYS, rw);o filename是文件名,包含路径。如果不含路径,表示打开当前目录下的文件。o mode是打开方式,常用为“r”、“w”、“rw”和“a”,分别表示只读、只写、读写和添加。o “rb”表示只读二进制文件,返回值为指向此文件的指针,留待以后使用。如果打开失败,返回值为NULL。文件的使用方式文件的使用方式“r r” ( (只读只读) )为为输入输入打开一个打开一个文本文本文件文件“w w” ( (只写只写) )为为输出输出打开一个打开一个文本文本文件文件“a a” ( (追加追加) )向向文本文本文件尾增加数据文件尾增加数据“rbrb” ( (只读只读) )为为

8、输入输入打开一个打开一个二进制二进制文件文件“wbwb” ( (只写只写) )为为输出输出打开一个打开一个二进制二进制文件文件 abab“ ( (追加追加) )向向二进制二进制文件尾增加数据文件尾增加数据r+r+“ ( (读写读写) )为为读读/ /写写打开一个打开一个文本文本文件文件w+w+” ( (读写读写) )为为读读/ /写建立写建立一个新的一个新的文本文本文件文件a+a+” ( (读写读写) )为读为读/ /写打开一个文本文件写打开一个文本文件 rbrb+ +“ ( (读写读写) )为读为读/ /写打开一个写打开一个二进制二进制文件文件“wbwb+ +“ ( (读写读写) )为读为读

9、/ /写写建立建立一个新的一个新的二进制二进制文件文件“abab+ +” ( (读写读写) )为读为读/ /写打开一个写打开一个二进制二进制文件文件文件的使用文件的使用o int fclose(FILE *fp);n 把遗留在缓冲区中的数据写入文件,实施操作系统级的关闭操作;n 同时,释放与流联系的文件控制块,以后可以重复使用这部分空间;o fclose函数的返回值n 当顺利地执行了关闭操作,返回值为0;n 如果返回值为非零值,表示关闭时有错误;n 一般只有驱动器中无盘或盘空间不够时才失败,关闭失败会引起数据丢失、文件的破坏和程序中的随机错误。文件的使用文件的使用o 从一个文本文件顺序读入字符

10、并在屏幕上显示出来:ch = fgetc(fp);while(ch!=EOF)putchar(ch);ch = fgetc(fp); o 也可这样用:while(scanf(%d,&n)!=EOF)注意:EOF不是可输出字符,因此不能在屏幕上显示。由于字符的ASCII码不可能出现,因此EOF定义为是合适的。当读入的字符值等于时,表示读入的已不是正常的字符而是文件结束符。 文件的使用文件的使用o例:#includeconst int max=30;void main() const char* filename=test.dat; char* s=1,2,3,4,5,; char dma

11、x; FILE* f=fopen(filename,w|a); fputs(s,f); fputs(s,f); fclose(f); f=fopen(filename,r); fgets(d,max,f); printf(%sn,d); getch(); fclose(f);作业作业-统计字母o 题目描述o 给定一个只有小写英文字母组成的字符串,串长为n。请你编写程序求出这个字符串中出现次数最多的字母。o 作业要求o 输入为指定文件”data.in”o 结果输出到文件”data.out”作业作业-统计字母o 输入格式o 输入的第一行为t(0 t 10),表示有t组测试用例;对于每组测试用例,输入有两行;第一行是一个正整数n( 1 n 100)表示字符串的长度;后面一行是一个长度为n的字符串(只由小写字母组成)。o 输出格式o 对于每组测试用例,输出一行,仅输出出现次数最多的字母。测

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论