本文实例为大家分享了C语言实现单词小助手的具体代码,供大家参考,具体内容如下

单词小助手

(声明:此程序非原创,是在已有程序上进行一些修改和添加)

一、题目分析

题目要求:

1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。

2.将单词测试中的功能完善,可针对做错的单词重复记忆。

3.查询单词的功能添加英文词查询,中文查询的功能完善(考虑如何显示同样中文意义,不同的英文单词)

分析:

要求2,将做错的单词保存在新的错词文件中,并增添加强记忆函数;

要求3,采用循环遍历,找寻与所输入中文意思对应的所有英文单词,并依据中文查询添加英文查询。

二、关键算法构造

错题巩固,英中流程图:

中文查询流程图:

三、程序实现

#include

#include

#include

#define MAX_CHAR 20 // 最大字符

#define MAX_NUM 200 // 单词的最大个数

struct word

//单词的结构体

{

char en[MAX_CHAR]; // 英文形式

char ch[MAX_CHAR]; //中文形式

} s[MAX_NUM],r[MAX_NUM]; //单词数组

int num; //单词个数

int rnum; //需加强巩固的单词个数

int n=1,select=1; //select为是否退出系统的标记

int d=0,c=0; //c为回答错误的次数,d为回答正确的次数

//帮助

void help()

{

printf("\n本系统主要实现英语单词学习的功能。用户可对词典文件中的单词进行预览,增删改查。");

printf("\n同时还可进行中英、英中测试。本系统还提供了测试成绩的显示功能。");

}

//从文件中读取单词的信息

void readfile()

{

FILE *fp;//声明一个文件

int i=0;

fp=fopen("data.txt","r");//打开文件data.txt

if(!fp)//若文件不存在

{

printf("\n打开文件data.txt失败!");

}

while(fscanf(fp,"%s %s ",s[i].en,s[i].ch)==2)//读取下一个单词

{

i++;

}

num=i;//记录单词总数

if(0==i)//若单词数为0

printf("\n文件为空,请选择词典维护增加词条!");

else

printf("\n");

fclose(fp);//关闭文件

}

//向文件中写入单词的信息

void writefile()

{

FILE *fp;//声明一个文件

int i=0;

fp=fopen("data.txt","w");

if(!fp)//若文件不存在

{

printf("\n打开文件data.txt失败!");

}

for(i=0;i

{

fprintf(fp,"\n%s %s ",s[i].en,s[i].ch);

}

printf("\n");

fclose(fp);//关闭文件

}

//读取错题巩固文件

void wreadfile()

{

FILE *fp;//声明一个文件

int i=0;

fp=fopen("redata.txt","r");//打开错题巩固文件

if(!fp)//若文件为空

{

printf("\n打开文件redata.txt失败!");

}

while(fscanf(fp,"%s %s",r[i].en,r[i].ch)==2)//读取下一个单词

{

i++;

}

rnum=i;//记录错词数

if(0==i)//若错次数为0

printf("\n你还没有错题哦!");

else

printf("\n");

fclose(fp);//关闭文件

}

//按字典排序

void sort()

{

int i,j;

char temp[MAX_CHAR];

for(i=0;i

{

for(j=num-1;j>i;j--)//循环遍历当前单词之后的单词

if(strcmp(s[j-1].en,s[j].en)>0)/*若字符串s[j-1].en大于字符串s[j].en,则通过中间变量调换两个字符串*/

{

strcpy(temp,s[j-1].en);//调换英文字符串

strcpy(s[j-1].en,s[j].en);

strcpy(s[j].en,temp);

strcpy(temp,s[j-1].ch);//调换中文字符串

strcpy(s[j-1].ch,s[j].ch);

strcpy(s[j].ch,temp);

}

}

}

//添加单词信息

void add()

{

int i=num,j,flag=1;//定义变量

while(flag)

{

flag=0;

printf("\n请输入单词的英文形式:");

scanf("%s",s[i].en);//将所添加单词放在已有单词末尾

for(j=0;j

if(strcmp(s[i].en,s[j].en)==0)//若两个字符串相等

{

printf("已有该单词,请检查后重新录入!\n");

flag=1;

break; /*如有重复立即退出该层循环,提高判断速度*/

}

}

printf("\n请输入单词的中文形式:");

scanf("%s",s[i].ch);

num++; //单词数加1

printf("\n您输入的信息为: 英文: %s 中文: %s ",s[i].en,s[i].ch);

sort();//调用字典排序函数

}

//删除单词信息

void del()

{

int i=0,j=0;

char en[MAX_CHAR]; //英文形式

printf("\n请输入你要删除的单词英文形式:");

scanf("%s",en);

for(i=0;i

if(strcmp(s[i].en,en)==0)

{

for(j=i;j

s[j]=s[j+1];

num--; //数量减少 1

return;

}

printf("\n没有这个单词!");

}

//修改单词信息

void modify()

{

int i=0,choose=0,flag=1;//chooses代表选项标识,flag代表是否找到单词

char en[MAX_CHAR]; //英文形式

while(flag||choose)

{

printf("\n请输入你要修改的单词英文形式:");

scanf("%s",en);

for(i=0;i

if(strcmp(s[i].en,en)==0)

{

printf("\n请输入单词正确的英文形式:");

scanf("%s",s[i].en);

printf("\n请输入此单词正确的的中文形式:");

scanf("%s",s[i].ch);

printf("\n继续修改请选1,返回上一级请选0:");

scanf("%d",&choose);

if(choose==0) return;

}

flag=0;

}

if(!flag)

printf("\n没有这个单词!");

}

//单词预览

void show()

{

int i=0;

printf("\n单词: 英文 中文 ");

sort();

for(i=0;i

printf("\n %-12s %-14s",s[i].en,s[i].ch);

}

//英文查询

void searchen()

{

int i=0,choose=0,flag=1;

char en[MAX_CHAR]; //中文形式

while(choose||flag)

{

printf("\n请输入你要查询的单词英文形式:");

scanf("%s",en);

for(i=0;i

if(strcmp(s[i].en,en)==0)

{

printf("\n中文形式:%-12s 英文形式:%12s",s[i].ch,s[i].en);

}

printf("\n继续查询请选1,返回上一级请选0:");

scanf("%d",&choose);

if(choose==0) return;

flag=0;

}

if(!flag)

printf("\n没有这个单词!");

}

//中文查询

void searchch()

{

int i=0,choose=0,flag=1;

char ch[MAX_CHAR]; //中文形式

while(choose||flag)

{

printf("\n请输入你要查询的单词中文形式:");

scanf("%s",ch);

for(i=0;i

if(strcmp(s[i].ch,ch)==0)

{

printf("\n英文形式:%-12s 中文形式 :%12s",s[i].en,s[i].ch);

}

printf("\n继续查询请选1,返回上一级请选0:");

scanf("%d",&choose);

if(choose==0) return;

flag=0;

}

if(!flag)

printf("\n没有这个单词!");

}

//中译英测试

void zytest()

{

char b1[20];

int z;

int choose=1;//设置关键字

int i;

FILE *fp;//声明一个文件

while(choose)

{

fp=fopen("redata.txt","a+");//打开需巩固的错词文件

if(!fp)//若文件为空

{

printf("\n打开错词巩固文件redata.txt文件失败!");

}

i = rand()%num;//生成介于词库数目之间的随机数,随机抽取词库中的汉字

printf("\n【%s】请输入英文单词:",s[i].ch);

scanf("%s",b1);

for(z=0;strcmp(b1,s[i].en)!=0;z=z)//若所输入单词与汉字所对应单词不相等

{

fprintf(fp,"%s %s\n",s[i].en,s[i].ch);//回答错误时写入错词巩固文件

printf("\n输入错误!!请重新输入:");

scanf("%s",b1);

c=c+1; //做错单词数加1

rnum++; //单词巩固文件中单词数加1

}

fclose(fp); //关闭文件

printf("\n恭喜你,回答正确,加10分!\n\n");

d=d+1; //做对单词数加1

printf("(继续测试请选1,返回上一级请选0:)");

scanf("%d",&choose);

if(choose==0) return;

}

}

//英译中测试

void yztest()

{

char b1[20];

int z,x=41;

int choose=1;

int i;

FILE *fp; //声明一个文件

while(choose)

{

fp=fopen("redata.txt","a+");//打开需巩固的错词文件

if(!fp)//若文件为空

{

printf("\n打开错词巩固文件redata.txt失败!");

}

i = rand()%num;//生成介于词库数目之间的随机数,随机抽取词库中的单词

printf("\n【%s】请输入中文意思:",s[i].en);

scanf("%s",b1);

for(z=0;strcmp(b1,s[i].ch)!=0;z=z)//若所输入汉字与单词所对应汉字不相等

{

fprintf(fp,"%s %s\n",s[i].en,s[i].ch);//回答错误时写入错词巩固文件中

printf("\n输入错误!!请重新输入:");scanf("%s",b1);

c=c+1; //做错单词数加1

rnum++;//单词巩固文件中单词数加1

}

fclose(fp);//关闭文件

printf("\n恭喜你,回答正确,加10分!");

d=d+1; //做对单词数加1

printf("\n\n继续测试请选1,返回上一级请选0:");

scanf("%d",&choose);

if(choose==0) return;

}

}

//中英加强记忆

void zyretest()

{

char b1[20];

int z;

int choose=1;

int i;

while(choose)

{

i = rand()%rnum;//生成介于错题巩固文件中单词数目之间的随机数,随机抽取词库中的汉字

printf("【%s】请输入英文单词:",r[i].ch);

scanf("%s",b1);

for(z=0;strcmp(b1,r[i].en)!=0;z=z)//若所输入单词与汉字所对应单词不相等

{

printf("\n输入错误!!请重新输入:");

scanf("%s",b1);

c=c+1;//做错单词数加1

}

printf("\n恭喜你,回答正确,加10分!\n");

d=d+1;//做对单词数加1

printf("\n继续测试请选1,返回上一级请选0:");

scanf("%d",&choose);

if(choose==0) return;

}

}

//英中加强记忆

void yzretest()

{

char b1[20];

int z;

int choose=1;

int i;

while(choose)

{

i = rand()%rnum;//生成介于错题巩固文件中单词数目之间的随机数,随机抽取词库中的单词

printf("【%s】请输入中文意思:",r[i].en);

scanf("%s",b1);

for(z=0;strcmp(b1,r[i].ch)!=0;z=z)//若所输入汉字与单词所对应汉字不相等

{

printf("输入错误!!请重新输入:");

scanf("%s",b1);

c=c+1;

}

printf("\n恭喜你,回答正确,加10分!\n\n");d=d+1;

printf("\n继续测试请选1,返回上一级请选0:");

scanf("%d",&choose);

if(choose==0) return;

}

}

//成绩列表

void list()

{

printf("\n 共计输入错误:%d次 **每次扣10分**\n",c);

printf(" 共计输入正确:%d次 **每次加10分**\n",d);

printf(" 你的总得分为:%d分\n\n",10*d-10*c);

}

//词典维护

void maintain()

{

int choose;//维护功能选择

printf(" ------------------\n");

printf(" 1.增加单词\n");

printf(" 2.修改单词\n");

printf(" 3.删除单词\n");

printf(" 4.英文查询\n");

printf(" 5.中文查询\n");

printf(" 6.退出本菜单\n");

printf(" ------------------\n");

while(1)

{

printf(" \n请输入维护功能编号:");

scanf("%d",&choose);

switch(choose)

{

case 1:

add();writefile();break;

case 2:

modify();writefile();break;

case 3:

del();writefile();break;

case 4:

searchen();break;

case 5:

searchch();break;

case 6: return;

default: printf("\n请在1-5之间选择");

}

}

}

//用户界面

void menudisplay()

{

printf("\n");

printf("*********************************************************\n");

printf("# #\n");

printf("# 英语单词小助手 #\n");

printf("# #\n");

printf("# 版本 : v1.0 #\n");

printf("# #\n");

printf("*********************************************************\n");

printf("# #\n");

printf("# 0.词库维护 1.单词预览 #\n");

printf("# #\n");

printf("# 2.单词背诵(中英) 3.单词背诵(英中) #\n");

printf("# #\n");

printf("# 4.查询成绩 5.错词巩固(中英) #\n");

printf("# #\n");

printf("# 6.错词巩固(英中) 7.帮助 #\n");

printf("# #\n");

printf("# 8.退出系统 #\n");

printf("# #\n");

printf("*********************************************************\n");

printf("\n");

}

void menu()

{

int item;

printf(" \n请选择您需要的操作序号(0-8)按回车确认:");

scanf("%d",&item);

printf("\n");

readfile();

switch(item)

{

case 0:

maintain();break;

case 1:

show();break;

case 2:

zytest();break;

case 3:

yztest(); break;

case 4:

list();break;

case 5:

wreadfile();zyretest();break;

case 6:

wreadfile();yzretest();break;

case 7:

help();break;

case 8:

select=0;break;

default:

printf("请在0-8之间选择\n");

}

}

int main()

{

menudisplay();

menu();

printf("\n需要显示菜单界面请输入1,直接选择请输入0:");

scanf("%d",&n);

switch(n)

{

case 1: menudisplay();

case 0:menu();

}

system("pause");

return 0;

}

四、调试,测试及运行结果

调试:

在选择错题巩固功能时,错题文件中的单词无法成功被调出,调试发现错题文件单词总数rnum=0,但实际并不为0

随及对单词背诵函数进行调试,发现错误的单词可以被正确的记录到错题文件中,且错题总数rnum的值是正确的

在经过检查分析后发现在调用错题巩固函数前没有调用读取错题巩固文件函数,添加后程序运行正确,rnum的值正确

测试:

开始中文查询只能查到排序在前的一个单词

对中文查询函数进行代码测试,将是否继续查询移出for循环,使循环遍历所有单词组,得到满足中文意思的所有单词

运行结果:

英中及中英查询:

中英单词背诵:

英中单词背诵:

错题巩固,增强记忆(中英及英中):

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

c语言中的单词的意思及作用,C语言实现单词助手功能相关推荐

  1. c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)

    前言 C语言中的结构体作为一大难点,并且对于需要学习数据结构的同学来说,这个结构是每次上课都会遇到的,所以,我们只有更深层次的理解结构体的知识,才能更好的掌握数据结构 结构体用处 结构体到底有什么用? ...

  2. C语言中文件读写方式r 的作用,C语言文件读写操作主要函数及其用例

    C语言把磁盘文件看成是字符(或字节)的序列,按照存储信息的形式来说,文件主要是有文本文件和二进制文件.文本文件由一个个字符组成,每个字节存放一个ASCII码制,代表一个字符.二进制文件把内存中的数据按 ...

  3. c语言中赋值的时候顿号的作用,C语言运算符及其优先级汇总表口诀

    在看一些字符串问题的时候,经常出现这样的语句, *tmp++ = *p;比如tmp和p是指向数组元素的指针,那么这个语句的执行顺序是怎样的呢?正确的理解是*tmp,将*p赋给*tmp后tmp++.但是 ...

  4. c语言中定义结构体指针的作用,c语言定义结构体指针

    int main() { typedef struct { u8 KeyCurrentIndex;//当前状态索引号 u8 KeyEnterState;//按下[enter]键时转向的索引号 u8 K ...

  5. c语言中数组结尾的0的作用,C语言里面一个数组最后的\0表示什么意思?

    qq_莫非 #include #include #include #include #include #include #include #include #include #define PORT  ...

  6. c语言中不能编译,为什么`int;`可以在C语言中很好地编译,而在C ++中却不能?

    考虑以下程序(请参见此处的现场演示). #include int main(void) { int ;  // Missing variable name puts("Surprise&qu ...

  7. c语言运算符类型转换,C语言中强制类型转换运算符的独特作用

    C语言中强制类型转换运算符的独特作用 在C语言中有一个强制类型转换运算符,它为C语言中的数据类型转换带来 (本文共2页) 阅读全文>> 在进行C++类的设计时,我们常常需要为类对象设计运算 ...

  8. 常见位操作及运算应用举例:1,C语言中位运算符异或“∧”的作用​​​​​​​2,异或运算的作用3,(与运算)、|(或运算)、^(异或运算)

    1 C语言中位运算符异或"∧"的作用: 异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0 ...

  9. c语言中各个符号的意义及作用是什么,C语言特殊符号意义

    初学者可以来学学,包教包会 C语言中像%D &%f符号的作用说一下 最佳答案 C语言中的符号 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算.包括加(+).减(- ...

  10. c语言中函数名可不可以由用户命名,C语言中变量名及函数名的命名规则与驼峰命名法...

    在程序设计中,变量名.函数名.数组名等统称为标识 符.简单地说,标识符就是一个名字.除库函数的函数名由系统定义外,其余都由用户自定义.C语言规定,标识符只能由字母(a-z,A-Z).数字 (0-9). ...

最新文章

  1. iOS 中的CoreImage框架(framework)
  2. 一个网友问的该不该加入公司Share Matching Plan
  3. 程序员你写的代码,被人挖出了黑产
  4. winserver2016 401您无权使用所提供的凭据查看此目录或页面_不用找了,30分钟帮你搞定使用 Spring Cloud 和 Docker 轻松构建微服务架构!...
  5. 【渝粤教育】国家开放大学2018年春季 7140-22T危急重症护理学(本) 参考试题
  6. 金华职业技术学院计算机应用技术分数线,金华职业技术学院录取分数线2021是多少分(附历年录取分数线)...
  7. 《大厂内部资料》Redis 性能优化的 13 条军规!全网首发
  8. Mobile Web调试工具Weinre
  9. Spark Streaming之checkpoint机制
  10. 微信小程序DAU超4.5亿 小程序开发者突破300万
  11. Go:Unresolved dependency
  12. 用户行为序列推荐模型
  13. Python 招聘信息爬取及可视化
  14. 整理了46个python人工智能库,详细介绍(含资源),建议收藏
  15. 住友重机械工业株式会社获得在日本生产和销售基于加速器的BNCT系统和照射剂量计算程序的医疗器械审批许可
  16. prism 修改默认的View和ViewModel映射
  17. P1199(NOIP2010 普及组)三国游戏 题解
  18. Formality学习笔记一:基本概念
  19. Java爬虫之jsoup的使用
  20. respond.php,phpcms v9宽字节注入【phpcms/modules/pay/respond.php】

热门文章

  1. python量化选股策略 源码及论文_常见的十大量化投资策略(附源码)
  2. 2018 ACM-ICPC 中国大学生程序设计竞赛暨丝绸之路程序设计竞赛
  3. 《安富莱嵌入式周报》第307期:开源智能制冷板,Keil MDK6发布时间,编程助手Github Copilot X,Matlab2023,高品质电容式麦DIY
  4. 408数据结构考研笔记——第七章查找(命题重点)
  5. n12.php解密,《信长之野望12革新》param.n12文件修改的一点翻译
  6. jvectormap 中国地图 (包括香港、台湾、澳门)
  7. 关于调试由于mediacodec硬解码时出错导致马赛克出现的弥补办法
  8. 恢复系统强制卸载MSDE
  9. 学做NAR图表:ggraph做网络图
  10. [详解]Twitter开源分布式自增ID算法snowflake,附演算验证过程