C语言课程设计指导书.docx

上传人:b****4 文档编号:12288602 上传时间:2023-04-17 格式:DOCX 页数:42 大小:383.22KB
下载 相关 举报
C语言课程设计指导书.docx_第1页
第1页 / 共42页
C语言课程设计指导书.docx_第2页
第2页 / 共42页
C语言课程设计指导书.docx_第3页
第3页 / 共42页
C语言课程设计指导书.docx_第4页
第4页 / 共42页
C语言课程设计指导书.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

C语言课程设计指导书.docx

《C语言课程设计指导书.docx》由会员分享,可在线阅读,更多相关《C语言课程设计指导书.docx(42页珍藏版)》请在冰豆网上搜索。

C语言课程设计指导书.docx

C语言课程设计指导书

 

程序设计课程设计指导书

数字媒体技术专业

陈万军编

 

二OO九年六月

印刷包装工程学院信息科学系

 

第1章设计大纲

1.1设计目的

本课程设计是《C语言程序设计》课程实践环节的深化和延续。

此次课程设计的目的是以C程序设计语言为基础,通过完成具有一定难度的课程设计题目的功能描述、总体设计、程序编写及调试工作,加深对C语言相关知识的理解与VisualC++集成开发环境的使用,重点掌握文件操作函数的熟练运用,并养成良好的程序设计习惯,提高自我分析问题、解决问题的能力,为进一步学习《高级编程技术》及其相关课程打下良好基础。

1.2设计平台

操作系统:

MicrosoftWindowsVISTA/WindowsXP/WindowsNT

开发环境:

MicrosoftVisualC++6.0/VisualC++2005;MSDN

1.3设计要求

1、严格按照选题要求进行选题,原则上小题目一人一组,大题目两人一组,最多不超过3人。

2、课程设计期间使用固定的计算机。

3、程序代码要有必要的注释说明,以提高程序的可读性。

1.4环节安排及进度

本次课程设计时间为2周,10个工作日。

具体进度安排如下:

时间

任务

第1天

上午

课程设计任务安排;

文件操作相关概念的学习;

打开、关闭文件函数的学习与使用。

下午

字符读/写函数的学习与使用;

字符串读/写函数的学习与使用;

当天小结。

第2天

上午

数据块读/写函数的学习与使用;

格式化读/写函数的学习与使用。

下午

文件定位函数的学习与使用;

当天小结。

第3天

上午

文件定位函数的学习与使用;

文件操作实例一。

下午

文件操作实例二;

当天小结。

第4天

上午

文件操作实例二;

文件操作实例三。

下午

文件操作实例三;

当天小结。

第5天

上午

选题、分组;

查找资料。

下午

课题任务功能描述。

第6天

上午

总体设计:

功能模块设计;

下午

总体设计:

数据结构设计;

总体设计:

函数功能描述。

第7天

上午

程序实现。

下午

程序实现。

第8天

上午

程序实现。

下午

程序实现。

各功能模块测试及结果分析。

第9天

上午

各功能模块测试及结果分析。

下午

撰写课程设计报告。

第10天

上午

撰写课程设计报告。

下午

提交课程设计程序及设计报告;

答辩、总结。

1.5纪律要求

1、每位参加课程设计的同学必须认真对待,积极参加。

2、从严要求自己,不随意迟到、早退和旷课,有事需例行请假手续,在实验室不得玩计算机游戏。

3、在课程设计中应积极发挥个人主观能动性,勤于思考,虚心向指导教师、实验室教师请教,服从实验室教师的安排。

4、爱护实验室的所有财产,不得私自删除机器上系统文件。

5、保持实验室的整洁卫生。

凡违反课程设计纪律者,指导教师或实验室教师有权进行批评教育或终止其课程设计,成绩以零分记。

1.6成绩评定方式

根据平时完成课程设计任务情况、工作态度、纪律、课程设计程序及设计报告等指标综合评定成绩。

成绩不合格者,按照学校相关规定,自费随下一届学生补作该环节课程设计。

1、总分100分:

其中出勤20分,程序40分,设计报告40分;

2、出勤每天上、下午2次,每次1分;

3、如果发现有严重抄袭者,个人或该组总成绩以0分计;

4、课程设计说明书以准确、规范、认真等指标进行打分,不得抄袭,否则总成绩按0分计;

5、答辩成绩按照答辩表述和提问等环节进行评分。

第2章C语言文件操作函数

2.1文件相关概念

文件是为了某种目的系统地把数据组织起来而构成的数据集合。

1文件指针

C语言编译系统为了处理文件,为每个文件在内存中开辟一个区域,用来存放文件的有关信息,如文件名、文件状态以及文件当前位置等。

这个区域被作成一个称为FILE类型的结构体。

FILE的类型由系统定义,保存在头文件stdio.h中,它的具体结构暂时不用关心。

C程序中用指向FILE类型变量的指针变量(简称“文件指针”)来标识具体文件。

声明

FILE*stream;

声明了一个文件指针变量,以后stream可以用来标识具体文件。

2标记(文件读/写位置指针)

C语言编译系统把文件一律都看成是“字节流”,在该字节流上有一个隐含的暗标记,该标记总是指向文件中正要操作的字节,即下一个将要操作的字节,称该标记为文件读/写位置指针。

例如:

3几个常量

C语言编译系统引进几个常量标志文件处理状态。

最常用的是EOF和NULL,它们是stdio.h中预定义的常量。

EOF:

值为“-1”,习惯上表示文件结束或文件操作出错。

NULL:

值为“0”,习惯上表示打开文件失败等。

2.2文件操作函数

C文件操作全部通过系统定义的库函数来实现。

用户使用库函数时,需要把相应的头文件用#include命令括入到自己的程序文件中。

文件操作函数库的头文件是“stdio.h”,使用的程序行是:

#include

任何高级语言,对文件操作都应该遵循如下流程:

2.2.1打开、关闭文件函数

1.打开文件

打开文件使用函数fopen。

fopen的函数原型是:

FILE*fopen(constchar*filename,constchar*mode);

它的调用方式是:

FILE*stream=fopen(filename,mode);

其中

●filename是一个字符串,具体给出要打开的文件的文件名;

●mode也是一个字符串,具体给出文件的打开模式,表2.1列出各种打开模式;

●stream是文件指针变量,以后程序中使用该指针变量标识由文件名给出的文件。

fopen的功能是根据mode指定的模式,打开由filename指定的文件。

返回值=

指向文件filename的文件指针,

操作成功

NULL

出错

例2_1:

//Thisprogramusesfopentoopenfile:

"c:

\\user\\test.txt"

#include

voidmain()

{

FILE*stream=NULL;

stream=fopen("c:

\\user\\test.txt","r");

if(stream==NULL)

printf("%s","fopenerror\n");

else

{

printf("%s","fopenOK\n");

//其他代码省略

fclose(stream);

}

};

以“只读”方式打开c盘user文件夹下的test.txt文件,如果成功,则stream就是文件test.txt的文件指针变量,并且只允许对文件进行读操作;否则stream的值是NULL。

表2.1文件打开模式

序号

mode

含义

1

“r”

以只读方式打开一个ASCII文件

2

“w”

以只写方式打开或新建一个ASCII文件,原有文件内容全部删除

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.关闭文件

任何文件在操作结束之后,都应该执行文件关闭操作。

关闭文件使用函数fclose。

fclose函数原型是:

intfclose(FILE*stream);

它的调用方式是:

fclose(stream);

其中stream是文件指针。

fclose的功能是关闭由文件指针stream指向的文件。

返回值=

0

操作成功

EOF

出错

2.2.2字符读/写函数

读/写字符(或字节)数据时,选用fget()和fputc()函数。

1.读字符:

fgetc

(1)函数原型:

intfgetc(FILE*stream);

(2)功能:

从stream指向的文件中读取一个字符,同时将读/写位置指针向前移动1个字节。

(3)返回值=

读取字符的ASCII码

操作成功

EOF

出错或遇到文件结束

例2_2

//Thisprogramusesgetctoreadthefirst80inputcharacters(oruntiltheendof//input)andplacethemintoastringnamedbuffer.

#include

#include

intmain()

{

FILE*stream;

charbuffer[81];

inti,ch;

//Openfiletoreadlinefrom:

stream=fopen("crt_fgetc.txt","r");

if(stream==NULL)

exit(0);

//Readinfirst80charactersandplacethemin"buffer":

ch=fgetc(stream);

for(i=0;(i<80)&&(feof(stream)==0);i++)

{

buffer[i]=(char)ch;

ch=fgetc(stream);

}

//Addnulltoendstring

buffer[i]='\0';

printf("%s\n",buffer);

fclose(stream);

}

Input:

crt_fgetc.txt

Lineone.

Linetwo.

Output

Lineone.

Linetwo.

2.写字符:

fputc

(1)函数原型:

intfputc(intc,FILE*stream);

(2)功能:

把字符c写入stream指向的文件,同时将读/写位置指针向前移动1个字节。

(3)返回值=

所写字符的ASCII码

操作成功

EOF

出错

例2_3

//Thisprogramusesfputctosendacharacterarraytostdout.

#include

intmain()

{

charstrprt1[]="Thisisatestoffputc!

!

\n";

char*p;

//Printlinetostreamusingfputc.

p=strprt1;

while((*p!

='\0')&&fputc(*(p++),stdout)!

=EOF);

}

Output

Thisisatestoffputc!

!

2.2.3字符串读/写函数

读/写字符串时,选用fgets()和fputs()函数。

1.读字符串:

fgets

(1)函数原型:

char*fgets(char*str,intn,FILE*stream);

(2)功能:

从stream指向的文件中读取一个字符串,并将此串保存在str指向的字符数组中。

字符串的自然结束符是“换行符”和“文件结束符”。

若读到n-1个字符后还没有遇到结束符,则也强制结束,这时把n-1个读入的字符送入数组str中。

读入结束后,在数组str的字符串末尾加字符串终止符NULL,并将文件读/写位置指针向前移动实际读取的字符个数。

(3)返回值=

str所指的字符数组首地址

操作成功

NULL

否则

例2_4

//Thisprogramusesfgetstodisplayalinefromafileonthescreen.

#include

intmain()

{

FILE*stream;

charline[100];

stream=fopen("crt_fgets.txt","r");

if(stream==NULL)

{

printf("%s","fileopenerror\n");

}

else

{

if(fgets(line,100,stream)==NULL)

{

printf("%s","fgetserror\n");

}

else

printf("%s",line);

fclose(stream);

}

}

Input:

crt_fgets.txt

Lineone.

Linetwo.

Output

Lineone.

2.写字符串:

fputs

(1)函数原型:

intfputs(constchar*str,FILE*stream);

(2)功能:

把str所指字符串(不包括字符串结束符NULL)写入stream指向的文件,同时将读/写位置指针向前移动n(字符串长度)个字节。

(3)返回值=

非负值

操作成功

EOF

否则

例2_5

//Thisprogramusesfputstowriteasinglelinetothestdoutstream.

#include

intmain(void)

{

fputs("Helloworldfromfputs.\n",stdout);

}

Output

Helloworldfromfputs.

2.2.4数据块读/写函数

读/写多个不含格式的数据块时,选用fread()和fwrite()函数。

1.读数据块:

fread

(1)函数原型:

intfread(void*buffer,intsize,intcount,FILE*stream);

(2)功能:

从stream所指的文件中读取count个字段,每个字段为size个字节,把它们送到buffer所指的缓冲区数组中,同时,将读/写位置指针向前移动size*count个字节。

一般来讲,数组buffer每个元素的尺寸为size,每个字段正好对应数组buffer的一个元素,即读入count个字段送入数组buffer的count个元素中。

(3)返回值=

实际读取的字段个数

操作成功

EOF

错误或文件结束

2.写数据块:

fwrite

(1)函数原型:

intfwrite(constvoid*buffer,intsize,intcount,FILE*stream);

(2)功能:

从buffer所指的数组中,把count个字段写到stream所指的文件中,每个字段为size个字节,同时,将读/写位置指针向前移动size*count个字节。

一般来讲,数组buffer每个元素的尺寸为size,每个字段正好对应数组buffer的一个元素,即把数组buffer的count个元素写到文件中。

(3)返回值=

实际写入的字段个数

操作成功

其他

操作错误

例2_6

//ThisprogramopensafilenamedFREAD.OUTandwrites25characterstothe//file.ItthentriestoopenFREAD.OUTandreadin25characters.Iftheattempt//succeeds,theprogramdisplaysthenumberofactualitemsread.

#include

intmain()

{

FILE*stream;

charlist[30];

inti,numread,numwritten;

//Openfileintextmode:

if((stream=fopen("fread.out","w+t"))!

=NULL)

{

for(i=0;i<25;i++)

list[i]=(char)('z'-i);

//Write25characterstostream

numwritten=fwrite(list,sizeof(char),25,stream);

printf("Wrote%ditems\n",numwritten);

fclose(stream);

}

else

printf("Problemopeningthefile\n");

if((stream=fopen("fread.out","r+t"))!

=NULL)

{

//Attempttoreadin25characters

numread=fread(list,sizeof(char),25,stream);

printf("Numberofitemsread=%d\n",numread);

printf("Contentsofbuffer=%.25s\n",list);

fclose(stream);

}

else

printf("Filecouldnotbeopened\n");

}

Output

Wrote25items

Numberofitemsread=25

Contentsofbuffer=zyxwvutsrqponmlkjihgfedcb

2.2.5格式化读/写函数

读/写多个含格式的数据时选用fscanf()和fprintf()函数。

函数fscanf()和fprintf()与函数scanf()和printf()的功能相似,区别在于函数fscanf()和fprintf()操作对象是一般文件,而scanf()和printf()操作对象是标准输入/输出文件。

格式化读/写是把数据按fscanf()和fprintf()函数中格式控制符串中控制字符的要求进行转换,然后再进行读/写。

1.格式化输入:

fscanf

(1)函数原型:

intfscanf(FILE*stream,constchar*format[,argument]...);

(2)功能:

从stream所指文件中按format规定的格式读取数据。

(3)返回值=

实际读取的参数个数

操作成功

一个负数

否则

例2_7

//Thisprogramwritesformatteddatatoafile.Itthenusesfscanftoreadthe

//variousdatabackfromthefile.

#include

intmain()

{

FILE*stream;

longl;

floatfp;

chars[81];

charc;

if((stream=fopen("fscanf.out","w+"))!

=NULL)

{

fprintf(stream,"%s%ld%f%c","a-string",6500,3.14159,'x');

//Setpointertobeginningoffile:

fseek(stream,0L,SEEK_SET);

//Readdatabackfromfile:

fscanf(stream,"%s",s);

fscanf(stream,"%ld",&l);

fscanf(stream,"%f",&fp);

fscanf(stream,"%c",&c);

//Outputdataread:

printf("%s\n",s);

printf("%ld\n",l);

printf("%f\n",fp);

printf("%c\n",c);

fclose(stream);

}

else

printf("Thefilefscanf.outwasnotopened\n");

}

Output

a-string

65000

3.141590

x

2.格式化输出:

fprintf

(1)函数原型:

intfprintf(FILE*stream,constchar*format[,argument]...);

(2)功能:

将数据按formant规定的格式写入stream所指的文件中。

(3)返回值=

实际写入的参数个数

操作成功

一个负数

否则

例2_8

//Thisprogramusesfprintftoformatvariousdataandprintittothefilenamed*//FPRINTF.OUT.ItthendisplaysFPRINTF.OUTonthescreenusingthesystem

//functiontoinvoketheoperating-systemTYPEcommand.

#include

#include

intmain()

{

FILE*stream;

inti=10;

doublefp=1.5;

chars[]="thisisastring";

charc='\n';

if((stream=fopen("fprintf.out","w"))!

=NULL)

{

fprintf(stream,"%s%c",s,c);

fprintf(stream,"%d\n",i);

fprintf(stream,"%f\n",fp);

fclose(stream);

system("typefprintf.out");

}

else

printf("%

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1