基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成18年 春期 基本情報技術者 午後 問10
問10   C言語

次の C プログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

入力された英単語を検索し,訳語を表示するプログラムである。

(1) データは,木構造で登録されている。 英単語を構成するそれぞれの文字を構造体 LETTER で表現する。構造体 LETTER のメンバ c には英小文字の文字符号が, メンバ follow にはその文字に続く文字を示す構造体 LETTER へのポインタが, メンバ other にはその文字に代わる文字を示す構造体 LETTER へのポインタが格納されている。 メンバ trans には,p_root が指す根から順にたどってできる英単語に対する訳語の文字列への ポインタが格納されている。 メンバ follow,other,trans には,該当するものがなければ空ポインタ定数(NULL)が格納されている。

例えば,五つの英単語“man”,“main”,“mail”,“mailer”, “name”が登録されている場合の構造は,図1のとおりとなる。

  図1 英単語の登録例

(2) ユーザインタフェースは,図2に示すように,入力された英単語を表示するための 検索語入力領域と,訳語を表示するための訳語表示領域からなる (以後,検索語入力領域に表示されている文字列を,入力文字列と呼ぶ)。

       図2 ユーザインタフェースの例

(3) 入力文字列で始まる単語の候補がなくなった場合は, 検索語入力の途中でも訳語表示領域上に“単語が見つかりません”を表示し,検索を終了する。

(4) ユーザインタフェースに関する次の関数が用意されているものとする。

void displayArea(char *s)

機能:訳語表示領域をクリアした後,文字列 s を表示する。

void clearField()

機能:検索語入力領域をクリアする。

void appendToField(char c)

機能:検索語入力領域に文字 c を追加表示する。

char inputChar()

機能:キーボードから 1 文字を読み込む。返却値は,入力された文字が

   英小文字の場合は文字符号,それ以外の場合は 0 となる。

〔プログラム〕

typedef struct letter {
    char c;                 /* 英単語を構成する文字 */
    struct letter *follow;  /* この文字に続く文字へのポインタ */
    struct letter *other;   /* この文字に代わる別の文字へのポインタ */
    char *trans;            /* 訳語の文字列へのポインタ */
} LETTER;

void displayArea(char *);
void clearField();
void appendToField(char);
char inputChar();

LETTER *p_root;

void searchWord(){
    LETTER *p = p_root;
    char c;
    clearField();            /* 検索語入力領域のクリア */
    displayArea("");         /* 訳語表示領域のクリア */
    while(c = inputChar()){  /* 1 文字入力 */
        displayArea("");
        appendToField(c);    /* 検索語入力領域に入力文字を追加 */
        /* 終端又は文字のいずれかと一致するまで検索 */
        while(( ) && (p->c != c)){
            p =  ;
        }
        /* 文字と一致しなかった(入力文字列で始まる英単語がない)*/
        if( ){
            displayArea("単語が見つかりません"); 
            return;
        }
α→
        /* 入力文字列と一致する英単語がある */
        if(p->trans != NULL){
            displayArea(p->trans);
        }
        p =  ;
    }
}

設問1 プログラム中の に入れる正しい答えを,解答群の中から選べ。

a,c に関する解答群

ア p != NULL          イ p == NULL

ウ p->follow != NULL     エ p->follow == NULL

オ p->other != NULL     カ p->other == NULL

キ p->trans != NULL     ク p->trans == NULL

b,d に関する解答群

ア p->follow       イ p->follow->other

ウ p->other       エ p->other->follow

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

基本情報技術者試験


設問2 入力補完機能を追加することにした。 例えば図1の登録例で,図3 に示すように,初めに“m”を入力した場合は, それに一意に続く“a”を補完して検索語入力領域に追加表示する。 また,初めに“n”を入力した場合は,“ame”を追加表示する。 関数 searchWord の修正は,次の表のとおりである。 表中の に入れる正しい答えを,解答群の中から選べ。

      図3 補完例

処置 プログラムの変更内容
αの部分に追加 while((p->trans == NULL) && ()){   
  p = p->follow;
  appendToField(p->c);
}

解答群

ア p->follow != NULL         イ p->follow == NULL

ウ p->follow->other != NULL    エ p->follow->other == NULL

オ p->other != NULL         カ p->other == NULL

解答 ←クリックすると正解が表示されます

[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]