Upload
zasha
View
179
Download
0
Embed Size (px)
DESCRIPTION
第 10 章 文 件. 10.1 文件的概述 10.2 文件的基本操作. 例题链接. 10.1 文件的概述. 文件的概念 文件 —— 存储在外部介质(如磁盘)上的数据的集合 操作系统是以文件为单位对数据进行管理的 . 按介质划分:磁盘文件、磁带文件 按文件内容划分:源程序文件、数据文件 按组织形式划分:文本文件和二进制文件 输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流 (stream) ,即输入输出流。 - PowerPoint PPT Presentation
Citation preview
第 10 章 文 件
10.1 10.1 文件的概述文件的概述
10.2 文件的基本操作
例题链接
10.1 文件的概述 文件的概念
文件 —— 存储在外部介质(如磁盘)上的数据的集合 操作系统是以文件为单位对数据进行管理的 .
按介质划分:磁盘文件、磁带文件按文件内容划分:源程序文件、数据文件按组织形式划分:文本文件和二进制文件
输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream) ,即输入输出流。
C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。一个输入输出流就是一个字节流或二进制流。
P290P290
返回
文本文件和二进制文件 文本文件和二进制文件
00000001 10110000
00000100 00000011 00000010
432 占 2 个字节(TC)
4 3 2
按二进制文件存储
按文本文件存储
不能用记事本显示
能用记事本显示
但速度快
但速度慢
占 3 个字节
1.234 占 4 个字节
1
2
按二进制文件存储
按文本文件存储
. 3
4 占 5 个字节
文本文件和二进制文件 文本文件和二进制文件
特点:文件中存放的都是数据,这些数据可以长期保留,可以随时存取
数据文件 数据文件
10.2 文件的基本操作““写”文件写”文件:
将数据从内存输出到磁 盘文件““ 读”文件读”文件:
从已建立的数据文件中将所要的数据输入到内存
P291P291
返回
【【例例 1010..11 】】 向文件输出数据的示例向文件输出数据的示例 将“将“ LetLet’’s study the C s study the C
language.language.”” 输出到一个文本文件输出到一个文本文件
向文件输出字符串的操作与用 printf 进行“输出”十分相似
对文件进行操作时,需要先打开文件,操作完毕还要关闭文件
编程点拨
#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 所指的文件中
关闭文件 屏幕上无任何显示
【【例例 1010..22 】】从文件读取数据的示例从文件读取数据的示例 将例将例 1010..11 所建文件“所建文件“ a.txta.txt”” 中的内容中的内容 读取出来,并输出到屏幕上读取出来,并输出到屏幕上
从文件读取数据的操作与用 scanf 进行“输入”十分相似
也需要先打开文件,操作完毕后关闭文件
编程点拨
#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.
文件操作的说明:文件操作的说明:
定义文件指针定义文件指针
FILE * 文件指针名 ;
文件指针是一个名为 FILE (必须大写)的结构体类型的指针
需要加 #include <stdio.h>
打开文件打开文件 fopen (文件名,打开方式)
字符串 fp = fopen("a.txt","r");
if ( fp == NULL )
{ printf("Can’t open this file"); exit(0); }
单击可查看
单击此处查看
文件操作的说明:文件操作的说明:
标准输入输出函数标准输入输出函数 文件的读写操作是通过调用标
准输入输出函数完成
关闭文件关闭文件
fclose (文件指针)
【【例例 1010..33 】】输入若干学生的成绩输入若干学生的成绩 (( 整整型型 ) , ) , 用用 -1-1 结束,调用结束,调用fprintffprintf 函数,按格式将学生函数,按格式将学生的成绩写入的成绩写入 d:\cwz\b.txtd:\cwz\b.txt中中
#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);}
60 70 90 100 80 60 –1 屏幕上无任何信息,但在 d 盘 cwz 目录
下可以找到 b.txt 文件,且文件中的内容是: 60 70 90 100 80 60
如果在 d 盘下没有 cwz 目录,则文件打开失败,这时屏幕上显示信息:“ Can't open file !” ,然后结束程序的执行
【【例例 1010..44 】】调用调用 fscanffscanf 函数,按格函数,按格式读取例式读取例 1010..33 所建文件所建文件d:\cwz\b.txtd:\cwz\b.txt 中的学生成中的学生成绩,并在终端屏幕上输出绩,并在终端屏幕上输出最高成绩最高成绩
#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
课堂练习键盘输入若干个身份证号码(以“ # ”
结束输入)存放在文件“ ID_card.txt” 中。
假设文件“ ID_card.txt” 中已存放若干身份证号码,输入当前日期,给那天生日的人显示贺词。
教学总结本次课的讲授内容是:1 .文件、文件指针的概念。2 .文件的打开、关闭、读写函数。3 . exit 函数。
作业P312 训练 10.1 、训练 10.2
预习例 10.5 ~ 例 10.7
(第(第 2222 次课)次课)【【例例 1010..55 】】假设学生基本情况包括学假设学生基本情况包括学
号和一门课成绩,从键盘输号和一门课成绩,从键盘输入若干学生的学号和成绩,入若干学生的学号和成绩,写入文件写入文件 d:\cwz\d:\cwz\stu01.txtstu01.txt 中,用中,用 -1-1 结束结束成绩输入成绩输入
#include <stdio.h> struct aaa { char num[10];
int s; };
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); }
1001 671002 791003 991004 1001005 871 –1
stu01.txt 的 内容:
1001 67 1002 79 1003 99 1004 100 1005 87
【【例例 1010..66 】】编写程序从例编写程序从例 1010..55 所建所建文件文件 d:\cwz\stu01.txtd:\cwz\stu01.txt中读取所有学生数据,输中读取所有学生数据,输出成绩最高的学生信息出成绩最高的学生信息
#include <stdio.h>
#define N 50struct aaa { char num[10];
int s; };
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");
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);}
【【例例 1010..77 】】编写程序修改例编写程序修改例 1010..55 所所建文件建文件 d:\cwz\d:\cwz\stu01.txtstu01.txt 中最后一个学中最后一个学生的信息生的信息
#include <stdio.h> #define N 50 struct aaa { char num[10];
int s; };
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);
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);}
读写文件方式读写文件方式:顺序读写方式
随机读写方式
课堂练习贯穿实例:【实例 13 】用文件,编写实现电子通讯
录功能的程序。
教学总结本次课的讲授内容是:1 .修改文件中内容。2 .完善贯穿实例。
作业继续完善电子通讯录管理系统功能,为
课程设计课程做准备
上机实验(第 8 次实验)完成训练 10.1完成训练 10.2
补充实验编写程序实现如下功能:( 1 )调用 myin 函数,在 D 盘根下建立
一个文件名为“ file1.dat” 的文件,从键盘输入以下几条记录存放在该文件中。
姓名 数学 英语 Lihua 92 80 Chenhao 82 78 Mali 90 86
补充实验( 2 )调用 mycal 函数,从文
件“ file1.dat” 中读取所有信息,并计算每位学生的总分,将所有这些记录(包括总分)写到文件“ file2.dat”中,同时在屏幕上输出。
( 3 )调用排序函数 mysor ,从文件“ file2.dat” 中读取所有信息,并按总分降序顺序在屏幕上显示。