1、文件 预处理 用static声明变量 位运算 考试的典型题目,C语言补充,什么是文件 文件:存储在外部介质上(如磁盘和磁带等外存储器)数据或信息的集合。 例如:程序文件中保存着程序,而数据文件中保存着数据。 C12.C: C语言的源程序 文本文件 C12.OBJ: 目标文件 二进制文件 C12.EXE: 可执行文件 二进制文件 文件的分类 从文件数据的组织形式看 ASCII文件(或称文本文件,即TEXT文件) 二进制文件,打开文件 操作文件 关闭文件 打开文件:建立用户程序与文件的联系,为文件开辟文件缓冲区。 操作文件:是指对文件的读、写、追加和定位操作。 读操作:是从文件中读出数据,即将文件中的数据读入计算机; 写操作:是向文件中写入数据,即向文件输出数据。 追加操作:将数据写到原有数据的后面。 定位操作:文件读写位置指针。 关闭文件:切断文件与程序的联系,将文件缓冲区的内容写如磁盘,并释放文件缓冲区。,使用文件的一般步骤,C语言通过标准I/O库(stdio.h)函数实现文件操作,打开文件(fopen) fopen函数的调用形式是: FILE * fp; fp = fopen ( 文
2、件名, 文件使用方式); 文件名:需要打开的文件名称(字符串)。 文件使用方式:是具有特定含义的符号。 函数返回值: 失败:NULL,文件处理-fopen,文件处理-fopen的三种方式,文本文件的三种基本使用方式 ”r”:只读方式 为读(输入)文本文件打开文件。若文件不存在,则返回NULL。 ”w”:只写方式 为写(输出)文本文件打开文件。若文件不存在,则建立一个新文件;若文件已存在,则要将原来的文件清空。 ”a”:追加方式 在文本文件的末尾增加数据。若文件已存在,则保持原来文件的内容,将新的数据增加到原来数据的后面;若文件不存在,则返回NULL。,二进制文件的三种基本打开方式 ”rb”:只读方式。 ”wb”:只写方式。 ”ab”:追加方式。 文件的其他打开方式 ”r+”:可以文本文件进行读/写操作。 若文件不存在返回NULL;若文件存在内容不会被清空。 ”w+”:可以文本文件进行读/写操作。 若文件已经存在,则要先将文件原来的内容清空。 ”a+”:可以文本文件进行读/追加操作。文件内容不会清空。 ”rb+”:可以对二进制文件进行读/写操作。 ”wb+”:可以对二进制文件进行读/写操
3、作。 ”ab+”:可以对二进制文件进行读/追加操作。,文件处理-fopen的打开方式,关闭文件(fclose) fclose函数的调用形式是: FILE * fp; fclose ( fp ); fp:已经打开的文件指针。 函数功能 关闭fp指定的文件,切断缓冲区与该文件的联系,并释放文件指针。 函数feof(fp):文件结束的判断 文件结束,返回值是1 文件未结束,返回值是0,文件处理-fclose,进行顺序操作的函数 字符输入输出函数 fgetc fputc 字符串输入输出函数 fgets fputs 格式化输入输出函数 fscanf fprintf 数据块输入输出函数 fread fwrite,文件的顺序读写,字符输入输出( fgetc / fputc ) 输入函数: ch = fgetc(fp); /* fp为已经打开的文件的指针 */ 函数功能: 从指定的文件中读取一个字符。 字符输入输出( fgetc / fputc ) 输出函数: fputc(ch,fp); /* ch为需要输出的字符 */ 函数功能: 将一个字符输出到指定文件中。,文件顺序读写-fgetc/fputc,
4、例:从名为filea.dat的文本文件中逐个读入字符并显示,#include main ( ) FILE *fp; char ch; fp=fopen( ? ); ch=fgetc(fp); while(!feof(fp) putchar(ch); ch=fgetc(fp); putchar(“n”); fclose (fp); “filea.dat”,”r”,#include main ( ) FILE *f; f=fopen(“filea.txt”,”w”); fprintf(f,”abc”) fclose (f); 若文件中原有内容为:hello,则运行程序后,文件中的内容为: abc,#include main ( ) FILE *fp; if(f=fopen(“test.txt”,”r”)=?); printf(”未能打开文件n”); else printf(”打开文件成功n”); NULL (0),#include main ( ) FILE *fp; int a10=1,2,3,i,n; fp=fopen(“d1.dat”,“w“); for(i=0;i3;i+) fpr
5、intf(fp,“%d”,ai); fprintf(fp,”n”); fclose (fp); fp=fopen(“d1.dat”,“r“); fscanf(fp,“%d”, 123,例:读程序,写出运行结果,字符串输入输出( fgets / fputs ) 输入函数: fget(s, n, fp) char s ; int n; FILE *fp; 函数功能: 从 fp 所指向的文件中读取长度不超过 n-1 个字符的字符串,并将该字符串放到字符数组 s 中。函数的返回值为字符数组 s 的首地址;如果文件结束或出错,则返回 NULL。,文件顺序读写-fgets,格式化输入输出( fscanf / fprintf ) 输入函数: fscanf(fp,格式控制符,变量地址表) 函数功能: 从 fp 所指向的ASCII文件中读取字符,按格式控制符的含义存入对应的变量中,返回值为输入的数据个数。 输出函数: fprintf(fp,格式控制符,表达式列表) FILE *fp; 函数功能: 将表达式列表中的数据,按照格式控制符的说明,存入 fp 所指向的ASCII文件中,返回值为实际存入的数据个数
6、。,文件顺序读写-fscanf/fprintf,数据块输入输出( fread / fwrite ) 输入函数: fread(buffer, size, count, fp) 函数功能: 从文件fp中读取count个数据块存入buffer中,每个数据块的大小为size个字节。 输出函数: fwrite(buffer, size, count, fp) 函数功能: 将buffer中的count个数据块写入二进制文件 fp 中,每个数据块的大小为size个字节。,文件顺序读写-fread/fwrite,例:读程序,写出运行结果,#include main ( ) FILE *fp; int a10=1,2,3,0,0,0,i; fp=fopen(“d2.dat”,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose (fp); fp=fopen(“d2.dat”,“rb“); fread(a,sizeof(int),10,fp); fclose (fp); for(i=0;i10;i+) printf(“%
7、d”,ai); 1,2,3,0,0,1,2,3,0,0,位置指针移动(fseek) fseek(fp, offset, position ) 函数功能: 将指定文件 fp 的文件位置指针按照position规定的方式移动offset个字节。 position为起始点,指出以文件的什么位置为基准进行移动: 0 文件的开头; 1 文件的当前位置; 2 文件的末尾。 fseek(fp,50,0) 从文件头开始向前(文件尾方向)移动50个字节 fseek(fp,-10,1) 从当前位置向后(文件头方向)移动10个字节 fseek(fp,-20,2) 从文件尾开始向后(文件头方向)移动20个字节,文件随机读写-fseek,位置指针返回到文件头( rewind ) rewind ( fp ) 函数功能: 使 fp 指定的文件的位置指针重新定位到文件的头位置。,文件随机读写-rewind/ftell,例:读程序,写出运行结果,#include main ( ) FILE *fp; char *s1=“china”,*s2=“beijing”; fp=fopen(“abc.dat”,“wb+“); f
8、write(s2,7,1,fp); rewind(fp); fwrite(s1,5,1,fp); fclose (fp); chinang,编译预处理之宏定义,宏定义的格式: #define 标识符 字符串,宏定义的功能: 在进行编译前,用字符串原样替换程序中的标识符。,例: #define M 5 #define N M+M main() int k; k=N*N*5; k=M+M*M+M*5=5+5*5+5*5=55 printf(“%dn”,k); ,局部静态变量指用关键字定义的变量。 static 类型说明符 变量列表; 局部静态变量只在定义它的函数起作用。 可对其初始化,否则系统自动对其赋值0。 整个程序运行结束时,为其分配的内存才被释放。 static型局部变量的初始化仅被执行一次,再次执行该代码块时,不再执行初始化的工作。,局部静态变量,读程序,写结果,Int fun(int x) static int t=0; return (t+=x); 1+2+3+4+5=15 main() int s, t; for(i=1;i=5;i+) s=fun(i); printf(“%
9、dn”, s); ,If语句,int a,b,c; a=10;b=50;c=a; if(ab) a=b,b=a;c=a; printf(“a=%d b=%d c=%dn”,a,b,c); a=10 b=50 c=10,main() int x=1,y=2,z=3; if(xy) if(yz) printf(“%d”,+z); else printf(“%d”,+y); printf(“%dn”,x+); 1,malloc函数,格式: void *malloc(int size) 作用: 在内存的动态区存储中分配个长度为的连续空间,函数返回一个指向分配域起始地址的指针,int fun(int n) int *p; p=(int *)malloc(sizeof(int) *p=n; return *p; main() int a; a=fun(10); printf(“%dn”, a+fun(10); 20,位运算,首先将数据转换为二进制 &: 与 |: 或 : 非 : 异或(两数相同,结果为0;两数不同,结果为1) : 右移(1次=除2),main() char a=4; printf(“%dn”, a=a1); 8,a=01011101 b=11110000 要求将a高4位取反,低4位不变 ab a|b a&b a4,a=1,b=2,c=3 x=(ab)&c a=0001 b=0010 c=0011 x=0011=3,break语句,main() int k=5,n=0; do switch(k) case 1: case 3: n+=1;k-; break; default: n=0; k-; case 2: case 4: n+=2;k-; break; printf(“%d”,n); while(k0 235,main()
《[工学]c语言补充》由会员tia****nde分享,可在线阅读,更多相关《[工学]c语言补充》请在金锄头文库上搜索。