程序设计实训三 电子词典

题目描述:

做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,

英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,

由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
    提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。

编译的程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 int binary_search(int first,int last ,char *word);//全局变量
  char e[8000][20],c[8000][20];//全局变量,由文件中读入的英文和中文数组
  int num=0;//词库中词汇的实际数目
int main()
{
   char word[20];//要查询的词
//将文件中的数据读入到定义的数组中
   FILE *fp;
   fp=fopen("dictionary.txt","r");//用fopen函数,用输入的方式打开文件
   if(fp==NULL)//判断文件存不存在
   {
    printf("error!cannot open dictionary.txt!\n");
   printf("Please try again.\n");
   exit(1);//函数库中提供的exit(1)结束程序的运行(exit函数是stdlib.h中提供的库函数,用来终止一个进程的执行,代表非正常结束
   }
   while(!feof(fp))//如果读取成功则重复读取
   {
       fscanf(fp,"%s %s",e[num],c[num]);
      num++;
   }
   fclose(fp);//关闭读入的文件
   do
   {
   printf("请输入要查的词(0000结束):");
   scanf("%s",word);//输入要查询的关键词
   if(strcmp(word,"0000")==0)//如果输入0000则退出
    break;
   else
   {
        int first=0,last=num-1;//初始化
          int index=binary_search(first,last,word);//将binary_search的返回值赋值给index
          if(index==-1)
       printf("抱歉,没有找到您所要查询的单词!\n\n");
       else
        printf("%s的中文意思是:%s",word,c[index]);
   }
   }
   while(1);//1为真,无限循环
   printf("谢谢您的使用!再见\n\n");
   return 0;
}
   //二分查找法,返回的是数组中的下标
   int binary_search(int first,int last,char *w)
   {
      int mid;//定义控制查找范围的变量并赋初值
       while(first<=last)
       {
           mid=(first+last)/2;//取中间位置
           //比较要查的词与中间位置的关系
           if(strcmp(e[mid],w)==0)
           {
               //记录位置
               return mid;//返回查找到的值
           }
           else if(strcmp(e[mid],w)>0)
           last=mid-1;//在前半段找
           else
            first=mid+1;//在后半段找
       }
       return -1;//如果first>last则无法寻找
   }



运行结果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值