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

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

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

〔プログラムの説明〕

 プログラムが生成した各けたの数字が異なる4けたの目標数を, なるべく少ない回数の推測で当てるゲーム GuessNumber である。 回答者は,各けたが異なる4けたの推測数を入力し,当たらなかった場合,次の情報を得ることができる。

@ 目標数に含まれていて,けたも一致している数字の個数(以下,Hit 数という)

A 目標数に含まれているが,けたが一致していない数字の個数(以下,Blow 数という)

例えば,目標数が“ 1 6 3 2 ”で推測数が“ 7 6 1 3 ”の場合,“ 6 ”はけたも一致しているので Hit 数が 1,“ 1 ”と“ 3 ”はけたが一致していないので Blow 数が2となる。

(1) 目標数はプログラムが自動的に生成する。生成した数字列は char 型の配列 target に格納される。 推測数を文字列として標準入力から読み込み,char 型の配列 num に格納したうえで照合する。 目標数と完全に一致するまで繰り返す。

(2) 次の関数が用意されている。

   void createRandomNumber(char[] target)

機能: 4けたの目標数を文字列として左のけたから順に配列 target に格納する。 各けたの数字はすべて異なっている。

   int isValidNumber(char[] num)

機能:文字列 num 中の各文字がすべて異なる数字のとき TRUE を,それ以外のとき FALSE を返す。

〔プログラム〕

#include <stdio.h>
#define DIGITS 4   /* けた数 */
#define TRUE  1
#define FALSE 0
void createRandomNumber(char[]);
int isValidNumber(char[]);
void GuessNumber();
int isMatch(char[], char[]);
void GuessNumber(){
   char target[DIGITS + 1];   /* 目標数の保存領域 */
   char num[DIGITS + 1];      /* 推測数の保存領域 */
   int count = 0;             /* 推測回数 */
   createRandomNumber(target);   /* 目標数の生成 */
   do{
      printf("[%d回目] 各けたが異なる%dけたの数を入力してください:",
                                                ++count, DIGITS);
      scanf("%4s", num);
      while(){
         printf("入力が正しくありません。再度入力してください:");
         scanf("%4s", num);
      }
   }while();
}
int isMatch(char target[], char num[]){
   int i, j, numHit = 0, numBlow = 0;
   for(i = 0; i < DIGITS; i++){
      for(j = 0; j < DIGITS; j++){
         if(){
            if(){
               numHit++;
            } else {
               numBlow++;
            }
         }
      }
   }
   if(){
      printf("正解です。\n");
      return TRUE;
   }
   printf("%sは%dHit,%dBlowです。\n\n", num, numHit, numBlow);
   return FALSE;
}

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

a,b に関する解答群

ア isMatch(target, num) == FALSE

イ isMatch(target, num) == TRUE

ウ isValidNumber(num) == FALSE

エ isValidNumber(num) == TRUE

c に関する解答群

ア num[i] == num[j]       イ target[i] == num[i]

ウ target[i] == num[j]     エ target[i] == target[j]

オ target[j] == num[j]

d に関する解答群

ア i != j       イ i < j

ウ i <= j     エ i == j

オ i > j      カ i >= j

e に関する解答群

ア numHit != DIGITS            イ numHit + numBlow == DIGITS

ウ numHit + numBlow >= DIGITS     エ numHit == DIGITS

オ numHit == numBlow           カ numHit > numBlow

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

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

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

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

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


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