1 / 21

《C 语言程序设计 》

《C 语言程序设计 》. 第十二章 文 件. 主讲教师 : 杜风雷. 本 章 任 务. 任务 1 :将 5 个盘子的汉诺塔操作步骤输出到文件。 任务 2 :从文件中读入 50 个整数,按降序排列后输出到另一文件。 任务 3 :编程处理师生信息:编号、姓名、类别( T 老师, S 学生),如果是老师,增加工资信息(实型),如果是学生,增加成绩信息(整型)。从文件读入 5 名师生信息,教师工资增加 500 元,然后输出师生信息到另一文件。. 预 备 知 识. $12.1 文件 一、文件概念

mieko
Download Presentation

《C 语言程序设计 》

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 《C语言程序设计》 第十二章 文 件 主讲教师: 杜风雷

  2. 本 章 任 务 任务1:将5个盘子的汉诺塔操作步骤输出到文件。 任务2:从文件中读入50个整数,按降序排列后输出到另一文件。 任务3:编程处理师生信息:编号、姓名、类别(T 老师,S 学生),如果是老师,增加工资信息(实型),如果是学生,增加成绩信息(整型)。从文件读入5名师生信息,教师工资增加500元,然后输出师生信息到另一文件。

  3. 预 备 知 识 $12.1 文件 一、文件概念 文件:一般指存储在外部介质上的数据的集合。广义而言,每一个也主机相联的输入输出设备都可以看作是一个文件。 比如:键盘是输入文件,显示屏和打印机是输出文件。 输入设备 程 序 流 文 件 抽 象 输出设备

  4. 预 备 知 识 二、文件分类 ASCII文件:文本文件,每一个字节存储一个ASCII码字符。 二进制文件:把内存中的数据原样存储到文件中。 例:把10000存储文件中,ASCII文件占5个字节,二进制文件占2个字节 ASCII文件 1 0 0 0 0 内存中的存储形式 二进制文件

  5. 预 备 知 识 三、文件类型 FILE:结构体类型 在VC++系统中定义如下(stdio.h): struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE;

  6. 预 备 知 识 四、文件操作 1、打开文件 函数:FILE *fopen(char *fname,char *mode); 功能:以mode指定的方式打开文件fname。 返回值:正常打开文件时返回对应文件结构体的首地址,否则返回空指针 文件打开模式(mode取值): r 打开一个文本文件,只读 ,文件指针指向文件开头(文件已经存在) w 生成一个文本文件,只写 (若存在同名文件,将会被覆盖) a 打开一个文本文件,追加数据,文件指针指向文件尾 r+ 打开一个文本文件,可读可写 w+ 生成一个文本文件,可读可写 a+ 打开一个文本文件,可读可写 rb、wb、ab、rb+、wb+、ab+ 针对二进制文件操作

  7. 预 备 知 识 四、文件操作 2、关闭文件 函数:int fclose(FILE *stream); 功能:关闭stream所指向的文件。 返回值:正常关闭返回0,否则返回非零。 3、读文件(输入) 函数:int fscanf(FILE *stream,char *format,arg_list); 功能:从stream所指向的文件中按format指定的格式读取数据给变量地址列表中的变量。 返回值:正常读取返回实际被赋值的变量的个数,否则返回负值。 4、写文件(输出) 函数:int fprintf(FILE *stream,char *format,arg_list); 功能:将变量列表中的变量值按format指定的格式写入stream所指向的文件中。 返回值:正常写入返回实际写入的字符个数,否则返回负值。

  8. 任 务 1 任务1:将5个盘子的汉诺塔操作步骤输出到文件。 文本文件名:file_out.txt 打开方式:w

  9. 任 务 1 #include <stdio.h> void move(char a,char b); void hano(int n,char s,char m,char t); FILE *fp; void main( ) { char s='A',m='B',t='C'; int n=5; fp=fopen("c:\\file_out.txt","w"); hano(n,s,m,t); fclose(fp); }

  10. 任 务 1 void move(char a,char b) { fprintf(fp,"%c-->%c\n",a,b); } void hano(int n,char s,char m,char t) { if(n==1) move(s,t); else { hano(n-1,s,t,m); move(s,t); hano(n-1,m,s,t); } }

  11. 任 务 2 任务2:从文件中读入50个整数,按降序排列后输出到另一文件。 输入文件:file_in.txt 打开方式:r 输出文件:file_out.txt 打开方式:w

  12. 任 务 2 #include <stdio.h> #define N 50 void main( ) { FILE *fp; int a[N]; int i,j,t; fp=fopen("C:\\file_in.txt","r"); for(i=0;i<=N-1;i++) fscanf(fp,"%d",&a[i]); fclose(fp);

  13. 任 务 2 for(i=0;i<N-1;i++) for(j=i+1;j<=N-1;j++) if(a[i]<a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } fp=fopen("c:\\file_out.txt","w"); for(i=0;i<=N-1;i++) { fprintf(fp,"%d ",a[i]); if(i%10==9) fprintf(fp,"\n"); } fclose(fp); }

  14. 任 务 3 任务3:编程处理师生信息:编号、姓名、类别(T 老师,S 学生),如果是老师,增加工资信息(实型),如果是学生,增加成绩信息(整型)。从文件读入5名师生信息,教师工资增加500元,然后输出师生信息到另一文件。 输入文件:fin.txt 打开方式:r 输出文件:fout.txt 打开方式:w

  15. 任 务 3 #include <stdio.h> #define N 5 void main( ) { union gc { float gz; int cj; }; struct ss { int bh; char xm[8]; char lb; union gc d; }; struct ss a[N]; int i; FILE *fp;

  16. 任 务 3 fp=fopen("C:\\fin.txt","r"); for(i=0;i<=N-1;i++) { fscanf(fp,"%d %s %c",&a[i].bh,a[i].xm,&a[i].lb); if(a[i].lb=='T') fscanf(fp,"%f",&a[i].d.gz); else fscanf(fp,"%d",&a[i].d.cj); } fclose(fp);

  17. 任 务 3 for(i=0;i<=N-1;i++) if(a[i].lb=='T') a[i].d.gz+=500; fp=fopen("c:\\fout.txt","w"); for(i=0;i<=N-1;i++) if(a[i].lb=='T') fprintf(fp,"%d %s %c %.2f\n",a[i].bh,a[i].xm,a[i].lb,a[i].d.gz); else fprintf(fp,"%d %s %c %d\n",a[i].bh,a[i].xm,a[i].lb,a[i].d.cj); fclose(fp); }

  18. 知识拓展 1、getc函数 int getc(FILE *stream) 从指定文件中读取一个字符 2、putc函数 int putc(int ch,FILE *stream) 将ch写入指定文件 3、getw函数 int getw(FILE *stream) 从指定文件中读取一个整型量 4、putw函数 int putw(int i,FILE *stream) 将i的值写入指定文件 5、fgets函数 char *fgets(char *str,int num,FILE *stream) 从指定文件中读取num-1个字符存储到str所指向的字符数组中。

  19. 知识拓展 6、fputs函数 int fputs(char *str,FILE *stream) 将str所指向的字符串写入指定文件。 7、fread函数 int fread(void *buff,int SIZE,int count,FILE *stream) 从指定文件中读取一个数据块。 8、fwrite函数 Int fwrite(void *buf,int size,int count,FILE *stream) 向指定文件中写入一个数据块。

  20. 上机实训 掌握文件及基本操作; 能利用文件完成数据的输入和输出。 [详见实训12 文件] 作业:教材P262--263页第一、二、三(7)题。

  21. 谢谢!

More Related