为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

比较两个文件是否雷同

2012-06-21 12页 doc 85KB 87阅读

用户头像

is_094799

暂无简介

举报
比较两个文件是否雷同沈 阳 航 院 设 计 用 纸 Xxxxxxxxxx大学 课程设计 学 号 班 级 姓 名 指导教师 年 月 日 课程设计任务书 一 课程设计题目:比较两个文件是否雷同 二 课程设计工作自2007年03月03日起至2007年03月07日止 三 课程设计内容: 用C语言编写软件完成以下任务: 用程序创建2个文本文件并输入一些单词,然后判断它们文字内容的相似性(雷同的程度)。如果二者的所有单词中,相同的单词数量占总量的80%,则认为二者是雷同的(识别单词程序可参考谭浩强...
比较两个文件是否雷同
沈 阳 航 院 设 计 用 纸 Xxxxxxxxxx大学 课程 学 号 班 级 姓 名 指导教师 年 月 日 课程设计任务书 一 课程设计题目:比较两个文件是否雷同 二 课程设计工作自2007年03月03日起至2007年03月07日止 三 课程设计内容: 用C语言编写软件完成以下任务: 用程序创建2个文本文件并输入一些单词,然后判断它们文字内容的相似性(雷同的程度)。如果二者的所有单词中,相同的单词数量占总量的80%,则认为二者是雷同的(识别单词程序可参考谭浩强《C程序设计》P150例7.8)。 四 课程设计要求: 程序质量: · 贯彻结构化程序设计思想。 · 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。 · 用户界面中的菜单至少应包括“创建文件1”、“创建文件2”、“判断相似性”、“退出”4项。 · 代码应适当缩进,并给出必要的注释,以增强程序的可读性。 课程设计说明书: 课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下: · 封面 · 课程设计任务书 · 目录 · 需求(分析题目的要求) · 程序流程图(总体流程图和主要功能模块流程图) · 核心技术的实现说明及相应程序段 · 个人总结 · 参考资料 · 源程序及适当的注释 指导教师:____________________ 学生签名:____________________ 目录 1一、需求分析 2二、程序流程图 3三、核心技术的实现说明及相应程序段 5四、个人总结 5五、参考文献 6六、源程序 一、需求分析 通过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,它们的功能分别是:创建文件1(Creat1_z),创建文件2(Creat2_z) 以及相似性判断(contrast)。 1、创建文件1 主要功能:创建一个文件并向其中保存文件1中的数据; 2、创建文件2 主要功能:创建一个文件并向其中保存文件2中的数据; 3、相似性判断 按照题目的具体要求实现的是将创建的两个文件内的单词进行比较,计算相同单词数和相似度; 除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。 将文件1和文件2分别存到D盘的text1.txt和text2.txt中,并保存。 二、程序流程图 1、程序总体结构图 当t!=4 t=1 真 假 创建文件1 t=2 真 假 创建文件2 t=3 真 假 判断两文件相似性 t=4 真 假 退出 错误 图1程序总体结构图 2、具体功能框图 (1)创建文件 当t=1或t=2 真 打开文件 假 输入内容 无法打开 退出 关闭文件 图2 创建文件 (2)相似性判断 contrast 当t=3时 当k==1时 将a数组中的单词依次存入str1中 当f==1时 将b数组中的第j个单词存入str2中 sr1=str2 真 假 t++ 当a[i]==’’||b[i]==’’时 s++ 输出相似度为2.0*t/s*100% 图3相似性判断 三、核心技术的实现说明及相应程序段 本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,相似性判断是程序中较为核心的部分,下面分别进行说明。 相似性判断 使用strcmp函数比较两个单词是否相同,通过调用for循环将数组a,b中的单词依次存入是str1和str2中进行比较,使用while()循环嵌套实现整个比较过程。再使用for()循环计算a,b两数组中的总单词数,进行相似度的计算。具体的程序段如下: contrast() { char str1[15],str2[15]; int i=0,j=0,t=0,s,k=1,f=1; while(k==1) { for(s=0;(a[i]!=32)&&(a[i]!=0)==1;s++,i++)/*将a数组中的单词存入str1中*/ str1[s]=a[i]; str1[s]='\0'; if(str1=="") continue;/*空格不进行比较*/ f=1; j=0; while(f==1) { for(s=0;(b[j]!=32)&&(b[j]!=0)==1;j++,s++)/*将b组中的单词存入str2*/ str2[s]=b[j]; str2[s]='\0'; if(str2=="") continue; /*空格不进行比较*/ if(strcmp(str1,str2)==0)/*比较str1与str2中储存的单词是否相同*/ { t++; f=0; continue; } j++; if(b[j]==0) f=0; }i++; if(a[i]==0) k=0; } printf("相同单词数:%d\n",t); for(i=0,j=0,s=0;a[i]!=0;i++)/*计算a数组中的单词数*/ if(a[i]==32) s=0; else if(s==0) {s=1;j++;} for(i=0,s=0;b[i]!=0;i++)/*计算b组中的单词数*/ if(b[i]==32) s=0; else if(s==0) {s=1;j++;} printf("相似度:%5.2f%%\n",N(t,j));/*相似度的计算*/ if(N(t,j)>=80) printf("相同!\n"); else printf("不同!\n"); } 四、个人总结 经过一周时间的学习和上机操作,使我的C语言编程能力有了很大的提高,并对C语言有了更加深刻的了解。使我懂得C语言它的方便和快捷。 这次课程设计让我学到了很多 也增强了克服困难的能力 我想这才是最宝贵的 就在几天之前的课设过程中,我对我的课程设计完全不清楚 也不知道该从何着手。但是通过查阅资料和咨询老师让我在几天之内就有了很大的进步,并找到了一些问题的解决方法,这是最让我高兴的。在自己的不泄努力下,一个还算完美的程序诞生了。 这次课程设计让我受益匪浅,学到了很多,提高了我对C语言的兴趣,同时也加深了我对C语言的理解。也为以后的需要打下了基础。 五、参考文献 1 谭浩强.C程序设计.北京:清华大学出版社,2005 2 刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006 六、源程序 #include"stdio.h" #include"string.h" #define N(a,b) 2.0*a/b*100 FILE *pa,*pb; int t,m; char a[100],b[100]; /*创建文件1*/ void Creat1_Z() { if((pa=fopen("d:\\file1.txt","w+"))==NULL) printf("\t不能打开此文件!\n"); else { printf("\t向文件1输入一个字串:\n"); getchar(); gets(a); fputs(a,pa); printf("\t成功!\n"); } fclose(pa); } /*创建文件2*/ void Creat2_Z() { if((pb=fopen("d:\\file2.txt","w+"))==NULL) printf("\t不能打开此文件!\n"); else { printf("\t向文件2输入一个字串:\n"); getchar(); gets(b); fputs(b,pb); printf("\t成功!\n"); } fclose(pb); } /*相似性比较*/ void contrast( ) { char str1[15],str2[15]; int i=0,j=0,t=0,s,k=1,f=1; while(k==1) { for(s=0;(a[i]!=32)&&(a[i]!=0)==1;s++,i++) str1[s]=a[i]; str1[s]='\0'; if(str1=="") continue; f=1; j=0; while(f==1) { for(s=0;(b[j]!=32)&&(b[j]!=0)==1;j++,s++) str2[s]=b[j]; str2[s]='\0'; if(str2=="") continue; if(strcmp(str1,str2)==0) { t++; f=0; continue; } j++; if(b[j]==0) f=0; }i++; if(a[i]==0) k=0; } printf("相同单词数:%d\n",t); for(i=0,j=0,s=0;a[i]!=0;i++) if(a[i]==32) s=0; else if(s==0) {s=1;j++;} for(i=0,s=0;b[i]!=0;i++) if(b[i]==32) s=0; else if(s==0) {s=1;j++;} printf("相似度:%5.2f%%\n",N(t,j)); if(N(t,j)>=80) printf("相同!\n"); else printf("不同!\n"); } /**/ void mune() { printf("*****************判断两个文件是否相同*****************\n"); printf("\t\t 1:创建文件1\n"); printf("\t\t 2:创建文件2\n"); printf("\t\t 3:判断相似性\n"); printf("\t\t 4:退出\n"); printf("#########请选择########\n"); printf("****************************************************\n"); } /**/ void main() { while(t!=4) { mune(); scanf("%d",&t); if(t==1) Creat1_Z(); else if(t==2) Creat2_Z(); else if(t==3) contrast(); else if(t==4) ; else printf("输入错误!请重新输入!\n"); } } PAGE
/
本文档为【比较两个文件是否雷同】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索