单词拼写程序设计与实现
单词拼写程序设计与实现
1 课程设计任务与要求
1.1 课程设计目的
此次课程设计的首要目的是让我们利用所学的c 语言知识和数据结构知识解决实际问题,即进行较简单的程序设计。
课程设计就是要让我们去发现问题,然后想办法去解决问题。在这个过程中,我们都会去思考,这样的思考比纸上谈兵更能让学生掌握并深刻理解已学到的知识,这样我们就将知识做到了融会贯通。
在设计过程中我们会发现新问题,是我们已有知识解决不了的,这个时候我们就会去学习新的东西去解决新问题,这中间有新的思考和新的收获。课程设计让我们在不知不觉中提高了我们分析问题、解决问题的能力。
1.2 问题描述
单词拼写程序,一看题就很自然的想到我们现在学习机的查单词功能,还有大部分手机中的嵌入式英文字典,这些都是单词拼写程序设计的现实基础。
因为以上的现实要求,单词拼写程序设计就是类似于设计智能的字典,它可以完成单词录入、查找单词、删除单词、导入单词等一系列的功能。
1.3 功能要求
① 单词录入。即在程序中键入一连串单词,程序会自动其保存下来。
② 查找单词。输入一个单词,看是否能在前面输入序列中找到。
③ 导入单词。如果输入单词在原序列中找不到,程序则将其录入原序列。
2 总体设计
2.1 总体设计思想
首先建立一个数据结构为字符型的一维数组,然后向其中录入单词,但不能超过数组的最大容量,否则停止录入。
其次输入单词,看在录入的单词内查找是否有此单词,即当条件匹配就有,否则就没有。当录入单词序列中有此单词,则将此单词在录入单词序列中的位置和出现的次数输出,当录入单词序列中没有此单词时,则进行单词导入操作。
最后当原录入单词中没有此单词则将此单词导入原录入单词中,将其安排在原单词序列的末尾。
2.2
总体框架图
图1 总体框架图 2.3 模块说明
录入单词就是往空白一维数组中输入单词,这样得到一单词序列串。录入单词对应的函数是用户自定义函数void index(),这一部分还有记录单次数的功能。
单词查找就是找到所谓的匹配条件,条件满足就意味着查找成功。查找单词对应的函数也是用户自定义函数void index(),这一部分还是实现了记录单词位置的功能。
导入单词就是在原单词序列中导入不曾出现的单词,将单词置于序列末尾。导入单词模块出现在主函数void main()中。
3 详细设计
3.1 数据结构设计
此程序采用的数据结构类型是最简单的一维数组,采用该数据结构的顺序存储。采用此数组结构的原因是单词都是随机存储的,而一维数组具备这样的特点。采用一维数组还有是因为它是最简单的数据结构。
3.2 主要算法设计
3.2.1 单词录入算法
① 建立一个字符型一维数组str [],其最大空间为1000。
② 用一变量i 来控制数组的位置。
③ 置i 的初值为0,当i
3.2.2 查找单词算法
① 输入一检索单词,将其暂存在你一字符型数组word []当中。
② 用变量pos_word来控制此数组的位置。
③ 用另一变量len_word控制检索单词的长度。
④ 置pos_word初始值为0,当pos_word
3.2.3 导入单词算法
① 当发现检索单词不在录入单词序列时, 用指针p 表示最后一个有效字母的位置。 ② 置pos_word初始值为0,当pos_word
这样就完成了单词的导入。
4 程序测试
4.1 测试用例
在此过程中所有数据都是随机的正确的英文单词。
在录入单词时,我随机的键入:hi his happy look you he big small see #,最后字符‘#’表示此次输入结束。在检索单词时我有随机键入单词sad ,而后程序又将sad 导入到我开始随机建立的单词中;第二次我随即键入look ,由于look 在原单词库中,故程序输出其在单词串列中的位置。
4.2 测试结果
在VC++6的环境下运行已经编好的程序,将程序所具备的功能都调试一遍,使程序程序的可行和有效,最后得到一个运行状况良好的程序。
图2 录入单词情况
图3 查找情况1和导入单词情况
图4 查找情况2
5 课程设计总结
5.1 遇到的困难
一开始拿到这个课题的时候,丈二和尚摸不着头脑,想了老半天都不知道这个程序是要我干什么。没办法,就先百度,结果没有出来满意的结果,然后就问编程学的较好的同学,他们也不知道,没有办法,最后就只能问老师了,最后老师给我解释了题目的意思,才解决了这个问题。后面编程也碰到不少的问题,能解决的一定自己解决,但有些问题却是绞尽脑汁都想不出来,只得去翻阅资料,再不懂,就请教同学,就这样一波三折的完成了这个程序的一部分较容易的功能! 5.2 收获与体会
在这一次课程设计中我体会到自己专业是这么的有趣,深刻的体会到自己的专业能为这个社会带来这么多的方便。以前我不是很喜欢自己这个专业,对未来也是一片迷茫,不知道这个专业到底是干什么。现在,我至少知道编程能带来这么多的东西,譬如我酷爱的游戏都是编程员思想的结晶,也知道我经常去银行取钱的ATM 机,也是编程编出来的智能产物。最重要的是自己也能编出一个像样的程序,尽管在编程当中碰到许多困难,但我没有放弃,而是不断努力,尽自己最大的能力去编好这个程序。
课程设计加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。
参考文献
[1]谭浩强. C 程序设计(第三版). 北京:清华大学出版社,2009
[2]张海藩. 软件工程(第五版). 北京:清华大学出版社,2010
[3]汪沁. 数据结构. 北京:清华大学出版社,2009
附录
#include
#include
#define MAX_size 1000
int flag=1,degree=0;
void Index(char str[],char word[],int position[])
{
int i,len_str,len_word,pos_str,pos_word,k=0,number=0,w=0;
len_word=strlen(word);
len_str=strlen(str);
for(i=0;i
{ if(str[i]==' ') w=0;
else if(w==0)
{
w=1;
number++;
}
for(pos_str=i,pos_word=0;pos_str
if(str[pos_str]!=word[pos_word])
break;
}
if(pos_word==len_word && (str[pos_str]=='\0'|| str[pos_str]==' '||str[pos_str]==','||str[pos_str]=='.'))
{
position[k++]=number;
degree++;
flag=0;
}
else
{
while(str[pos_str]!=' '&&str[pos_str]==','&&str[pos_str]=='.'&& pos_str
}
i=pos_str;
}
}
void main()
{
char*p;
char str[MAX_size],word[20];
int position[100],i=0,j,n=0,m=0;
int k=0;
while(1)
{
k=m+n;
printf("请录入单词:\n");
while(k
{
str[k]=getchar();
if(str[k]=='#')break;
k++;};
m=k;
getchar();
printf("请输入要检索的单词: \n");
gets(word); p=word;
Index(str,word,position);
k=m;
if(flag)
{printf("您输入的单词不在录入单词中。\n");
n=strlen(word);
for(j=0;j
{str[k]=*p;p++;k++;};
printf("文章输出为:\n");
puts(str);
}
else
{ printf("您输入的单词在录入单词中, 它共出现 %-d 次\n",degree); printf("出现的位置为: \n");
for(i=0;i
printf("第%-2d个单词\n",position[i]);
break;
}
}
}