程序设计实训三 电子词典

来源:互联网 发布:淘宝卖家设置多个客服 编辑:程序博客网 时间:2024/06/16 04:50

题目描述:

做一个简单的电子词典。在文件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 0