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

来源:互联网 发布:程序员开发软件 编辑:程序博客网 时间:2024/05/18 22:40

   题目描述

做一个简单的电子词典。在文件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 系统自动退出

运算结果


知识点总结

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

学习心得

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

0 0
原创粉丝点击