C语言程序设计中数据文件处理技巧
2012-11-15李国忠杨艳
李国忠 杨艳
江西工业工程职业技术学院,江西 萍乡 337055
C语言程序设计中数据文件处理技巧
李国忠 杨艳
江西工业工程职业技术学院,江西 萍乡 337055
数据文件处理是C语言教学过程中必不可少的一个教学单元。在C语言课程设计任务中通常离不开对数据文件进行处理,如记录的追加、统计、删除及修改等。本文拟通过数据文件处理的巧妙算法的介绍,让学生在做C语言课程设计时加深对数据文件及算法的认识,做到事半功倍。
文件处理;记录;巧妙算法
引言
C语言是目前世界上流行、使用最广泛的高级程序设计语言。对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。在众多的程序设计语言中, C 语言以其灵活性和实用性受到了广大计算机应用人员的喜爱。一旦掌握了C 语言,就可以较为轻松地学习其他任何一种程序设计语言,为学习后续的面向对象程序设计打下基础。
《C语言程序设计》是我院面向理工类各专业学生开设的,旨在培养学生基本程序设计思想和程序设计能力的学科基础必修课。通过《C语言程序设计》课程的学习,培养学生的逻辑思维能力,掌握基本的面向过程的程序设计方法,扎实提高学生的动手实践能力,为下一步学习面向对象的程序设计技术和其他重要后继课程的学习打下坚实的基础。
1 文件处理分析
文件实际上就是记载在外部存储器上的数据的集合,在C语言中把这些数据的集合看成是字符或字节序列,亦即由一个一个的字符或字节的数据顺序组成,换句话说,C语言是把每一个文件都看成是一个有序的字节流。
文件操作是C语言教学过程中必不可少而学生又难掌握的一个教学单元。在C语言程序设计中对数据文件的操作主要包括文件的打开、读取、写入、关闭。具体地说就是对记录的插入、删除、修改、排序等操作,对记录的处理都涉及记录的保存和记录数的统计,然而C语言本身并没有直接提供对记录计数和记录保存的函数,这就需要程序员自己开发编写。
2 文件处理技巧
下面的C语言程序中就数据文件中记录保存、记录自动排序和记录计数三个重要功能的实现分别设计了一个巧妙的算法。具体代码如下:
该程序通过关键语句fseek(fp,(kh[i].ID-1)*rec_len,0);实现了记录数据的自动排序,如图1所示。
图1 记录自动排序
实现该功能的核心算法是根据账号的大小来移动文件指针的位置,正如图2、图3和图4所示,文件指针每次的偏移量都是不同的。
图2 第一次输入时数据文件的存储状况
图3 第二次输入时数据文件的存储状况
图4 第三次输入时数据文件的存储状况
该算法的缺点是可能会在数据文件中生成一些空记录,这可以通过save()函数来弥补,save()函数具有清除空记录的功能,如图5所示。当然在记录的删除、修改、追加操作中都能用到save()函数。在程序中由rec()函数实现记录数的统计。在rec()函数中若把语句if(fread(&kh[i],sizeof(struct K H X X),1,f p)!=N U L L)改写为fread(&kh[i],sizeof(struct KHXX),1,fp)则记录数会比实际数目大1,这是因为文件指针在读取完最后一条记录后,还会尝试再取一次数据,这样使循环次数多了一次,因此需要增加计数条件。
图5 save()函数清除空记录
3 文件处理技巧的应用
C语言是各级各类学校教学体系中的一门计算机语言教学必修课,C语言课程设计是在C语言课堂教学和实验教学基础上的一项课程设计任务,其目的是巩固教学成果,扩充 教学内容,提高教学质量。在课程设计任务中少不了要对数据文件进行操作,如记录的追加、记录的统计、记录的删除、记录的修改等等。对大多数学生来说算法和逻辑概念是比较薄弱的,如果在课程设计中能恰当地应用到本文所述的记录自动排序、记录保存及记录计数等算法,那么学生在完成任务时就能少走弯路,做到事半功倍。
[1] 李丽娟.C语言程序设计教程{M}.北京:人民邮电出版社,2009
[2] 张友珍.C语言课程设计的教学实践{J}.合肥联合大学学报,2001(3)
10.3969/j.issn.1001-8972.2012.09.046
李国忠(男),杨艳(女),江西萍乡人,电子计算机系讲师。