C语言实验内容.doc_第1页
C语言实验内容.doc_第2页
C语言实验内容.doc_第3页
C语言实验内容.doc_第4页
C语言实验内容.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

第十章文件10.1目的和要求1、掌握文件的基本概念,如:文件的输入/输出的基本概念、文件的两种组织形式、文件操作的一般步骤等等。2、学习文件操作的基本算法,如:读/写、追加等。3、了解文件的读写方式,如:顺序读写文件、随机读写文件。4、了解如何将不同的数据(如:数组数据、结构体数据)存入或读出文件的方法。10.2 相关知识1、文件概述 文件的组织形式C把文件看作是字符(字节)的序列,即由一个一个字符数据顺序组成的。根据数据的组织形式,可分为ASCII文件和二进制文件。 ASCII文件又称文本文件。它的每一个字节放一个ASCII代码(代表一个字符)。因而便于对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且化费转换时间。 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。但一个字节并不对应一个字符。不能直接输出字符形式。 文件的处理方法 缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向内存读入数据,则从磁盘文件中将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。用缓冲文件系统进行的输入输出又称为高级(高层)磁盘输入输出。 非缓冲文件系统:系统不自动开辟缓冲区,系统直接对磁盘写或读数据。用非缓冲文件系统进行的输入输出又称为低级(低层)磁盘输入输出系统。 文件的存取方式C语言对文件的操作都是通过文件处理函数实现的。用文件处理函数存取文件的方式有两种,一种是顺序存取(顺序文件),另一种是随机存取(随机文件)。 设备文件由于计算机中的输入/输出设备的作用也是输入输出数据,所以把输入/输出设备也看成文件,称为设备文件。微机上配备的常用输入设备是键盘,称标准输入设备;常用输出设备是显示器,称标准输出设备;还有一个专用于输出错误信息的标准错误输出设备,也是显示器。2、文件型指针C语言规定文件类型是一种特殊的“结构型”FILE,对这个结构类型FILE,系统已经在头文件“stdio.h”中进行了定义。3、操作文件的常用函数 打开文件函数 open() 关闭文件函数 close() 文件尾测试函数 feof() 字符读/写函数 fgetc()/fputc() 字符串读/写函数 fgets()/fputs() 数据读/写函数 fread()/fwrite() 格式读/写函数 fscanf()/fprintf() 文件头定位函数 rewind() 文件随机定位函数 fseek() 错误测试函数 ferror()10.3 实验练习实验练习 1:编写程序,模拟DOS的type命令,显示文本文件的内容。本练习要求在封闭式实验课中在助教或者讲师的指导下完成。本练习分成6个部分:1 实验目的2 问题描述3 事例输出4 程序模板5 问题解答提示6 后续问题和任务程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。请先阅读问题描述,分析事例输出;然后研究模板的代码。参考问题解答提示,用C代码替换/* */注释。编译并执行程序,并将输出结果与提供的事例输出进行比较。然后回答强化练习。实验目的:本实验旨在巩固学生对文件概念的理解,增强程序设计能力。在这个实验中,学生将练习: 用包含命令将头文件”stdlib.h”包含进来。 设置带参数的主函数。 设置文件类型的指针fp。 if语句判断,若命令行的参数少于2个,则输出No file name.,退出程序。 用fopen()函数以读方式打开文件,若打不开,则输出No such file.,退出程序。 利用循环语句,若没有读到文件结束EOF,依次从文件中读出字符并显示在屏幕上。 关闭文件。在强化练习中,学生将练习: 设置无参的主函数,显示指定文件。 利用fgets()函数读取文件中的字符串,完成类似功能。 利用fgetc()函数和fputc()函数,模拟DOS的copy命令。 利用fgets()函数和fputs()函数,模拟DOS的copy命令。问题描述编写程序,用带参数的主函数接收从命令行中传来的文件,将该文件以读方式打开,然后用fgetc( )函数将字符一个个读出,显示在屏幕上。示例输出D: pro10_1 pro_1.c#include “stdio.h”void main( ) int a=3, b=4, c; c=a+b; printf(“c=%dn”, c); 注:设有文件pro_1.c,其内容为: #include “stdio.h” void main( ) int a=3, b=4, c; c=a+b; printf(“c=%dn”, c); 程序模板(设此程序的程序名为:pro10_1.c) #include stdio.h#include stdlib.hvoid main(_, _) /*定义文件类型的指针fp*/ char ch; if(argc2) /*输出No file name.*/ /*退出程序*/ if(以读方式打开命令行中待显示的文件argc1,若能打开,则使文件指针fp指向该文件的信息区) printf(No such file.); abort( ); while(ch=fgetc(fp)!=EOF) /*将从文件中读出的字符显示在屏幕上*/ /*关闭文件*/问题解答提示1文件类型FILE是在头文件“stdio.h”中说明的。2每个打开的文件都对应一个FILE类型的结构体,用于存放文件的信息(文件信息区),可以用FILE定义文件指针变量指向文件的信息区,从而对文件进行操作。3主函数的参数有三个,即命令行中参数的个数(argc)、存放各个命令行参数的字符串数组(argv)、存放各个环境变量的字符串数组(env)。4对于DOS的type命令,只有两个参数。若参数个数小于2,则退出程序。5若文件打开成功,fopen()返回一个有效的文件指针,否则返回空指针NULL。6调用fgetc(fp)函数,依次从文件中读出字符赋给字符变量ch并显示在屏幕上;读到文件结尾时,则结束。7. 文件操作完成后,要关闭文件。8. 如果在实验中碰到任何问题,请向实验老师寻求帮助。强化练习1根据程序模板,设置无参的主函数,使之能显示指定的文件,试编写程序。2重新编写程序,利用fgets()函数读取文件中的字符串,完成类似功能。3编写程序,利用fgetc()函数和fputc()函数,模拟DOS的copy命令。4编写程序,利用fgets()函数和fputs()函数,模拟DOS的copy命令。实验练习 2:从键盘输入一行字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test.dat”中保存,然后读出并输出在屏幕上。试编写程序。本练习要求在封闭式实验课中在助教或者讲师的指导下完成。本练习分成6个部分:1 实验目的2 问题描述3 事例输出4 程序模板5 问题解答提示6 后续问题和任务程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。请先阅读问题描述,分析事例输出;然后研究模板的代码。参考问题解答提示,用C代码替换/* */注释。编译并执行程序,并将输出结果与提供的事例输出进行比较。然后回答强化练习。实验目的:本实验旨在巩固学生对文件概念的理解,增强程序设计能力。在这个实验中,学生将练习: 定义文件类型的指针fp。 以写方式打开test.dat文件,若打不开,则退出程序。 从键盘输入一串字符。 利用循环语句逐个字符进行判断和写入文件。若该字符是小写字母,则将它转换为大写字母,其余字符不变。 关闭写文件test.dat。 以读方式再次打开test.dat。 从文件中读出一串字符,赋给字符数组str。 输出字符数组str中的字符串。 关闭读文件test.dat。在强化练习中,学生将练习: 将字符串中的大写字母转换为小写字母,存入文件。 将字符串中的字符加上数字5后,存入文件jiami.txt。 将文件jiami.txt中的字符依次读出,减去数字5后,显示在屏幕上。问题描述首先以写方式打开文件test.dat,从键盘读入一行字符串,处理该行中的每个字符,若是小写字母转换为大写字母,然后将转换后的字符串写入文件,将文件关闭。再以读方式打开文件test.dat,从文件中读入一串字符显示在屏幕上。示例输出Input a string: I am a student.I AM A STUDENT.程序模板#include stdio.h#include stdlib.hvoid main( ) FILE *fp; char str100; int i; if(以写方式打开文件test.dat,若能打开,则使文件指针fp指向该文件的信息区) printf(Cannot open the file.n); /*用exit(0)退出程序*/ printf(Input a string:); /*输入一串字符存入字符数组str*/ for(i=0; stri & i=a & stri=z 可以判断stri是否是小写字母。5大写字母比小写字母小32(a-A),所以将小写字母转换成大写字母只要将该字母减32即可。6从文件中读取字符串,用fgets()函数。7如果在实验中碰到任何问题,请向实验老师寻求帮助。强化练习1根据程序模板,将字符串中的大写字母转换为小写字母,并存入文件。试编写程序。2从键盘输入一个字符串,将字符串中的字符加上数字5后,存入文件jiami.txt中。试编写程序(加密程序)。3将文件jiami.txt中的字符依次读出,减去数字5后,显示在屏幕上。试编写程序(解密程序)。实验练习 3:从键盘输入3个学生的数据,将它们存入磁盘文件student.dat中,然后再从文件中读出数据,显示在屏幕上。设学生数据包括学号、姓名、性别、年龄。试编写程序。本练习要求在封闭式实验课中在助教或者讲师的指导下完成。本练习分成6个部分:1 实验目的2 问题描述3 事例输出4 程序模板5 问题解答提示6 后续问题和任务程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。请先阅读问题描述,分析事例输出;然后研究模板的代码。参考问题解答提示,用C代码替换/* */注释。编译并执行程序,并将输出结果与提供的事例输出进行比较。然后回答强化练习。实验目的:本实验旨在巩固学生对文件概念的理解,增强程序设计能力。在这个实验中,学生将练习: 定义struct student结构体类型,并同时定义该类型的数组stu和变量out。 定义FILE类型的指针fp。 利用循环语句给数组stu的各元素赋值。 以二进制写方式打开文件student.dat,若打不开,则退出程序。 利用循环语句,用fwrite()函数将数组stu的各条记录依次写入文件student.dat中。 以二进制读方式打开文件student.dat。 利用循环语句,用fread()函数从文件student.dat中依次读出记录存入struct student类型的变量out中,并显示在屏幕上。在强化练习中,学生将练习: 打开数据文件student.dat能看到什么结果,为什么? 将fwrite()函数换成fprintf()函数,fread()函数换成fscanf()函数,重编程序。打开数据文件student.dat能看到什么结果?问题描述编写程序。将学生的数据写入结构体数组,以二进制写方式打开数据文件student.dat,用fwrite语句将记录一条条写入文件。最后用fread语句将记录读入结构体变量out中,然后将out的值显示在屏幕上。示例输出Input student 1:0101 liming m 20Input student 2:0102 wangli f 19Input student 3:0103 lumin m 21No Name Sex Age 0101 liming m 200102 wangli f 190103 lumin m 21程序模板 #include stdio.h#include stdlib.h#define SIZE 3struct student char num5;char name10;char sex;int age;stuSIZE,out;void main( ) FILE *fp;int i;for(i=0;iSIZE;i+) printf(Input student %d:,i+1);/*从键盘输入学生的一组数据*/if(以二进制写方式打开文件student.dat,若能打开,则使文件指针fp指向该文件的信息区) printf(Cannot open file.n);abort( );for(i=0;iSIZE;i+) /*用fwrite()函数将学生的记录写入文件student.dat中*/fclose(fp);fp=fopen(student.dat, rb);printf( No Name Sex Age n);for(i=0; iSIZE; i+) /*用fread()函数,从文件student.dat中读取一条记录存入out中*/printf(%-5s %-10s %c %dn, out.num,, out.sex, out.age);/*关闭文件*/问题解答提示1二进制文件是由一串与内存存放形式相同的字节组成。它不需要转换就从内存送到文件中存放起来。2打开文件函数fopen()中的第二个参数是文件打开方式。是wb时是二进制写方式打开文件,rb时是二进制读方式打开文件。3fread()函数和fwrite()函数的第一个参数是读取数据暂存区的地址,要用取地址运算符&,如&out、&stui。4fread()函数和fwrite()函数的第二个参数是每个数据块(每条记录)的字节数,用sizeof(struct student)求出。5如果在实验中碰到任何问题,请向实验老师寻求帮助。强化练习1在DOS下,用type student.dat命令,会看到什么结果?2根据程序模板,将fwrite()函数换成fprintf()函数,fread()函数换成fscanf()函数,重新编写程序。实验练习 4:设有学生数据文件student.dat,编写程序将其中第i个学生的记录输出出来。本练习要求在封闭式实验课中在助教或者讲师的指导下完成。本练习分成6个部分:1实验目的2 问题描述3 事例输出4 程序模板5 问题解答提示6 后续问题和任务程序模板是完整的、可实际运行的C程序,其中关键的一行或者多行代码已经替换为注释。请先阅读问题描述,分析事例输出;然后研究模板的代码。参考问题解答提示,用C代码替换/* */注释。编译并执行程序,并将输出结果与提供的事例输出进行比较。然后回答强化练习。实验目的:本实验旨在巩固学生对文件概念的理解,增强程序设计能力。在这个实验中,学生将练习: 定义struct student结构体类型,并同时定义该类型变量out。 定义FILE类型的指针fp。 以二进制写方式打开文件student.dat,若打不开,则退出程序。 输入待查找学生的序号。 用rewind()函数将文件指针fp重新指向文件的开头处。 用fseek()函数将文件指针定位在带查找的记录上。 用fread()函数从文件student.dat中读出记录存入struct student类型的变量out中,并显示在屏幕上。在强化练习中,学生将练习: 输出序号为偶数的学生的记录。 按逆序输出学生的记录。问题描述将学生数据文件student.dat以二进制读方式打开,然后将文件指针定位在第i条记录上,用fread语句将记录读出来,显示在屏幕上。示例输出请输入学生的序号:20102 wangfan f 19程序模板#include stdio.h#include stdlib.hstruct student char num5; char name10; char sex; int age;out;void main() FILE *fp; int i; if(fp=fopen(student.dat,rb)=NULL) printf(Cannot open file.n); /*退出程序*/ printf(请输入学生的序号:); scanf(%d,&i); /*将文件指针重定位至文件的开头处*/ /*将文件指针定位在待查找的记录上*/ fread(&out,sizeof(struct student),1,fp); printf(%s %s %c %dn,out.num,,out.sex,out.age); /*关闭文件*/问题解答提示1若不知文件指针指向何处,用重定位函数,将文件指针fp重新指向文件的开头处。2fseek()函数中的第三个参数是移动文件指针时的起始位置。为0时,表示文件指针在文件的开始处;为1时,表示文件指针在当前文件指针位置;为2时,表示文件指针在文件尾。3fseek()函数中的第二个参数是移动到距起始位置为多少条记

温馨提示

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

评论

0/150

提交评论