程序设计:电子词典

问题及代码

/*烟台大学计算机与控制工程学院
题目描述:电子词典。功能包括:
          输入英语查找汉译以及词性
作者:展一
完成时间:2017年1月4日
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


char English[8000][20],Chinese[8000][20];//储存从dictionary.txt中读取的单词以及中文翻译
int dichotomy(int first, int last, char *s);//二分法查找


int main( )
{
    int m,first,last,index;
    int word_num=0;//计算输入数组的单词总数
    char seed[20];
    printf("                欢迎使用小博士英译汉双语词典\n");
    FILE *fp;
    fp = fopen("dictionary.txt","r");
    if(fp==NULL)
    {
        printf("打开失败!请查看字典源文档所在位置!\n");
        exit(1);
    }
    while(!feof(fp))//一直读到“空”,停止循环
    {
        fscanf(fp, "%s%s", English[word_num], Chinese[word_num]);//将dictionary.txt中读取的单词以及中文翻译输入到数组中
        word_num++;
    }
    fclose(fp);
    printf("请输入编号选择服务:\n");
    printf("1:查询单词\n");
    printf("2:退出\n");
    scanf("%d",&m);
    if(m==2)
    {
        printf("谢谢使用!");
    }
    else
    {
        do
        {
            printf("请输入要查的词:");
            scanf("%s", seed);
            first=0;
            last=word_num-1;
            index=dichotomy(first, last, seed);
            if (index == -1)
                printf("查无此词!\n\n");
            else
                printf("%s 的中文意思是:%s\n\n", seed, Chinese[index]);
            printf("请输入编号选择服务:\n");
            printf("1:查询单词\n");
            printf("2:退出\n");
            scanf("%d",&m);
            if(m==2)
            {
                printf("谢谢使用!");
                break;
            }
            else
            {
                    printf("请输入要查的词:");
                    scanf("%s", seed);
                    int first=0,last=word_num-1;
                    int index=dichotomy(first, last, seed);
                    if (index == -1)
                        printf("查无此词!\n\n");
                    else
                        printf("%s 的中文意思是:%s\n\n", seed, Chinese[index]);
            }
        }while(1);
        printf("欢迎再次使用!\n\n");
    }
    return 0;
}
/*************************************************************
功能描述:二分法查找单词……
输入参数:mid-二分法查找时的中间值,用以与所需查找值比较
     first-二分法查找时最开始的值
     last-二分法查找时最末的值
返 回 值:mid……
其他说明:当first>last时,搜索不到词汇,返回主函数
*************************************************************/

int dichotomy(int first, int last, char *s)//二分法快速查找单词
{
    int mid;
    while(first<=last)
    {
        mid=(first + last) / 2;
        if(strcmp(English[mid],s)==0)
        {
            return mid;
        }
        if(strcmp(English[mid],s)>0)
            last=mid-1;
        else
            first=mid+1;
    }
    return -1;//没有查到单词则返回index=-1
}




运行结果

测试数据1:

m:1  2

seed: cold


测试数据2:

m:1   2

seed:women


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值