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