1、
单词统计的程序设计报告
12
2020年4月19日
文档仅供参考,不当之处,请联系改正。
单词统计的程序设计报告
一、问题描述
单词统计
要求:(1)输入任意一段英文。
(2)根据(1)中各单词出现概率的高低输出前五个单词。
(3)具有输入输出界面
二、结构图
单词统计
输入一段英文
判断是否是完整的单词
循环计出重复单词及次数
输出频率最高的前五个单词
三、数据结构设计
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
{
if(ch>='A'&&ch<='Z') ch+=3
2、2;
flag=0;
word[i][j]=ch;
j++; } else flag=1; //判断是否是一个完整单词,并将单词大小写一致
if(flag==1)
{
total++;
word[i][j]='\0';
count_word[i]++;
for(k=0;k
3、)
{
max=0;
maxno=0;
for(k=0;kmax)
{
maxno=k;
max=count_word[k];
}
if (max==0) break;//单词出现概率最高的前五个单词及此单词本身输出
四、处理流程图:(下页)
开始
输入文章
完整单词
最后一个单词=第一个
最后一个单词=前一个单词
单词数加一
大写字母换小写
字母指向下一个
此单词数加一
此单词数加一
第一个=下一
4、个单词
输出各个单词个数
输出单词个数最多前五个
退出
是
是
下一个单词
否
否
五、源程序
#include
#include
void main()
{
char ch='\0';
char word[1000][20];
int count_word[1000]={0};
int i=0,j=0,k=0,flag=0,total=0,l=0,max,maxno;
printf("请输入一段英文文章,以#标志结束:\n");
while((ch=getchar())!='#')
{
5、if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
{
if(ch>='A'&&ch<='Z') ch+=32;
flag=0;
word[i][j]=ch;
j++; }
else flag=1;
if(flag==1)
{
total++;
word[i][j]='\0';
count_word[i]++;
for(k=0;k
6、eak;
}
}
i++;
j=0;
}
}
printf("所要求的单词为:\n");
printf("----------------------------------------");
for(l=0;l<5;l++)
{
max=0;
maxno=0;
for(k=0;kmax)
{
maxno=k;
max=count_word[k];
}
if (max==0) break;
printf("\n%-10s",word[maxno]);
count_word
7、[maxno]=0;
}
getchar();
}
六、程序测试记录
这题为中等难度题,有一定难度!用了好久才解决。大致思想分几块还是正确的,主要是细节上,受到好多困扰,运行多次出现(或者类似的)以下界面:
单词与输入不一致,根本没有输入,出现次数都一样,后来参考资料,网上搜,发现有两个影响全局的遗漏,在判断是否为完整单词时指到下个单词字母应归0重新计数,还有就是在筛选出出现概率最大得前五个单词时,count_word[maxno]=0遗漏,后经不断调试,程序终于能够正确运行。
运行界面如下:
七、软件说明
软件功能为:对于任意输入的一段英文,能够根据这段英文中各单词出现概率的高低输出前五个单词。在运行出的界面按提示输入用户需要的英文,程序会按要求得出结果。
改进意见:还能够增加此单词出现的次数,百分率等选项,让软件服务更具体,输出界面更友好,易懂明目!