《C语言程序设计》课件第8章_第1页
《C语言程序设计》课件第8章_第2页
《C语言程序设计》课件第8章_第3页
《C语言程序设计》课件第8章_第4页
《C语言程序设计》课件第8章_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

8.1文件概述

8.2对文件的操作8.3随机文件的访问小结习题实训

8.1.1文件的概念

文件这个概念对于我们并不陌生,在前面介绍过源程序文件、目标文件和可执行文件,也使用过头文件。

8.1.2文件的分类

文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。8.1文件概述

1. ASCII文件

ASCII文件又称为文本(text)文件,其特点是数据在外部存储介质中,一个字节存放一个ASCII码字符。

2.二进制文件

二进制文件把内存中的数据按其在内存中的存储形式原样输出到外部介质上并存放。

3.普通文件

普通文件是指驻留在磁盘或其他外部介质上的一个有序数据集,可以是源文件、目标文件、可执行程序,也可以是一组待输入处理的原始数据或一组输出的结果。

4.设备文件

设备文件是指与主机相连的各种外部设备,如显示器、打印机、键盘等。8.1.3文件的使用

1.文件指针

C语言中使用一个名为FILE的结构体来保存对文件操作时用的一些参数,该定义包含在stdio.h中。

2.打开文件

对文件进行操作前,必须先打开文件。

3.关闭文件

当不需要对文件进行操作时,就必须将文件关闭。

4.文件的操作顺序

对磁盘文件操作的一般顺序是:定义文件指针→打开文件→处理→关闭文件。

【例8-1】在调试对10名歌手比赛进行评分的程序时,要不断地用原始数据进行重复操作。如果将歌手的成绩编辑到一个文本文件中,需要时将它打开,将会减少许多麻烦。

假设要使用的一组数据存储在文件“f:\data.txt”中,编写程序,从文件data.txt中读取10个歌手的比赛成绩,并在屏幕上显示。图8-1例8-1程序的运行结果8.2.1字符处理函数fgetc和fputc的用法

1. fgetc函数

fgetc函数的功能是从指定文件中读取一个字符。8.2对文件的操作

2. fputc函数

fputc函数的功能是把一个字符写到磁盘文件中。

【例8-2】编写一个程序,用于把一个文本文件复制到另一个文本文件中,源文件和目标文件由命令行输入。

在DOS环境下运行该程序,测试过程如图8-2所示。图8-2例8-2程序的运行过程8.2.2字符串处理函数fgets和fputs的用法

1. fgets函数

fgets函数的功能是从指定的文件中读一个字符串到字符数组中。

2. fputs函数

fputs函数的功能是把一个字符串写入指定的文件中。8.2.3文本文件的处理函数fprintf和fscanf的用法

1. fscanf函数

fscanf函数只能从文本文件中按格式输入,其功能与scanf函数类似,只是输入的对象是磁盘上的文本文件。

2. fprintf函数

fprintf函数按格式将内存中的数据转换成对应的字符,并以ASCII码形式输出到文本文件中,其功能与printf函数类似。8.2.4二进制文件处理函数fread和fwrite的用法

1. fread函数

fread函数是从指定的磁盘文件中读取一个二进制文件。

2. fwrite函数

fwrite函数可将一个数据块写到指定的磁盘文件。8.2.5程序案例

【例8-3】应用fprintf函数和fscanf函数建立(写)和输出(读)一个学生信息的文本文件。

程序的运行结果如图8-3所示。图8-3例8-3程序的运行结果

【例8-4】应用fwrite函数和fread函数改写例8-3。

程序的运行结果如图8-4所示。图8-4例8-4程序的运行结果8.3.1文件定位

前面介绍的对文件的读写方式都是顺序读写,即读写文件时只能从头开始,顺序读写各个数据。8.3随机文件的访问

1. fseek函数

fseek函数用来移动文件内部的位置指针。

2. rewind函数

rewind函数的作用是把文件内部的位置指针移到文件首。8.3.2程序案例

【例8-5】写入5个学生记录,记录内容为学生姓名、学号、两科成绩。写入成功后,随机读取第四条记录,并用第二条记录替换。

程序的运行结果如图8-5所示。图8-5例8-5程序的运行结果本章重点讲述了C程序的文件处理,包括文件指针的概念和定义,文件处理的流程,文件的打开和关闭,文件的字符、字符串、格式化、数据块输入和输出函数,文件指针移动和定位等。

(1)在定义文件指针时要注意FILE必须用大写字母,否则编译时将出错。

(2)掌握文本文件和二进制文件的处理方法和应用。【小结】一、填空题

1. C语言支持的文件存取方式有两种,分别是

2. C语言定义文件指针变量用的是名为

的结构体。

3.文件在读写之前必须打开,打开使用的函数是

4. rewind(fp)的功能是

。【习题】

5.阅读以下程序,程序运行的结果是

#include<stdio.h>

#include<stdlib.h>

main()

{

FILE*fp;

chara[8][6]={"one","two","three","four","five","six","seven","eight"};inti;

if((fp=fopen(“bbb”,“w+”))==NULL)

{

printf(“Cannotopenfile.\n”);

exit(0);

}

for(i=0;i<8;i++)

{

fputs(a[i],fp);

fputs(“\n”,fp);

}

rewind(fp);

for(i=0;i<8;i++)

{

fgets(a[i],7,fp);

if(i%2==0)

printf(“%s\n”,a[i]);

}

fclose(fp);

}二、选择题

1.设fp是指向某个文件的指针,且已经读到文件尾,则函数feof(fp)的返回值为()。

A.

EOF B.非0值

C.

0 D.

NULL

2.以下与函数fseek(fp,0,SEEK_SET);有相同作用的是()。

A. feof(fp); B. ftell(fp);

C. fgetc(fp);

D.

rewind(fp);

3.若执行fopen函数时发生错误,则函数的返回值是()。

A.地址值 B. 1

C. NULL D. EOF

4.有以下程序,运行后的输出结果是()。#include<stdio.h>

voidmain()

{

FILE*fp;

inti,k,n;

fp=fopen("data.dat","w+");

for(i=1;i<6;i++)

{ fprintf(fp,"%d",i);

if(i%3==0)

fprintf(fp,"\n");

}

rewind(fp);

fscanf(fp,"%d%d",&k,&n);

printf("%d%d",k,n);

fclose(fp);

}

A. 00 B. 12345

C. 14 D. 12

5.执行以下程序后,若文件能正常打开,则test.txt文件的内容是()。

#include<stdio.h>

#include<stdlib.h>

voidmain()

{ FILE*fp;

char*s1=“C++”,*s2=“c#”;

if((fp=fopen(“test.txt”,“wb”))==NULL)

{

printf("Cannotopentest.txtfile.\n");

exit(0);

} fwrite(s1,3,1,fp);

fseek(fp,0,SEEK_SET);

fwrite(s2,2,1,fp);

fclose(fp);

}

A. C#+ B. C#X++

C. C# D. C++C#6.有如下程序:

#include

main()

{

FILE*fp1;

 fp1=fopen("f1.txt","w");

 fprintf(fp1,"abc");

 fclose(fp1);

}若文本文件f1.txt中原有内容为good,则运行以上程序后文件f1.txt中的内容为()。

A. goodabc B. abcd

C. abc D. abcgood三、编程题

1.编写程序,接收从键盘输入的一条学生信息,并将它写入一个文件C:\data.txt,再把该文件内容读出显示在屏幕上。当输入回车字符时,结束输入。比如运行时输入学生信息为“黄蓉女陕西西安西安航空职业技术学院10级软件专业10303101”。

2.编写程序,在题1所建立的文件data.txt中追加内容“三好学生”。

3. 在磁盘文件上存有10个学生的数据。要求将第1、3、5、7、9个学生的数据输入计算机,并在屏幕上显示出来。一、实训的目的与要求

1.掌握文件和文件指针的概念;

2.掌握文件操作的基本流程;

3.掌握针对C语言两种文件操作的常用函数。【实训】二、实训内容

1.设有一文件student.dat中存放着学生的基本情况,这些情况由以下结构体来描述:

structstudent

{

longintnum; //学号

charname[10];

//姓名

intage; //年龄

charspeciality[20]; //专业

charaddr[40]; //住址

}

(2)定义结构数组studentstu[100];,如果是顺序存放的,用while循环输出,循环条件为stu.num>=970101&&stu.num<=970135;如果不是按学号顺序存放的,用for+continue结构。

(3)读出的数据是随机的,要用fseek定位,数据总长度为sizeof(studentstu);,每条记录长度为8+10+4+20+40=82,用循环提取数据,每次加82。

2.对于SSMI

温馨提示

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

评论

0/150

提交评论