程序设计实训项目三 电子词典

   题目描述

做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组English[]和Chinese[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:

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

/*烟台大学计算机学院 2016
作者: 马春澎
完成日期:2017年1月4日 */
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
char English[8000][20],Chinese[8000][24];//用于从文件中读入的英文数组和中文数组
int num;//实际词汇总数
int binary_search(int first,int last,char *word);//二分查找
int main()
{
    int count1=0,count2=0;
    char word[20];//查找单词
    FILE *fp;
    fp=fopen("dictionary.txt","r");//以只读的方式打开文件
    if(fp==NULL)//测试文件是否打开成功
    {
        printf("文件打开失败\n");
        exit(-1);
    }
    while(fscanf(fp,"%s%s",English[num],Chinese[num])!=EOF)//读取成功,重复从文件中读
    {
        num++;//计算单词总数
    }
    fclose(fp);
    printf("********************欢迎使用********************\n\n");
    do
    {

        printf("请输入您要查找的单词(输入0000退出)\n");
        scanf("%s",word);//输入单词进行查找
        if(strcmp(word,"0000")==0)
            break;
        else
        {
            int index=-1,first=0,last=num-1;//查找的上下界
            index=binary_search(first,last, word);
            if (index == -1)
            {
                printf("查无此词!\n\n");
                 count1++;
                printf("您已查找本词典内没有的词%d次(如果您输入五次词典中没有的词系统将自动退出)\n",count1);
                printf("************************************************\n\n");

            }
            else
            {
                count2++;
                printf("%s 的中文意思是:%s\n\n", word, Chinese[index]);
                printf("您已成功查找%d次\n",count2);
                printf("************************************************\n\n");
            }
        }
        if(count1==5)
            break;
    }
    while(1);
    printf("***************** 感谢您的使用 ******************");
    return 0;
}
/*************************************************************
功能描述:二分查找,查找文件中单词所在的位置
输入参数:first—查找的起始位置
           last—查找的终止位置
           word—需要查找的单词
返 回 值:mid—要查找的单词所在的位置
其他说明:无
*************************************************************/

int binary_search(int first,int last,char *word)//二分查找
{
    int mid;
    while(first<=last)//第一个位置大于等于最后一个位置时跳出循环
    {
        mid=(first+last)/2;//找中间位置
        if(strcmp(English[mid],word)==0)//找到了
            return mid;//查找成功并返回
        if(strcmp(English[mid],word)>0)//将在前半段继续查找
            last=mid-1;
        else //在后半段查找
            first=mid+1;
    }
    return -1;//表示查不到这个词
}

输入  about

输出  about的中文意思是:prep.关于,大约

输入 ade

输出  查无此词!

输入五次 ade 系统自动退出

运算结果


知识点总结

文件的打开的应用,二分查找的应用

学习心得

以前没有使用过打开文件,通过这个程序认识到文件的方便,以后要熟练的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值