Advertisement

程序设计实训报告-电子词典

阅读量:
复制代码
 /*

    
 功能描述:
    
 电子词典:
    
 做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
    
 提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
    
   7. 输入参数:
    
 first表示词典中第一个单词,即:int first=0;
    
 last表示词典中最后一个单词,即:int last=num-1;
    
 num表示单词个数,即:num++;
    
 english和chinese分别表示英文单词和中文单词,即:english[8000][20],chinese[8000][20];
    
   13. 返 回 值:0
    
 其他说明:无
    
 */
    
 #include <stdio.h>
    
 #include <stdlib.h>
    
 #include<string.h>
    
 void open();
    
 int find();
    
 char english[8000][20],chinese[8000][20];
    
 char key[20];
    
 int num=0;
    
 int main()
    
 {
    
     int n;
    
     open();
    
     do
    
     {
    
     printf("请输入你要查找的单词(0000结束):");
    
     n=find();
    
     if(n==0)
    
         break;
    
     else
    
     {
    
         if(n==-1)
    
         {
    
             printf("对不起,没有查找到%s的意思\n",key);
    
             printf("\n");
    
         }
    
         else
    
         {
    
             printf("%s的中文意思是:%s\n",key,chinese[n]);
    
             printf("\n");
    
         }
    
     }
    
     }
    
     while(1);
    
     printf("欢迎您再次使用!\n");
    
     return 0;
    
 }
    
 void open()
    
 {
    
     FILE *fp;
    
     fp=fopen("dictionary.txt","r");
    
     if(fp==NULL)
    
     {
    
     printf("词典打开失败\n");
    
     exit(1);
    
     }
    
     while(!feof(fp))
    
     {
    
     fscanf(fp,"%s%s",english[num],chinese[num]);
    
     num++;
    
     }
    
     fclose(fp);
    
 }
    
 int find()
    
 {
    
     int first=0,last=num-1,index=-1,mid;
    
     scanf("%s",key);
    
     if(strcmp(key,"0000")==0)
    
     return 0;
    
     else
    
     {
    
     while(first<=last)
    
     {
    
         mid=(first+last)/2;
    
         if(strcmp(english[mid],key)==0)
    
         {
    
             index=mid;
    
             break;
    
         }
    
         else if(strcmp(english[mid],key)>0)
    
             last=mid-1;
    
         else
    
             first=mid+1;
    
     }
    
     }
    
     return index;
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~