实验十一 文件程序设计
【实验目的】
1.掌握文件与文件指针的概念。
2.学会使用文件打开、文件关闭、读与写文件等基本的文件操作函数。 3.运用文件操作函数进行程序设计。
【上机实习指导】
1.以文本方式建立初始数据文件,请在TC的编辑窗中输入10个学生的学号、姓名及考试成绩,形式如下:
1001 LiLi 80 1002 HuWei 90 1003 LiMing 75
┇
数据输入完后,请选用File中的菜单中项Write to 将数据存入文件file1.dat 中。记住,你建立的file1.dat是一个不等长记录的文本文件,即每个学生的数据是不等长的,数据间以空格作为分隔。
现在,你再瘵编辑窗口中的数据修改成等长记录,学号、姓名和成绩的长度分别按4、10、3给定,形式如下:
1001LiLi 80 1002HuWei 90 1003LiMing 75 ┇
然后将数据存入文件file2.dat中,该文件就是一个等长记录的文本文件,每个学生的数据占18个字符(包括换行符)。
1. 读入file1.dat中的数据,找出最高分和最低度分的学生。 # include \typedef struct student { int num;
char name[20]; int score; }STU;
void main() {
int i;
STU st,stmax,stmin; FILE *fp;
stmax.score=0; stmin.score=100; fp=fopen(\ if(!fp) return; for(i=0;i<10;i++)
{ fscanf(fp,\ if(st.score>stmax.score) stmax=st; if(st.score 41 } fclose(fp); printf(\printf(\getchar(); } 请按以下步骤实习和思考: ①分析程序,上机运行程序并分析运行结果。 ②对比实验六中的相应例子,找出差别。 ③如果事先不知道学生个数,则程序应该如何修改?请将以上程序中的循环语句for(i=0;i<10;i++)改为(while(!feof(fp))再运行程序,看结果是否正确? 3.读入file2.dat中的数据,然后按成绩从高到低度的顺序进行排序,并将排序结果分别以文本方式存入到文件file3.dat中,以二进制形式存入文件file4.dat中。 # include \typedef struct student { int num; char name[20]; int score; }STU; void sort(STU *st,int n) { STU *i,*j,t; for(i=st;i if(i->score void main() { int i,n=10; STU st[10]; FILE *fp,*fp1,*fp2; fp=fopen(\ if(!fp) return; for(i=0;i<10;i++) fscanf(fp,\ fclose(fp); sort(st,n); fp1=fopen(\ for(i=0;i fprintf(fp1,\ fclose(fp1); fp2=fopen(\ fwrite(st,sizeof(STU),n,fp2); fclose(fp2); getchar(); } 42 请分析程序,上机运行程序,运行结果在哪里?与上一例相比,此例中对读取文件的格式有何不同? 【自编程序上机】 1.某班的学生145人,每人的信息包括:学号、姓名、性别、和成绩。编制一个C程序,完成以下操作: ①定义一个结构体类型数组。 ②打开可读写的新文件student.dat。 ③使用函数fwrite()将结构体数组内容写入文件student.dat中。 ④关闭文件student.dat。 ⑤打开可读写文件student.dat。 ⑥从文件中依次读出各学生情况并按学生成绩进行排序,输出排好序后的数据。 ⑦关闭文件student.dat。 2.二进制文件“file1.dat”中存有10个实数,现将它们按从小到大的顺序排序,结果存入文件“file2.dat”中,并在屏幕上显示。 提示: ⑴题目涉及两个文件,就要定义两文件指针; ⑵两个文件的打开方式都是二进制形式,但一个是读取文件内容,一个是将内容写入文件; ⑶使用fread()函数读取“file1.txt”中的数据,使用fwrite()函数将排序后的数据存入“file2.txt”中; ⑷文件使用结束,关闭文件。 3.文件的合并:有两个磁盘文件“combine1.txt”和“combine2.txt”,各存放一行字母,现要求把这两个文件中的信息合并(按ASCII码顺序排列),输出到一个新文件“combine.txt”中去。 提示: ⑴本题将两个文件中内容写入到第三个文件中,需要定义一个数组存放读取出的两个文件中的数据; ⑵使用ASCII方式相继对两个文件进行打开和内容读取操作,使用fgetc()函数读取文件中的内容; ⑶对读取的字符进行排序,使用fputc()函数将结果存入“combine.txt”中; ⑷文件使用结束,关闭文件。 43 【实验报告】 实习时间: 实习地点: 实习机号: 具 体 实 验 内 容 44 程 序 调 试 过 程 实 习 小 结 45