单词出现次数统计课程设计报告.doc_第1页
单词出现次数统计课程设计报告.doc_第2页
单词出现次数统计课程设计报告.doc_第3页
单词出现次数统计课程设计报告.doc_第4页
单词出现次数统计课程设计报告.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

程序设计语言课程设计单词出现次数统计一 目的通过课程设计,加深对c语言程序设计课程所学知识的理解,熟练掌握和巩固c语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等,学会编制结构清晰、风格良好、数据结构适当的c语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。二 需求分析1、输入数据输入2个字符串数据。第一个为文字所保存在的文件名,第二个为要统计的单词。2、输出数据输出进行查找的文章以及搜索的单词。并输出搜索结果:单词在文章出现的次数及第一次出现位置。3、程序功能按照输入的文件名打开文件并获取文章内容,搜索统计单词出现次数以及第一次出现位置并输出结果。三 概要设计1、全局变量或类型说明2、模块功能void printlogo()清屏并输出logo。void msg(char *str) 清屏并输出logo后输出参数str的内容。char loadfile(char *filename)打开文章文件filename并读取内容到内存 该函数会自动为文章分配内存 如果内存已经分配过会先释放原来申请的内存 成功返回1 失败返回0char lowcase(char c)把c转化成小写返回 如果c不是字母直接返回c本身。void gettext()让用户输入文件名并读入文章 将会一直循环直到成功打开文件或用户输入”终止程序。char ckeckletter(char c)检查c是否为一个英文字母 是返回1否返回0char comstrproc(char str,int pos,int len)比较字符串str与文章从pos开始长度为len的部分 len即str的长度。 注意str在传入前必需先转化成全小写。void analysistext(char key)在已经读入内存的文章利用comstrproc进行统计 并输出结果(个数 第一次出现位置 或者未找到)void wuhansen()程序主要模块 不断执行并根据要求重复程序功能(1重复 2退出程序)。int main()仅仅是调用wuhansen后清理内存。3、程序函数调用流程main()wuhansen()gettext()analysistext()msg()loadfile()printlogo()ckeckletter()comstrproc()lowcase()四 详细设计源代码如下:#include #include #include #if defined ( _msc_ver ) #include /*vc*/#else #include /*tc & cbuilder*/#endif/*使用预编译指令使vc和cbuilder tc都可以正常编译分配内存(vc 的分配内存函数位于 stdlib.hborland公司的编译器的该函数位于alloc.h)*/char *buffer;unsigned int buffersize=0;int fileopen=0,quit=0;/* fileopen 为1时 说明内存已经申请 如果要重新分配请先free*/* quit 为1的话程序可以退出*/void printlogo() #if defined ( _msc_ver ) system(cls);/*vc没有清屏函数所以使用dos命令来完成*/ #else clrscr(); #endif /*清屏*/ printf(+-+n); printf(| word counter |n); printf(| by wuhansen 08065008 |n); printf(| qq:21764538 www.wuhansen.com |n); printf(+-+n);void msg(char *str) printlogo(); printf(str);char loadfile(char *filename)/*分配内存并把数据文件载入到内存中*/ file *hfile; if(strlen(filename)=a)&(c=a)&(c=a)&(c=z)return 1; return 0;char comstrproc(char str,int pos,int len)/*比较字符串str和buffer从pos开始len长度 len即str长度*/*先trlwr(str)转化成小写 这样就不用每次都转化提高效率*/ int i; for(i=0;ilen;i+) if(stri!=lowcase(bufferi+pos) return 0; return 1;void analysistext(char key)/*搜索关键字 输入统计结果*/ int i,len=0,tmp=0,count=0,firstpos=0; len=strlen(key); if(len=0) for(i=0;i0) printf(has been foundn); printf(first found:%d total:%dn,firstpos,count);else printf(cannot be found.n); /*没找到*/ else printf(cannot be found.n);/* 关键字长度比文章大这样就不用比较了肯定找不到哈*/ void wuhansen()/*实际上的主函数不断重复整个过程直到用户输入2退出程序*/ char key255; char br; for(;) msg(welcomen);gettext(); if(quit) return;msg(input keyword:);gets(key);analysistext(key);printf(n);for(br=1;br;) printf(choose:n); printf(1 try again.n); printf(2 exit.n); switch (getchar() case 1:br=0;/*switch中不能用break 跳出for 所以设置一个变量*/getchar();/*清除用户输入时候产生的n */break; case 2:return; default:printf(wrong key ) ; int main() wuhansen(); if (fileopen) free(-buffer); return 0;五 调试分析1、测试数据文章:recently,there has been a discussion regarding the issue of knowledge in the newspaper.as can be seen from the picture,knowledge is symbolized a clenched fist as power,the fist sends out a message for obedience,threatening to crack with power any hard nut.the more demanding and challenging a task is,the more powerful the fist seems to grow.similarly,knowledge,the strongest power for human beings,feeds up the field of science and technology.the more advanced and developed a field is,the more profound knowledge seems to become.关键词:the2、输出结果first found:48 total:113、存在过的问题以及分析解决1)判断单词时候只判断了结尾没判断开头。增加了(!ckeckletter(bufferi-1)并调整了内存的分配格式(保护内存)加以解决。2)关键字包含大写没转化的错误。使用key=strlwr(key);进行正确转化。3)代码无法在vc下正常编译(只能在borland的编译器下编译)。加了预编译条件,针对vc头文件及函数进行修改,支持了几种常见编译器。(详见代码中的注释)六 测试结果测试结果如下图所示:七 用户使用说明运行程序后会提示输入数据文件名,直到输入正确路径打开文件为止(默认数据文件为dat 请放在程序目录下输入dat即可打开),否则会一直重复这个过程,可以输入“”来直接终止程序。读取数据文件成功后会提示输入要搜索的单词,输入后会进行查找并返回搜索结果。完成后程序会提示输入1.重试一次 2.退出程序 可以按照需要选择。八

温馨提示

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

评论

0/150

提交评论