数据结构课程实训指导书(4)

2018-12-19 23:42

附录1

东莞理工学院城市学院

《数据结构》课程设计报告

题 目: 班 级: 2012级软件工程 班 小组成员: 指导教师: 彭义春 老师 时 间: 2013.12. —2013.12. 地 点:

东莞理工学院城市学院计算机与信息科学系制

2013年 12 月

附录2:关于文件操作

C语言的文件操作主要有三个步骤: (一) 打开文件

打开文件使用函数fopen(“文件名”,”方式”);

其中,”文件名”可以是字符串变量表示,它告诉系统要打开的文件的文件名,一般应为文件全名。

“方式”为打开该文件欲进行什么操作,如“读”/r,或者“写”/w等。 该函数执行后返回所打开文件缓冲区指针。所以,一般需要: 先定义一个文件类型的指针,如:FILE *fp; 然后,fp=fopen(“D:\\mydata.dat”,”w”); 若打开不成功,则指针值为NULL。 (二) 文件读写

读/写文件主要有如下几组函数:

(1) fprintf(fp,”格式描述串”,<输出列表>);----写数据到文件 fscanf(fp,”格式描述串”,<变量列表>);----从文件读数据 (2) fwrite(”数据缓冲区地址”,”记录字节数”,”记录数”,fp);----写记录数据到文件(二进

制)

fread(”数据缓冲区地址”,”记录字节数”,”记录数”,fp);----从二进制文件中读数据 (3) fputc();和fgetc(); 读/写数据为字符类型。 当把文件中的数据读到内存后,可以对其中的数据进行所需要的操作(如通过赋值语句等对先观数据进行修改等)。这阶段看作是对文件数据进行实质性操作的阶段。 (三) 关闭文件

关闭文件用函数:close(fp);

其中,fp为你所要关闭的文件指针,当一个程序中对多个文件进行操作时,特别注意不要关闭不希望关闭的文件。

此外,数据存储到文件中时,数据的存储格式也有不同,即通常所说的“文本文件”和“二进制文件”。

下面给出一些示例: 例一. 将0-14这15个整数存入文件stud2.dat #include #define max 15

/*以文本方式存储15个整数*/ void save_dat() {FILE *fp; int i;

if((fp=fopen(\ { printf(\ return; }

for(i=0;i

printf(\ fclose(fp); }

main() {

save_dat(); }

当用记事本打开数据文件stud2.dat,可以看到0-14这15个数以字符(文本)格式存储在文件中,并且,这15个数据是紧挨着存储的--当再用fscanf(“%d”,&i)从该文件中读取这

些数据时、将不能正确读取、故需要注意数据存储格式。--可以修改fprintf()为: for(i=0;i

这样,每个整数占6位宽度,存储时各数据之间就留有空格,再用fscanf(“%d”,&i)读取时,每个空格将成为数据的分界符;但是,如果将fscanf(“%d”,&i)修改为 fscanf(“%d,”,&i)/*多一个逗号*/

那么,在读取数据时,将按格式描述串中约定的逗号作各个数据之间的分隔符,此时,需要将存储文件是的fprintf()对应地修改为: for(i=0;i

用该语句存储数据的结果(从记事本打开看),可以看到每个数据之间也存储了逗号(最后一个数据之后也有逗号)。

当然,这15个整数也可以以二进制格式存储到文件中,如下程序即是: #include #define max 15

/*用二进制方式存储0-14*/ void save_dat() {FILE *fp; int i;

if((fp=fopen(\ { printf(\ return; }

for(i=0;i

fwrite(&i,sizeof(int),1,fp); printf(\ fclose(fp); }

main() {

save_dat(); }

运行该程序并用记事本打开文件stud3.dat,所看到的数据就不再是ASCII码格式,而是以整数的内码(二进制补码)存储的了。因此,也只能采用对应的语句(fread)读取数据。 例二. 存储记录(结构体)数据

以下程序是定义了学生信息结构体,然后输入4个学生信息、存入文件d:\\stud1.dat #include #define size 4

/*建立学生信息-结构体-数据文件*/ struct stud_type { char name[10]; int num,age; char addr[15]; }stud[size]; void save_dat() {FILE *fp; int i;

if((fp=fopen(\ { printf(\ return; }

for(i=0;i

if(fwrite(&stud[i],sizeof(struct stud_type),1,fp)!=1) printf(\ fclose(fp);

}

main() {int i;

printf(\for(i=0;i

scanf(\save_dat(); }

用记事本打开数据文件stud1.dat,看到学生信息中的姓名、地址这两个字符串数据是按SACII码存储的,但学号和年龄(数值)却是按内码存储的。对应的读取该数据文件中数据的程序如下:

#include #define size 4

/*从记录数据文件中读取学生信息数据*/ struct stud_type { char name[10]; int num,age; char addr[15]; }stud[size]; main() {int i;

FILE *fp;

fp=fopen(\

if(fp==NULL) {printf(\ for(i=0;i

{ fread(&stud[i],sizeof(struct stud_type),1,fp);

printf(\ }

fclose(fp); }

可以验证,存入的数据被正确地读取、显示。当然,也可以将结构体(记录)采用文本格式存储到文件中,看入下程序: #include #define size 4

/*建立学生信息-结构体-数据文件,用文本格式存储*/ struct stud_type { char name[10]; int num,age; char addr[15]; }stud[size]; void save_dat() {FILE *fp; int i;

if((fp=fopen(\ { printf(\ return; }

for(i=0;i

fprintf(fp,\ fclose(fp); }

main() {int i;

printf(\for(i=0;i

scanf(\

save_dat(); }

用记事本打开文件stud3.dat,可以看到,记录(结构体)中的数值数据也以SACII码存储的(注意比较数据文件stud1.dat和stud3.dat 在记事本中的显示区别)。 更多的知识和示例,可以参考《C程序设计》教材。


数据结构课程实训指导书(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:图形的平移和旋转(经典教案和习题)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: