第 10 章 文 件

40
第 10 第 第 第 10.1 10.1 文文文文文 文文文文文 10.2 文文文文文文文 第第第第

Upload: zasha

Post on 03-Feb-2016

179 views

Category:

Documents


0 download

DESCRIPTION

第 10 章 文 件. 10.1 文件的概述 10.2 文件的基本操作. 例题链接. 10.1 文件的概述. 文件的概念 文件 —— 存储在外部介质(如磁盘)上的数据的集合 操作系统是以文件为单位对数据进行管理的 . 按介质划分:磁盘文件、磁带文件 按文件内容划分:源程序文件、数据文件 按组织形式划分:文本文件和二进制文件 输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流 (stream) ,即输入输出流。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 10 章 文 件

第 10 章 文 件

10.1 10.1 文件的概述文件的概述

10.2 文件的基本操作

例题链接

Page 2: 第 10 章 文 件

10.1 文件的概述 文件的概念

文件 —— 存储在外部介质(如磁盘)上的数据的集合 操作系统是以文件为单位对数据进行管理的 .

按介质划分:磁盘文件、磁带文件按文件内容划分:源程序文件、数据文件按组织形式划分:文本文件和二进制文件

输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream) ,即输入输出流。

C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。一个输入输出流就是一个字节流或二进制流。

P290P290

返回

Page 3: 第 10 章 文 件

文本文件和二进制文件 文本文件和二进制文件

00000001 10110000

00000100 00000011 00000010

432 占 2 个字节(TC)

4 3 2

按二进制文件存储

按文本文件存储

不能用记事本显示

能用记事本显示

但速度快

但速度慢

占 3 个字节

Page 4: 第 10 章 文 件

1.234 占 4 个字节

1

2

按二进制文件存储

按文本文件存储

. 3

4 占 5 个字节

文本文件和二进制文件 文本文件和二进制文件

Page 5: 第 10 章 文 件

特点:文件中存放的都是数据,这些数据可以长期保留,可以随时存取

数据文件 数据文件

Page 6: 第 10 章 文 件

10.2 文件的基本操作““写”文件写”文件:

将数据从内存输出到磁 盘文件““ 读”文件读”文件:

从已建立的数据文件中将所要的数据输入到内存

P291P291

返回

Page 7: 第 10 章 文 件

【【例例 1010..11 】】 向文件输出数据的示例向文件输出数据的示例 将“将“ LetLet’’s study the C s study the C

language.language.”” 输出到一个文本文件输出到一个文本文件

向文件输出字符串的操作与用 printf 进行“输出”十分相似

对文件进行操作时,需要先打开文件,操作完毕还要关闭文件

编程点拨

Page 8: 第 10 章 文 件

#include <stdio.h>main( ) { char a[80]= "Let’s study the C

language."; FILE *fp=NULL; fp=fopen("a.txt","w"); fprintf(fp, "%s", a); fclose(fp); }

定义文件指针 fp 用“写”方式打开文本文件 a.txt

将数组 a 中的字符串输出到 fp 所指的文件中

关闭文件 屏幕上无任何显示

Page 9: 第 10 章 文 件

【【例例 1010..22 】】从文件读取数据的示例从文件读取数据的示例 将例将例 1010..11 所建文件“所建文件“ a.txta.txt”” 中的内容中的内容 读取出来,并输出到屏幕上读取出来,并输出到屏幕上

从文件读取数据的操作与用 scanf 进行“输入”十分相似

也需要先打开文件,操作完毕后关闭文件

编程点拨

Page 10: 第 10 章 文 件

#include <stdio.h>main( ){ char a[80]=""; FILE

*fp=NULL; fp=fopen("a.txt","r"); fscanf(fp, "%s", a); puts(a); fclose(fp); }

为“读取”打开文本文件 a.txt

从 fp 所指的文件中读入字符串,并存放在数组 a中

Let’s

注意:不输出 Let’s study the C language.

Page 11: 第 10 章 文 件

文件操作的说明:文件操作的说明:

定义文件指针定义文件指针

FILE * 文件指针名 ;

文件指针是一个名为 FILE (必须大写)的结构体类型的指针

需要加 #include <stdio.h>

Page 12: 第 10 章 文 件

打开文件打开文件 fopen (文件名,打开方式)

字符串 fp = fopen("a.txt","r");

if ( fp == NULL )

{ printf("Can’t open this file"); exit(0); }

单击可查看

单击此处查看

文件操作的说明:文件操作的说明:

Page 13: 第 10 章 文 件

标准输入输出函数标准输入输出函数 文件的读写操作是通过调用标

准输入输出函数完成

关闭文件关闭文件

fclose (文件指针)

Page 14: 第 10 章 文 件

【【例例 1010..33 】】输入若干学生的成绩输入若干学生的成绩 (( 整整型型 ) , ) , 用用 -1-1 结束,调用结束,调用fprintffprintf 函数,按格式将学生函数,按格式将学生的成绩写入的成绩写入 d:\cwz\b.txtd:\cwz\b.txt中中

Page 15: 第 10 章 文 件

#include <stdio.h>main( ){ FILE *fp=NULL; int a=0; fp=fopen("d:\\cwz\\b.txt","w"); if ( fp == NULL ) { printf("Can't open file !\n");

exit(0); } scanf("%d", &a); while( a != -1 ) { fprintf( fp,"%4d", a ); scanf( "%d", &a ); } fclose(fp);}

Page 16: 第 10 章 文 件

60 70 90 100 80 60 –1 屏幕上无任何信息,但在 d 盘 cwz 目录

下可以找到 b.txt 文件,且文件中的内容是: 60 70 90 100 80 60

如果在 d 盘下没有 cwz 目录,则文件打开失败,这时屏幕上显示信息:“ Can't open file !” ,然后结束程序的执行

Page 17: 第 10 章 文 件

【【例例 1010..44 】】调用调用 fscanffscanf 函数,按格函数,按格式读取例式读取例 1010..33 所建文件所建文件d:\cwz\b.txtd:\cwz\b.txt 中的学生成中的学生成绩,并在终端屏幕上输出绩,并在终端屏幕上输出最高成绩最高成绩

Page 18: 第 10 章 文 件

#include <stdio.h>main( ){ FILE *fp=NULL; int a=0, max=0; fp=fopen("d:\\cwz\\b.txt","r"); if( fp == NULL ) { printf("Can't open file !\n"); exit(0); } while( feof(fp) == 0 ) { fscanf(fp,"%d", &a); printf("%4d",

a ); if ( max < a ) max=a; } printf("\n max=%d\n", max); fclose(fp);}

若非文件尾,继续

到文件尾时, feof(fp) 为1

Page 19: 第 10 章 文 件

课堂练习键盘输入若干个身份证号码(以“ # ”

结束输入)存放在文件“ ID_card.txt” 中。

假设文件“ ID_card.txt” 中已存放若干身份证号码,输入当前日期,给那天生日的人显示贺词。

Page 20: 第 10 章 文 件

教学总结本次课的讲授内容是:1 .文件、文件指针的概念。2 .文件的打开、关闭、读写函数。3 . exit 函数。

Page 21: 第 10 章 文 件

作业P312 训练 10.1 、训练 10.2

预习例 10.5 ~ 例 10.7

Page 22: 第 10 章 文 件

(第(第 2222 次课)次课)【【例例 1010..55 】】假设学生基本情况包括学假设学生基本情况包括学

号和一门课成绩,从键盘输号和一门课成绩,从键盘输入若干学生的学号和成绩,入若干学生的学号和成绩,写入文件写入文件 d:\cwz\d:\cwz\stu01.txtstu01.txt 中,用中,用 -1-1 结束结束成绩输入成绩输入

Page 23: 第 10 章 文 件

#include <stdio.h> struct aaa { char num[10];

int s; };

Page 24: 第 10 章 文 件

main( ){ struct aaa stu={0}; FILE *fp=NULL; fp=fopen("d:\\cwz\\stu01.txt","w"); if( fp == NULL ) { printf("Can't open file !\n"); exit(0);} scanf("%s%d", stu.num, &stu.s ); while ( stu.s != -1) { fprintf(fp,"%10s%4d\

n",stu.num,stu.s); scanf("%s%d", stu.num, &stu.s ); } fclose(fp); }

Page 25: 第 10 章 文 件

1001 671002 791003 991004 1001005 871 –1

stu01.txt 的 内容:

1001 67 1002 79 1003 99 1004 100 1005 87

Page 26: 第 10 章 文 件

【【例例 1010..66 】】编写程序从例编写程序从例 1010..55 所建所建文件文件 d:\cwz\stu01.txtd:\cwz\stu01.txt中读取所有学生数据,输中读取所有学生数据,输出成绩最高的学生信息出成绩最高的学生信息

Page 27: 第 10 章 文 件

#include <stdio.h>

#define N 50struct aaa { char num[10];

int s; };

Page 28: 第 10 章 文 件

main( ){ int k=0,i=0,n=0; FILE *fp=NULL; struct aaa stu[N]={0}; fp=fopen("d:\\cwz\\stu01.txt","r"); if( fp == NULL ) { printf("Can't open file !\n"); exit(0); } while( feof(fp) == 0 ) {fscanf(fp,"%10s%4d\n", stu[n].num,&stu[n].s); printf("%10s%4d\

n",stu[n].num,stu[n].s); n++; } printf("\n");

Page 29: 第 10 章 文 件

k=0; for(i=0; i<n; i++) if( stu[k].s<stu[i].s) k=i; printf("%10s%4d\n",

stu[k].num,stu[k].s); fclose(fp);}

Page 30: 第 10 章 文 件

【【例例 1010..77 】】编写程序修改例编写程序修改例 1010..55 所所建文件建文件 d:\cwz\d:\cwz\stu01.txtstu01.txt 中最后一个学中最后一个学生的信息生的信息

Page 31: 第 10 章 文 件

#include <stdio.h> #define N 50 struct aaa { char num[10];

int s; };

Page 32: 第 10 章 文 件

main( ){ int i=0,n=0; struct aaa stu[N]={0};

FILE *fp=NULL; fp=fopen("d:\\cwz\\stu01.txt","r"); if( fp == NULL )

{ printf("Can't open file !\n"); exit(0); } while( feof(fp) == 0 ) {fscanf(fp,"%s%d\n",stu[n].num,&stu[n].s); printf("%10s%4d\n",stu[n].num,stu[n].s); n++;

} fclose(fp);

Page 33: 第 10 章 文 件

printf("Input: data: "); scanf("%s%d",stu[n-1].num,&stu[n-1].s); fp=fopen("D:\\cwz\\STU01.TXT","w"); if( fp == NULL ) { printf("Can't open file !\n"); exit(0); } for(i=0; i<n; i++)

fprintf(fp,"%10s%4d\n", stu[i].num,stu[i].s ); fclose(fp);}

Page 34: 第 10 章 文 件

读写文件方式读写文件方式:顺序读写方式

随机读写方式

Page 35: 第 10 章 文 件

课堂练习贯穿实例:【实例 13 】用文件,编写实现电子通讯

录功能的程序。

Page 36: 第 10 章 文 件

教学总结本次课的讲授内容是:1 .修改文件中内容。2 .完善贯穿实例。

Page 37: 第 10 章 文 件

作业继续完善电子通讯录管理系统功能,为

课程设计课程做准备

Page 38: 第 10 章 文 件

上机实验(第 8 次实验)完成训练 10.1完成训练 10.2

Page 39: 第 10 章 文 件

补充实验编写程序实现如下功能:( 1 )调用 myin 函数,在 D 盘根下建立

一个文件名为“ file1.dat” 的文件,从键盘输入以下几条记录存放在该文件中。

姓名 数学 英语 Lihua 92 80 Chenhao 82 78 Mali 90 86

Page 40: 第 10 章 文 件

补充实验( 2 )调用 mycal 函数,从文

件“ file1.dat” 中读取所有信息,并计算每位学生的总分,将所有这些记录(包括总分)写到文件“ file2.dat”中,同时在屏幕上输出。

( 3 )调用排序函数 mysor ,从文件“ file2.dat” 中读取所有信息,并按总分降序顺序在屏幕上显示。