C程序设计实验文件实验报告.docx

上传人:b****3 文档编号:4268379 上传时间:2023-05-06 格式:DOCX 页数:11 大小:99.34KB
下载 相关 举报
C程序设计实验文件实验报告.docx_第1页
第1页 / 共11页
C程序设计实验文件实验报告.docx_第2页
第2页 / 共11页
C程序设计实验文件实验报告.docx_第3页
第3页 / 共11页
C程序设计实验文件实验报告.docx_第4页
第4页 / 共11页
C程序设计实验文件实验报告.docx_第5页
第5页 / 共11页
C程序设计实验文件实验报告.docx_第6页
第6页 / 共11页
C程序设计实验文件实验报告.docx_第7页
第7页 / 共11页
C程序设计实验文件实验报告.docx_第8页
第8页 / 共11页
C程序设计实验文件实验报告.docx_第9页
第9页 / 共11页
C程序设计实验文件实验报告.docx_第10页
第10页 / 共11页
C程序设计实验文件实验报告.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C程序设计实验文件实验报告.docx

《C程序设计实验文件实验报告.docx》由会员分享,可在线阅读,更多相关《C程序设计实验文件实验报告.docx(11页珍藏版)》请在冰点文库上搜索。

C程序设计实验文件实验报告.docx

C程序设计实验文件实验报告

 

贵州大学

 

《C程序设计实验》

实验报告

实验名称:

文件

专业

电子信息科学与技术

班级

姓名

学号

教师

贵州大学理学院

2010年

一、实验目的:

(1)、掌握文件以及缓冲文件系统、文件指针的概念;

(2)、学会使用文件打开、关闭、读、写等文件操作函数;

(3)、学会用缓冲文件系统对文件进行简单的操作。

二、实验环境:

Windows7、MicrosoftVisualStudio2010

三、实验内容:

编写程序并上机调试运行。

(1)有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、3门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。

设5名学生的学号、姓名和3门课成绩如下:

99101Wang89,98,67.5

99103Li60,80,90

99106Fun75.5,91.5,99

99110Ling100,50,62.5

99113Yuan58,68,71

在向文件stud写入数据后,应检查验证stud文件中的内容是否正确。

程序如下:

#include

#defineSIZE5

structstudent

{

charname[10];

longintnum;

floatscore[3];

floatave;

}stud[SIZE];

voidmain()

{

voidsave(void);

inti;

floatsum[SIZE];

FILE*fp1;

printf("Pleaseinputfivestudents'names,numbersandthreescoreslikethis:

\nnamenumscore1score2score3\n\n");

for(i=0;i

{

scanf("%s%ld%f%f%f",stud[i].name,&stud[i].num,&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);

sum[i]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];

stud[i].ave=sum[i]/3;

}

save();

fp1=fopen("stud.dat","rb");

printf("\nnameNo.score1score2score3ave\n");

printf("------------------------------------------------------\n");

for(i=0;i

{

fread(&stud[i],sizeof(structstudent),1,fp1);

printf("%-10s%5ld%8.1f%9.1f%9.1f%8.2f\n",stud[i].name,stud[i].num,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

fclose(fp1);

getch();

}

voidsave(void)

{

FILE*fp;

inti;

if((fp=fopen("stud.dat","wb"))==NULL)

{

printf("Thefilecannotopen!

\n");

return;

}

for(i=0;i

if(fwrite(&stud[i],sizeof(structstudent),1,fp)!

=1)

{

printf("filewriteerror!

\n");

return;

}

fclose(fp);

}

运行结果如下所示:

(2)将上题stud文件中的学生数据按平均分进行排序处理,将已排序的学生数据存在一个新文件stu_sort中。

在向文件stud_sort写入数据后,应检查验证stu_sort文件中的内容是否正确。

程序如下:

#include

#include

#defineSIZE5

structstudent

{

charname[10];

longintnum;

floatscore[3];

floatave;

}stud[SIZE],work;

voidmain()

{

voidsort(void);

inti;

FILE*fp1,*fp2;

fp2=fopen("stu_sort.dat","rb");

printf("\nunsortedstudent'sscoreslistisasfollows\n");

printf("------------------------------------------------------\n");

printf("nameNo.score1score2score3ave\n");

printf("------------------------------------------------------\n");

for(i=0;i

{

fread(&stud[i],sizeof(structstudent),1,fp2);

printf("%-10s%5ld%8.1f%9.1f%9.1f%8.2f\n",stud[i].name,stud[i].num,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

fclose(fp2);

getch();

}

voidsort(void)

{

FILE*fp1,*fp2;

inti,j;

if((fp1=fopen("stud.dat","rb"))==NULL)

{

printf("Thefilecannotopen!

\n\n");

exit(0);

}

if((fp2=fopen("stu_sort.dat","wb"))==NULL)

{

printf("Thefilewriteerror!

\n");

exit(0);

}

for(i=0;i

if(fread(&stud[i],sizeof(structstudent),1,fp1)!

=1)

{

printf("filereaderror!

\n");

exit(0);

}

for(i=0;i

{

for(j=i+i;j

if(stud[i].ave

{

work=stud[i];

stud[i]=stud[j];

stud[j]=work;

}

fwrite(&stud[i],sizeof(structstudent),1,fp2);

}

fclose(fp1);

fclose(fp2);

}

运行结果如下所示:

(3)将上题中已排序的学生成绩文件进行插入处理。

插入一个学生的3门课成绩。

程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个文件。

要插入的学生数据为:

99108Xin90,95,60

在向新文件stu_new写入数据后,应检查验证sru_new文件中的内容是否正确。

程序如下:

#include

#include

structstudent

{

charname[10];

longintnum;

floatscore[3];

floatave;

}stud[10],s;

voidmain()

{

printf("\nPleaseinputyourwanttoadddata:

\n");

scanf("%s%ld%f%f%f",s.name,&s.num,&s.score[0],&s.score[1],&s.score[2]);

s.ave=(s.score[0]+s.score[1]+s.score[2])/3;

n=i;

printf("\nafteraddsortedstudent'sscoreslistisasfollows\n");

printf("------------------------------------------------------\n");

printf("nameNo.score1score2score3ave\n");

printf("------------------------------------------------------\n");

fp2=fopen("stu_new","rb");

for(t=0;stud[t].ave>s.ave&&t

for(i=0;i

{

fwrite(&stud[i],sizeof(structstudent),1,fp2);

printf("%-10s%5ld%8.1f%9.1f%9.1f%8.2f\n",stud[i].name,stud[i].num,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

fwrite(&s,sizeof(structstudent),1,fp2);

printf("%-10s%5ld%8.1f%9.1f%9.1f%8.2f\n",s.name,s.num,s.score[0],s.score[1],s.score[2],s.ave);

for(i=t;i

{

fwrite(&stud[i],sizeof(structstudent),1,fp2);

printf("%-10s%5ld%8.1f%9.1f%9.1f%8.2f\n",stud[i].name,stud[i].num,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);

}

printf("\n");

fclose(fp1);

fclose(fp2);

getch();

}

运行结果如下所示:

四、实验总结。

文件是程序设计中十分重要的概念。

所谓“文件”,是指存储在外部存储介质上的一

组具有名字的数据的集合。

一批数据是以文件的形式存放在外部存储介质(如磁盘)上的,

操作系统以文件为单位对数据进行管理,即如果要找到外部存储介质上的数据,必须先按

文件名找到所指定的文件,然后再从该文件中读取数据;如果要向外部存储介质上存储数

据也必须先建立一个文件,然后才能向它输入数据。

C语言把文件看成是一个字符(字节)的序列,即文件由一个个字符(字节)的数据

顺序组成,根据数据的组织形式,可分为ASCII文件和二进制文件。

ASCII文件又称文本(text)文件,它的每个字节存放一个ASCII代码,代表一个字符。

二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。

这类文件

可以节省外存空间。

如有一个文件元素为整数127,则二进制代码表示为01010101,只需

占用一个字节,而用ASCII码形式存放127,由于ASCII码与字符一一对应,一个字节代

表一个字符,因此需三个字节存放127所对应的三个内部码49(1的ASCII码)、50(2的

ASCII码)、55(7的ASCII码),显然,ASCII文件便于对字符进行输出或逐个处理,节

省二进制与ASCII之间的转换时间,但它要占用较多的存储空间。

在C语言中一个C文件可看成是一连串的字符(字节)流,对文件的存取是以字符(字

节)为单位的,输入输出的数据流的开始和结束仅受程序控制而不受物理符号(回车换行

符)控制,一般把这种文件称为流式文件。

C语言允许对文件存取一个字符,这就增加了

处理的灵活性。

C语言没有提供对文件进行操作的语句,所有的文件操作都是利用C编译系统所提供

的库函数来实现。

多数C编译系统都提供两种文件处理方式,即“缓冲文件系统”和“非

缓冲文件系统”。

缓冲文件系统,是指系统自动地在内存区为每一个正在使用的文件名开辟一个缓冲

区。

从内存向磁盘输出数据,必须先送到内存缓冲区,装满缓冲区后再送到磁盘。

如果从

磁盘向内存读入数据,则一次从磁盘文件中将一批数据输入到内存缓冲区,然后再从缓冲

区逐个地将数据送到程序数据区,如图12.1所示。

缓冲区的大小由各个具体的C语言版本

确定,一般为512个字节。

非缓冲文件系统,是指系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定

缓冲区。

用缓冲文件系统进行的输入输出又称为高级(或高层)磁盘输入输出,用非缓冲文件

系统进行的输入输出又称为低级(或低层)输入输出,非缓冲文件系统所提供的函数依赖

所使用的操作系统,通用性较差。

本章重点介绍缓冲文件系统的文件操作函数。

无论是使用缓冲文件系统还是非缓冲文件系统,在对文件进行操作时,一般包括以下

几个步骤:

①打开文件;

②文件处理,包括文件读写操作等;

③关闭文件。

每个文件在读写之前都必须先打开,只有在打开文件之后,才能进行文件的读写操作,

当一个文件操作完之后,都必须关闭该文件。

每一个文件被打开或创建之后,都有一个唯一确定该文件的文件标识,以后对该文件

的处理都是通过该文件标识进行的。

2010年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2