汉字字频计算程序课程设计Word格式文档下载.docx
- 文档编号:20872919
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:20
- 大小:366.84KB
汉字字频计算程序课程设计Word格式文档下载.docx
《汉字字频计算程序课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汉字字频计算程序课程设计Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
2.每个汉字及其字频单独一行输出;
3.按照课程设计规范书写课程设计报告。
第2章概要设计
2.1数据类型的定义
该程序使用了结构体数组来存储汉字信息,该数组有10000个结构体类型元素,每个结构体含有3个成员,key[3]用来汉字字符,count用来存储每个汉字在该文本中出现的次数(字频),vis用来判断文本中汉字是否出现了一次以上,定义的方式如下所示:
typedefstructhword
{
charkey[3];
intcount;
intvis;
}hword;
hword[10000];
2.2主要函数和函数功能描述
(1)主函数main():
调用主菜单函数;
(2)比较函数cmp1()&
cmp2():
按由大到小的顺序或者由小到大的顺序比较汉字字频;
2.3程序模块图
图2.1汉字字频计算程序模块图
第3章详细设计
3.1主函数模块
main()是本程序的主函数,用来调用主菜单函数。
流程图如图3.1所示
否
是
图3.1主函数流程图
3.2排序模块
cmp1()&
cmp2()为本程序提供汉字字频的排序,并且根据用户输入的选项选择排序的方式(由大到小或者由小到大),借以完成用户所期望的功能。
流程图如图3.2所示
图3.2cmp1()模块流程图
3.3选择统计文本模块
主函数中的选择被统计的文本模块提供用户输入或是打开其他文件的功能。
该部分用到了指针,数组,文件等方面的知识。
其中利用strlen函数和while循环求出文本中含有的全部字符数。
流程图如图3.3所示
图3.3选择统计文本模块流程图
3.4统计字频模块
统计字频模块主要有识别汉字和统计字频两大功能。
首先通过汉字与其他字符的区别识别汉字,并将识别后的汉字存在之前定义的结构体中。
其次通过for循环来统计各个汉字出现的次数。
流程图如图3.4所示
否
图3.4统计字频模块流程图
3.5输出模块
本模块主要功能为将统计出来的字频按用户的需求排序后输出。
利用for循环执行输出。
流程图如图3.5所示
12
图3.5输出模块流程图
第4章调试分析
(1)问题:
在判断字符是否为中文汉字时,无法将标点排除。
解决方法:
查找汉字与标点的区别,然后设为判断条件。
(2)问题:
在输出汉字及其字频时未能单独一行输出。
在输出的for循环中添加“\n”。
(3)问题:
在文件内容存入时,文档内容显示的是乱码。
将文件写入有fwrite改为fprintf。
(4)问题:
在运行时提示库函数名为未标识符。
缺少头文件,添加所需的头文件。
第5章用户使用说明
(1)主菜单界面:
输入1或2,选择要打开文件的方式。
选项1为创建新的文章。
选项2为打开现有文章。
主菜单界面如图5.1所示
图5.1主菜单界面
(2)选择排序方式界面:
按照提示,首先输入需要打开文件的方式,然后输入相应的信息,再选择需要的排序方式。
界面如图5.2所示
图5.2选择排序方式界面
(3)选择输出文本界面:
选择输出文件。
界面如图5.3所示
图5.3选择输出文本界面
(4)输出结果界面:
显示统计结果
界面如图5.4所示
图5.4统计结果界面
第6章测试结果
运行程序后,会出现主菜单,如图6.1所示
图6.1主菜单
输入2,打开现有文章,如图6.2所示
图6.2
输入该文本所在的目录。
如图6.3所示
图6.3
输入1,选择由大到小的排序方式,选择输出文件如图6.4所示
图6.4
打开输出统计结果的文件,如图6.5所示
图6.5
参考文献
[1]谭浩强主编《C程序设计》(第4版)北京:
清华大学出版社2010
[2]张长海陈娟主编《C程序设计》北京:
高等教育出版社2004
[3]李虹主编《c语言程序设计》南京大学出版社2010.02
[4]陈刚主编《c语言程序设计》清华大学出版社2010.02
[5]陆俊维马雪松主编《c语言程序设计》中国铁路工业出版社2009.06
[6]李泽中孙红艳主编《c语言程序设计》北京:
清华大学出版社2008.06
[7]魏海新李燕主编《c语言程序设计实用教程》机械工业出版社2007.09
[8]王敬华林萍陈静主编《c语言程序设计教程》北京:
清华出版社2005.10
附录
源程序:
#include<
stdio.h>
stdlib.h>
string.h>
typedefstructhword
{
charkey[3];
longcount;
intvis;
}hword;
hwordword[100000];
intcmp1(constvoid*a,constvoid*b)
hword*f1=(hword*)a;
hword*f2=(hword*)b;
if(f1->
count>
f2->
count)
return-1;
count<
return1;
count==f2->
return0;
}
intcmp2(constvoid*a,constvoid*b)
voidmain()
intmax=0,i=0,n=0,j=0;
charch[100000];
chart;
FILE*fin,*p;
charpath[50];
printf("
1.创建新的文章\n2.打开现有文章\n"
);
scanf("
%d"
&
t);
if(t==1)
{
请输入文件名\n"
%s"
path);
fin=fopen(path,"
w"
请输入文章内容\n"
ch);
fprintf(fin,"
n=strlen(ch);
}
else
printf("
请输入现有文件名\n"
scanf("
fin=fopen(path,"
r"
while(!
feof(fin))
ch[n]=fgetc(fin);
n++;
for(i=0;
i<
n-1;
)
unsignedcharch1=ch[i];
unsignedcharch2=ch[i+1];
if(ch1>
128)
{
if(ch1>
=176&
&
ch1<
=247&
ch2>
=160&
ch2<
=254)
{
word[j].key[0]=ch[i];
word[j].key[1]=ch[i+1];
word[j].key[2]='
\0'
;
i=i+2;
j++;
}
else
i=i+2;
}
else
i++;
max=j;
for(i=0;
i<
max;
i++)
word[i].vis=0;
word[i].count=1;
for(intj=i+1;
j<
j++)
if(word[j].vis==0)
{
if(strcmp(word[j].key,word[i].key)==0)
{
word[i].count++;
word[j].vis=1;
}
}
fclose(fin);
printf("
1.按字频由大到小排序\n2.按字频由小到大排序\n"
scanf("
if(t==1)
qsort(word,max,sizeof(word[0]),cmp1);
qsort(word,max,sizeof(word[0]),cmp2);
请输入输出文件的文件名"
p=fopen(path,"
a+"
for(i=0;
if(word[i].vis==0)
fprintf(p,"
%s:
%d\n"
word[i].key,word[i].count);
课程设计总结:
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实际能力和自主学习能力的重要环节。
这次课程设计,我的题目是《汉字字频计算程序》,从理论到实践,让我对c语言有了更深刻的认识,也学到了很多东西,不仅巩固了以前所学过的知识,而且学到了很多书本上所没有的内容。
经过自己的琢磨,听取了学长们的建议,查阅了很多书籍和资料,才终于使问题得到了解决。
我在编写程序过程中遇到了很多的问题,一些基本的函数不会应用,编程软件运用不够熟练,在董老师的辛勤指导下,终于得到解决。
这让我发现了自己的知识的匮乏,掌握的不够牢固,懂得了只学书本上的东西是远远不够的,只有把所学的理论知识与实践相结合起来,才能真正的学到东西,才能提高自己的实际动手能力和独立思考能力。
在程序运行成功的时候,我的心里是非常喜悦的,这些天的努力终于有了回报。
在以后的学习过程中要多阅读一些复杂的程序,了解基本的函数,算法和编程思想,更要多动手写一些程序,不要怕出错,争取在改错的过程中找到自己知识的漏洞和模糊点。
我想,经过日后的不断努力,我一定会编写出真正可以实际应用的程序。
最后,我要感谢董老师和对我的教导和帮助,在百忙之中抽出时间对我遇到的问题进行解决,使我能够顺利的将程序编写完成,我表示由衷的感激。
指导教师评语:
指导教师(签字):
年月日
课程设计成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汉字 字频 计算 程序 课程设计