C语言与软件技术基础文件操作实验报告.docx
《C语言与软件技术基础文件操作实验报告.docx》由会员分享,可在线阅读,更多相关《C语言与软件技术基础文件操作实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
C语言与软件技术基础文件操作实验报告
C语言与软件技术基础
实验报告
课程名称实验名称实验地点
指导老师实验时间提交时间
班级姓名座号
一、实验目的和要求
1、了解文件和文件指针的概念。
2、学会使用文件操作函数实现对文件打开、关闭、读、写等操作。
3、学会对数据文件进行简单的操作。
二、实验环境和方法
实验方法:
(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。
(二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。
(三)根据实验内容,编译程序。
实验环境:
WindowsxpVisualC++6.0
三、实验内容及过程描述
实验内容:
编译以下题目的程序并调试运行。
1、有5个学生,每个学生有3门课成绩、从键盘输入5个学生数据,计算出平均成绩,将原有数据和和计算出的平均分数存在磁盘文件stud中。
设5名学生的学号、
姓名和
10101
Wang
10103
Li
10106
Sum
10110
Ling
10113
Yuan
3门课成绩如下:
89,98,67.5
60,80,90
75.5,91.5,99
100,50,62.5
58,68,71
在向文件stud写入数据后,应检查验证stud文件的内容是否正确。
2、将上题stud文件中的数据按平均分进行排序处理,将已排序的学生数据存入一个新的文件stu_sort中。
在向文件stu_sort写入数据后,应检查验证stu_sort文件的内容是否正确。
3、将上题已排序的学生成绩文件进行插入处理。
插入一个学生的3门课成绩。
程序先计算插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新的文件。
要插入的数据位
10108Xin90,95,60
在想新文件stu_new写入数据后,应检查验证stu_new文件的内容是否正确。
实验步骤:
1进入VisualC++6.0集成环境。
2输入自己编好的程序。
3检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改
正。
4进行编译和连接。
如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提示
找到出错位置和原因,加以改正。
再进行编译,如此反复直到不出错为止。
5运行程序并分析运行结果是否合理。
在运行是要注意当输入不同的数据时所得结果是否正确,
应运行多次,分别检查在不同情况下结果是否正确。
以下是各题源代码:
1、有5个学生,每个学生有3门课成绩、从键盘输入5个学生数据,计算出平均成绩,将原有
数据和和计算出的平均分数存在磁盘文件stud中。
#include
#defineN5
structStudent
{
intnum;
charname[5];
floatscore[3];
floatave;
}stu[N];
voidsave()
{
FILE*fp;
inti,j;
if((fp=fopen("E:
\\stu.txt","w"))==NULL)
{
printf("打开文件失败!
\n");
return;
}
for(i=0;i{
if(fwrite(&stu[i],sizeof(structStudent),1,fp)!
=1)
printf("写入文件失败!
\n");
}
fclose(fp);
fp=fopen("E:
\\stu.txt","r");
printf("\t学号\t姓名\t第1门成绩\t第2门成绩\t第3门成绩\t平均分\n”);
printf("\t\n”);
for(i=0;i{
printf("\t%d\t%s",stu[i].num,stu[i].name);for(j=0;j<3;j++)
printf("\t%5.1f',stu[i].score[j]);
}
printf("\t%8.2f\n",stu[i].ave);
printf("\t\n");
}
}
intmain()
{
inti,j;
floatsum=0;
printf("\t\t\t*******输入学生数据*******\n");
for(i=0;i{
printf("\t请输入第%d位学生的数据:
\n",i+1);
printf("\t学号:
");
scanf("%d",&stu[i].num);
printf("\t姓名:
");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("\t第%d门课成绩:
",j+1);
scanf("%f",&stu[i].score[j]);
sum+=stu[i].score[j];
}
stu[i].ave=sum/3.0;
printf("\t\n”);
}
save();
stu_sort中。
}
2、将上题stud文件中的数据按平均分进行排序处理,将已排序的学生数据存入一个新的文件
#include
#include
#defineN5
structStudent
{
intnum;
charname[5];
floatscore[3];
floatave;
}stu[N],temp;
intmain()
{
FILE*fp;
inti,j,k;
if((fp=fopen("E:
\\stu.txt","r"))==NULL)
{
printf("打开文件失败!
\n");
exit(0);
}
printf("原数据为:
\n");
printf("\t学号\t姓名\t第1门成绩\t第2门成绩\t第3门成绩\t平均分\n");
for(i=0;i{
fread(&stu[i],sizeof(structStudent),1,fp);
printf("\t%d\t%s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
{
printf("\t%5.1f",stu[i].score[j]);
}
printf("\t%8.2f\n",stu[i].ave);
printf("\t\n");
}
fclose(fp);
printf("\n");
for(i=0;i{
k=i;
for(j=i+1;jif(stu[j].ave>stu[k].ave)k=j;
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
if((fp=fopen("E:
\\stu_sort.txt","w"))==NULL)
{
printf("打开文件失败!
\n");
exit(0);
}
for(i=0;iif(fwrite(&stu[i],sizeof(structStudent),1,fp)!
=1)printf("写入文件失败!
\n");fclose(fp);
fp=fopen("E:
\\stu_sort.txt","r");
printf("排序结果为:
\n");
printf("\t学号\t姓名\t第1门成绩\t第2门成绩\t第3门成绩\t平均分\n");
printf("\t\n");
for(i=0;i{
printf("\t%d\t%s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
{
printf("\t%5.1f",stu[i].score[j]);
}
printf("\t%8.2f\n",stu[i].ave);
printf("\t\n");
}
}
3、将上题已排序的学生成绩文件进行插入处理。
插入一个学生的3门课成绩。
程序先计算插入学生的平
均成绩,然后将它按成绩高低顺序插入,插入后建立一个新的文件。
#include
#include
#defineN6
structStudent
{
intnum;
charname[5];
floatscore[3];
floatave;
}stu[N],s,temp;
intmain()
{
FILE*fp;
inti,j,k;
floatsum=0;
if((fp=fopen("E:
\\stu_sort.txt","r"))==NULL)
{
printf("打开文件失败!
\n");
exit(0);
}
printf("原数据为:
\n");
printf("\t学号\t姓名\t第1门成绩\t第2门成绩\t第3门成绩\t平均分\n");
for(i=0;i{
fread(&stu[i],sizeof(structStudent),1,fp);
printf("\t%d\t%s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
{
printf("\t%5.1f",stu[i].score[j]);
}
printf("\t%8.2f\n",stu[i].ave);
printf("\t\n");
}fclose(fp);
printf("请输入要插入的学生数据:
\n");printf("\t学号:
");
scanf("%d",&s.num);
printf("\t姓名:
");scanf("%s",&s.name);
for(j=0;j<3;j++){
printf("\t第%d门课成绩:
",j+1);
scanf("%f",&s.score[j]);
sum+=s.score[j];
}s.ave=sum/3.0;printf("\t\n");
for(i=0;iif(s.avek=i;
}for(i=N-1;i>=k;i--)
stu[i+1]=stu[i];stu[k+1]=s;if((fp=fopen("E:
\\stu_new.txt","w"))==NULL){
printf("打开文件失败!
\n");
exit(0);
}for(i=0;iif(fwrite(&stu[i],sizeof(structStudent),1,fp)!
=1)printf("写入文件失败!
\n");
fclose(fp);fp=fopen("E:
\\stu_new.txt","r");printf("新的结果为:
\n");
printf("\t学号\t姓名\t第1门成绩\t第2门成绩\t第3门成绩\t平均分\n”);printf("\t\n");
for(i=0;i{
printf("\t%d\t%s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
{
printf("\t%5.1f',stu[i].score[j]);
}
printf("\t%8.2f\n",stu[i].ave);
printf("\t\n");
}
}
四、实验结果:
1、有5个学生,每个学生有3门课成绩、从键盘输入5个学生数据,计算出平均成绩,将原有数据和和
计算出的平均分数存在磁盘文件stud中。
2、将上题stud文件中的数据按平均分进行排序处理,将已排序的学生数据存入一个新的文件stusort中。
潮彎号
Mang
8
1鹼
9卫
冷0
第门醱
67.5
第丫
84.83
W
10191
10103
Li
&0.0
80.0
90.0
76.&7
10106
Sun
75.5
91.5
99.0
88.&7
10110
Ling
100*0
50.0
62.5
?
0.83
10113
Kang
58.0
68.0
71.0
65.67
1㈱
物:
学号
姓名
篦「
第2门鹼
lar
戟分
10106
Sun
75.5
91.5
99.0
18.67
10101
Mang
89.0
9S.0
67.5
84.83
10103
Li
60.0
80.0
瓶0
?
6・6?
10110
Ling
100.0
50.0
62.5
70.83
10113
Yang
58.0
68.0
71.0
(5.67
3门课成绩。
程序先计算插入学生的平
10106Sun75.59仁599.088.6?
10101Uang89』9L067.584.83
101EI8Kin90.095.060.081.6?
101B3Li60.080.090.076.6?
10110Ling100.050.062・570,83
10113Vang58.068』?
1.065.67
Pressany血ytocontinue^