『C言語及びプログラム設計』実践参考——電子辞書

1922 ワード

戻ってきます:賀先生の授業のリンク
【項目2-電子辞書】
簡単な電子辞書を作る.ファイルtxtには、英漢対照の辞書が保存されており、語彙量は8000個近くあり、英語と解釈の間には't'で隔てられている.プログラムを作成し、ファイルの内容を2つの配列e[]とc[]に読み、それぞれ英語と中国語を表し、ユーザーが英語語を入力し、中国語の意味を表示します.プログラムを実行した後、「0000」の入力が終わるまで、ユーザーが辞書を連続的に調べることをサポートします.
ヒント:ファイル内の語彙はソートされているので、検索時に二分検索法で効率を高めます.
[参考解答]
#include
#include
#include


char e[8000][20],c[8000][20]; //       ,       
int wordsNum=0; //          
int BinSeareh(int low, int high, char *k);


int main( )
{
    char key[20];      //     
    //               
    FILE *fp;
    fp = fopen("dictionary.txt","r");  //          
    if(fp==NULL)       //        
    {
        printf("open error!
"); exit(1); } while(!feof(fp)) // , { fscanf(fp, "%s%s", e[wordsNum], c[wordsNum]); ++wordsNum; } fclose(fp); // do { printf(" (0000 ):"); scanf("%s", key); if (strcmp(key,"0000")==0) break; else { int low=0,high=wordsNum-1; // 、 int index=BinSeareh(low, high, key); if (index == -1) printf(" !

"); else printf("%s :%s

", key, c[index]); } } while(1); printf(" !

"); return 0; } // , int BinSeareh(int low, int high, char *k) { int mid; while(low<=high) { mid=(low + high) / 2; if(strcmp(e[mid],k)==0) { return mid; // } if(strcmp(e[mid],k)>0) high=mid-1; // e[low..mid-1] else low=mid+1; // e[mid+1..high] } return -1; // low>high , }