课程设计3——电子词典

来源:互联网 发布:淘宝联系客服代码 编辑:程序博客网 时间:2024/06/05 15:50

问题描述:
电子词典(课程设计)
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组Chinese[]和English[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率
文件名称:dictionary
作者:何知令
发表时间:2016年1月7日
输入,所想查找的单词或输入0000退出
输出:找到该单词输出词义,未找到输出查无此词

程序:

/*问题描述:电子词典(课程设计)做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组Chinese[]和English[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率文件名称:dictionary作者:何知令发表时间:2016年1月7日输入,所想查找的单词或输入0000退出输出:找到该单词输出词义,未找到输出查无此词*/#include <stdio.h>#include <stdlib.h>#include <time.h>#include<string.h>int i;//全局变量,做循环计数int seek(int,int,char *);char English[8000][20],Chinese[8000][24];int main(){    int num=0;    FILE *fp;    char word[20];    if((fp=fopen("dictionary.txt","r"))==NULL)    {        printf("the dictionary.txt cannot open!");        exit(0);    }    while(fscanf(fp,"%s%s",English[num],Chinese[num])!=EOF)//从文本文件中读入数据,并将其中用‘\t'隔开的前后两部分分别存入English[num],Chinese[num]两个数组    {        num++;//计算单词总数    }    fclose(fp);//关闭文件(文件操作必须步骤    srand(time(0));    printf("********************************************************************\n");    printf("单词来一发:\n");    printf("%s:  %s\n",English[rand()%num],Chinese[rand()%num]);    while(1)    {        printf("请输入你所想要查找的单词(输入0000结束)");        scanf("%s",word);        if(strcmp(word,"0000")==0)            break;        else        {            int index=-1,first=0,last=num-1;            index=seek(first,last,word);            if (index == -1)            {                printf("查无此词\n");                printf("************************************************\n\n");            }            else            {                printf("该词意思为:%s\n",Chinese[index]);                printf("************************************************\n\n");            }        }    }    printf("**********************感谢使用***************************************\n");    return 0;}int seek(int first,int last,char *word){    while(first<=last)    {        int mid=(first+last)/2;        if(strcmp(word,English[mid])==0)            return mid;//找到时返回单词所在位置        if(strcmp(word,English[mid])>0)           first=mid+1;//若strcmp返回的值>0说明该词若存在应在后半段,往后找        else           last=mid-1;//若strcmp返回的值<0说明该词若存在应在前半段,往前找    }    return -1;//返回-1向main函数传递未找到的信息}


程序运行结果展示:

知识点总结:二分法,字符比较

学习心得:为毛感觉是选的三个中这个是最难的

0 0
原创粉丝点击