1、C语言课程设计指导书程序设计课程设计指导书数字媒体技术专业 陈万军 编二OO九年六月印刷包装工程学院信息科学系第1章 设计大纲1.1 设计目的本课程设计是C语言程序设计课程实践环节的深化和延续。此次课程设计的目的是以C程序设计语言为基础,通过完成具有一定难度的课程设计题目的功能描述、总体设计、程序编写及调试工作,加深对C语言相关知识的理解与Visual C+集成开发环境的使用,重点掌握文件操作函数的熟练运用,并养成良好的程序设计习惯,提高自我分析问题、解决问题的能力,为进一步学习高级编程技术及其相关课程打下良好基础。1.2 设计平台操作系统:Microsoft Windows VISTA /
2、Windows XP / Windows NT开发环境:Microsoft Visual C+ 6.0 / Visual C+ 2005;MSDN1.3 设计要求1、严格按照选题要求进行选题,原则上小题目一人一组,大题目两人一组,最多不超过3人。2、课程设计期间使用固定的计算机。3、程序代码要有必要的注释说明,以提高程序的可读性。1.4 环节安排及进度 本次课程设计时间为2周,10个工作日。具体进度安排如下:时 间任 务第1天上午课程设计任务安排;文件操作相关概念的学习;打开、关闭文件函数的学习与使用。下午字符读/写函数的学习与使用;字符串读/写函数的学习与使用;当天小结。第2天上午数据块读/
3、写函数的学习与使用;格式化读/写函数的学习与使用。下午文件定位函数的学习与使用;当天小结。第3天上午文件定位函数的学习与使用;文件操作实例一。下午文件操作实例二;当天小结。第4天上午文件操作实例二;文件操作实例三。下午文件操作实例三;当天小结。第5天上午选题、分组;查找资料。下午课题任务功能描述。第6天上午总体设计:功能模块设计;下午总体设计:数据结构设计;总体设计:函数功能描述。第7天上午程序实现。下午程序实现。第8天上午程序实现。下午程序实现。各功能模块测试及结果分析。第9天上午各功能模块测试及结果分析。下午撰写课程设计报告。第10天上午撰写课程设计报告。下午提交课程设计程序及设计报告;答
4、辩、总结。1.5 纪律要求1、每位参加课程设计的同学必须认真对待,积极参加。2、从严要求自己,不随意迟到、早退和旷课,有事需例行请假手续,在实验室不得玩计算机游戏。3、在课程设计中应积极发挥个人主观能动性,勤于思考,虚心向指导教师、实验室教师请教,服从实验室教师的安排。4、爱护实验室的所有财产,不得私自删除机器上系统文件。5、保持实验室的整洁卫生。凡违反课程设计纪律者,指导教师或实验室教师有权进行批评教育或终止其课程设计,成绩以零分记。1.6 成绩评定方式根据平时完成课程设计任务情况、工作态度、纪律、课程设计程序及设计报告等指标综合评定成绩。成绩不合格者,按照学校相关规定,自费随下一届学生补作
5、该环节课程设计。1、 总分100分:其中出勤20分,程序40分,设计报告40分;2、 出勤每天上、下午2次,每次1分;3、 如果发现有严重抄袭者,个人或该组总成绩以0分计;4、 课程设计说明书以准确、规范、认真等指标进行打分,不得抄袭,否则总成绩按0分计;5、 答辩成绩按照答辩表述和提问等环节进行评分。第2章 C语言文件操作函数2.1 文件相关概念 文件是为了某种目的系统地把数据组织起来而构成的数据集合。1 文件指针 C语言编译系统为了处理文件,为每个文件在内存中开辟一个区域,用来存放文件的有关信息,如文件名、文件状态以及文件当前位置等。这个区域被作成一个称为FILE类型的结构体。FILE的类
6、型由系统定义,保存在头文件stdio.h中,它的具体结构暂时不用关心。C程序中用指向FILE类型变量的指针变量(简称“文件指针”)来标识具体文件。声明 FILE *stream;声明了一个文件指针变量,以后stream可以用来标识具体文件。2 标记(文件读/写位置指针) C语言编译系统把文件一律都看成是“字节流”,在该字节流上有一个隐含的暗标记,该标记总是指向文件中正要操作的字节,即下一个将要操作的字节,称该标记为文件读/写位置指针。例如:3 几个常量 C语言编译系统引进几个常量标志文件处理状态。最常用的是EOF和NULL,它们是stdio.h中预定义的常量。 EOF:值为“-1”,习惯上表示
7、文件结束或文件操作出错。 NULL:值为“0”,习惯上表示打开文件失败等。2.2 文件操作函数 C文件操作全部通过系统定义的库函数来实现。用户使用库函数时,需要把相应的头文件用#include命令括入到自己的程序文件中。文件操作函数库的头文件是“stdio.h”,使用的程序行是: #include 任何高级语言,对文件操作都应该遵循如下流程:2.2.1 打开、关闭文件函数1打开文件打开文件使用函数fopen。fopen的函数原型是:FILE *fopen( const char *filename, const char *mode );它的调用方式是: FILE *stream = fope
8、n( filename, mode );其中 filename是一个字符串,具体给出要打开的文件的文件名; mode也是一个字符串,具体给出文件的打开模式,表2.1列出各种打开模式; stream是文件指针变量,以后程序中使用该指针变量标识由文件名给出的文件。fopen的功能是根据mode指定的模式,打开由filename指定的文件。返回值=指向文件filename的文件指针,操作成功NULL出错例2_1:/ This program uses fopen to open file: c:usertest.txt#include void main() FILE *stream = NULL;
9、 stream = fopen(c:usertest.txt, r); if (stream = NULL) printf(%s, fopen errorn); else printf(%s, fopen OKn); / 其他代码省略 fclose(stream); ;以“只读”方式打开c盘user文件夹下的test.txt文件,如果成功,则stream就是文件test.txt的文件指针变量,并且只允许对文件进行读操作;否则stream的值是NULL。表2.1 文件打开模式序号mode含 义1“r”以只读方式打开一个ASCII文件2“w”以只写方式打开或新建一个ASCII文件,原有文件内容全部
10、删除3“a”同“w”,但不删除原有文件内容4“r+”以可读可写方式打开一个ASCII文件5“w+”以可读可写方式打开或新建一个ASCII文件,原有文件内容全部删除6“a+”同“w+”,但是不删除原有文件内容7“rb”以只读方式打开一个二进制文件8“wb”以只写方式打开或新建一个二进制文件,原有文件内容全部删除9“ab”同“wb”,但是不删除原有文件内容10“rb+”以可读可写方式打开一个二进制文件11“wb+”以可读可写方式打开或新建一个二进制文件,原有文件内容全部删除12“ab+”同“wb+”,但是不删除原有文件内容2关闭文件 任何文件在操作结束之后,都应该执行文件关闭操作。关闭文件使用函数
11、fclose。fclose函数原型是:int fclose( FILE *stream ); 它的调用方式是:fclose(stream); 其中stream是文件指针。fclose的功能是关闭由文件指针stream指向的文件。返回值=0操作成功EOF出错2.2.2 字符读/写函数 读/写字符(或字节)数据时,选用fget( )和fputc( )函数。1读字符:fgetc(1)函数原型:int fgetc( FILE *stream );(2)功能:从stream指向的文件中读取一个字符,同时将读/写位置指针向前移动1个字节。(3)返回值=读取字符的ASCII码操作成功EOF出错或遇到文件结束
12、例2_2/ This program uses getc to read the first 80 input characters (or until the end of / input) and place them into a string named buffer.#include #include int main() FILE *stream; char buffer81; int i,ch; / Open file to read line from: stream = fopen(crt_fgetc.txt, r); if (stream=NULL) exit(0); /
13、Read in first 80 characters and place them in buffer: ch = fgetc(stream); for (i=0; (i80) & (feof(stream)=0); i+) bufferi = (char)ch; ch = fgetc(stream); / Add null to end string bufferi = 0; printf(%sn, buffer); fclose(stream);Input: crt_fgetc.txtLine one.Line two.OutputLine one.Line two.2写字符:fputc
14、(1)函数原型:int fputc( int c, FILE *stream );(2)功能: 把字符c写入stream指向的文件,同时将读/写位置指针向前移动1个字节。(3)返回值=所写字符的ASCII码操作成功EOF出错例2_3/ This program uses fputc to send a character array to stdout.#include int main() char strprt1 = This is a test of fputc!n; char *p; / Print line to stream using fputc. p = strprt1; wh
15、ile( (*p!=0) & fputc( *(p+), stdout ) != EOF );OutputThis is a test of fputc!2.2.3 字符串读/写函数 读/写字符串时,选用fgets( )和fputs( )函数。1读字符串:fgets(1)函数原型:char *fgets( char *str, int n, FILE *stream );(2)功能:从stream指向的文件中读取一个字符串,并将此串保存在str指向的字符数组中。字符串的自然结束符是“换行符”和“文件结束符”。若读到n-1个字符后还没有遇到结束符,则也强制结束,这时把n-1个读入的字符送入数组s
16、tr中。读入结束后,在数组str的字符串末尾加字符串终止符NULL,并将文件读/写位置指针向前移动实际读取的字符个数。(3)返回值=str所指的字符数组首地址操作成功NULL否则例2_4/ This program uses fgets to display a line from a file on the screen.#include int main() FILE *stream; char line100; stream = fopen(crt_fgets.txt, r); if (stream = NULL) printf(%s, file open errorn); else i
17、f (fgets(line, 100, stream) = NULL) printf(%s, fgets errorn); else printf(%s, line); fclose(stream); Input: crt_fgets.txtLine one.Line two.OutputLine one.2写字符串:fputs(1)函数原型:int fputs( const char *str, FILE *stream );(2)功能:把str所指字符串(不包括字符串结束符NULL)写入stream指向的文件,同时将读/写位置指针向前移动n(字符串长度)个字节。(3)返回值=非负值操作成功
18、EOF否则例2_5/ This program uses fputs to write a single line to the stdout stream.#include int main( void ) fputs( Hello world from fputs.n, stdout );OutputHello world from fputs.2.2.4 数据块读/写函数 读/写多个不含格式的数据块时,选用fread( )和fwrite( )函数。1读数据块:fread(1)函数原型:int fread( void *buffer, int size, int count, FILE *
19、stream );(2)功能:从stream所指的文件中读取count个字段,每个字段为size个字节,把它们送到buffer所指的缓冲区数组中,同时,将读/写位置指针向前移动size*count 个字节。一般来讲,数组buffer每个元素的尺寸为size,每个字段正好对应数组buffer的一个元素,即读入count个字段送入数组buffer的count个元素中。(3)返回值=实际读取的字段个数操作成功EOF错误或文件结束2写数据块:fwrite(1)函数原型:int fwrite( const void *buffer, int size, int count, FILE *stream )
20、;(2)功能:从buffer所指的数组中,把count个字段写到stream所指的文件中,每个字段为size个字节,同时,将读/写位置指针向前移动size*count个字节。一般来讲,数组buffer每个元素的尺寸为size,每个字段正好对应数组buffer的一个元素,即把数组buffer的count个元素写到文件中。(3)返回值=实际写入的字段个数操作成功其他操作错误例2_6/ This program opens a file named FREAD.OUT and writes 25 characters to the / file. It then tries to open FREA
21、D.OUT and read in 25 characters. If the attempt / succeeds, the program displays the number of actual items read.#include int main() FILE *stream; char list30; int i, numread, numwritten; / Open file in text mode: if( (stream=fopen(fread.out, w+t) != NULL ) for (i=0; i25; i+) listi = (char)(z-i); /
22、Write 25 characters to stream numwritten = fwrite(list, sizeof(char), 25, stream); printf(Wrote %d itemsn, numwritten); fclose(stream); else printf(Problem opening the filen); if( (stream=fopen(fread.out, r+t) != NULL ) / Attempt to read in 25 characters numread = fread(list, sizeof(char), 25, strea
23、m); printf(Number of items read = %dn, numread); printf(Contents of buffer = %.25sn, list); fclose(stream); else printf(File could not be openedn);OutputWrote 25 itemsNumber of items read = 25Contents of buffer = zyxwvutsrqponmlkjihgfedcb2.2.5 格式化读/写函数 读/写多个含格式的数据时选用fscanf( )和fprintf( )函数。函数fscanf(
24、)和fprintf( )与函数scanf( )和printf( )的功能相似,区别在于函数fscanf( )和fprintf( )操作对象是一般文件,而scanf( )和printf( )操作对象是标准输入/输出文件。格式化读/写是把数据按fscanf( )和fprintf( )函数中格式控制符串中控制字符的要求进行转换,然后再进行读/写。1格式化输入:fscanf(1)函数原型:int fscanf( FILE *stream, const char *format ,argument . );(2)功能:从stream所指文件中按format规定的格式读取数据。 (3)返回值=实际读取的参
25、数个数操作成功一个负数否则例2_7/ This program writes formatted data to a file. It then uses fscanf to read the / various data back from the file.#include int main() FILE *stream; long l; float fp; char s81; char c; if( (stream=fopen(fscanf.out, w+) != NULL ) fprintf(stream, %s %ld %f%c, a-string, 6500, 3.14159, x
26、); / Set pointer to beginning of file: fseek(stream, 0L, SEEK_SET); / Read data back from file: fscanf(stream, %s, s); fscanf(stream, %ld, &l); fscanf(stream, %f, &fp); fscanf(stream, %c, &c); / Output data read: printf( %sn, s ); printf( %ldn, l ); printf( %fn, fp ); printf( %cn, c ); fclose( strea
27、m ); else printf( The file fscanf.out was not openedn );Outputa-string650003.141590x2格式化输出:fprintf(1)函数原型:int fprintf( FILE *stream, const char *format ,argument .);(2)功能:将数据按formant规定的格式写入stream所指的文件中。(3)返回值=实际写入的参数个数操作成功一个负数否则例2_8/ This program uses fprintf to format various data and print it to t
28、he file named * / FPRINTF.OUT. It then displays FPRINTF.OUT on the screen using the system/ function to invoke the operating-system TYPE command.#include #include int main() FILE *stream; int i = 10; double fp = 1.5; char s = this is a string; char c = n; if( (stream=fopen(fprintf.out, w) != NULL ) fprintf(stream, %s%c, s, c); fprintf(stream, %dn, i); fprintf(stream, %fn, fp); fclose(stream); system(type fprintf.out); else printf(%
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1