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

/*
功能描述:
电子词典:
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。

输入参数:
first表示词典中第一个单词,即:int first=0;
last表示词典中最后一个单词,即:int last=num-1;
num表示单词个数,即:num++;
english和chinese分别表示英文单词和中文单词,即:english[8000][20],chinese[8000][20];

返 回 值:0
其他说明:无
*/
#include 
#include 
#include
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;
}

你可能感兴趣的:(程序设计实训报告-电子词典)