课程设计<3>---电子词典

Copyright (c) 2016,
烟台大学计算机与控制学院 All ringts reserved.
文件名称:电子词典
作 者:王兴振
完成日期:2016年1月5日
版 本 号:未知

题目描述:

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

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

英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:


输    入:

  要查找的英文字母。

输    出:

  英文的汉语意思,没有则显示查无此词。

样例输入:

dog

样例输出:

n.狗

提       示:

  文件中的词汇已经排序,故在查找时,用二分查找法提高效率。

答        案:

/*************************************************************
功能描述:为歌手大奖赛计分
输入参数:i-单词数量。
     e,c-英文数组,对应英文数组。
     fp-文件指针。
           mid,low,high-中值,低限,高限。
返 回 值:单词对应汉语。
其他说明:无
*************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int f(char *a);
int i;//单词个数。
char e[8011][20],c[8011][20];//全局变量,保存英文和对应汉语。
int main()
{
    int x;
    FILE *fp;//文件指针
    if((fp=fopen("book.txt", "r"))==NULL)
    {
        printf("文件打开失败!");
        exit(0);
    }//判断文件打开是否成功。
    char a[20];
    for(i=0; (feof(fp)==0); i++)
    {
        fscanf(fp,"%s%s", e[i],c[i]);
    }
    while(1)
    {
        printf("请输入要查找的词(输入0000退出):");
        gets(a);
        if(strcmp(a,"0000")==0)
            break;
        x=f(a);
        if(x==-9)
            printf("查无此词!\n");
        else
            printf("%s的中文意思是:%s\n", a,c[x]);
    }
    return 0;
}
int f(char *a)//二分查找。
{
    int high=i-1,low=0,mid;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(strcmp(a,e[mid])==0)
            return mid;
        if(strcmp(a,e[mid])>0)
            low=mid+1;
        if(strcmp(a,e[mid])<0)
            high=mid-1;
    }
    return -9;
}


猜你喜欢

转载自blog.csdn.net/wxz1814/article/details/54089362