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

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

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

 

〔プログラムの説明〕
 図形の一部を拡大すると,再び同じパターンの図形が現れる自己相似性をもつ図形を, フラクタル図形と呼ぶ。関数 print_frac は,文字“*”及び空白文字を二次元の 格子状に並べてフラクタル図形を描画するプログラムである。

 

(1) 関数 print_frac が描画するフラクタル図形の例を,図1に示す。


図1 関数print_fracが描画するフラクタル図形の例

 

 @ 深さが 0 の図形は,1行1列の文字“*”から成る図形である。
 A 深さが 1 以上の図形は,深さが 0 の図形に対して,(2) で説明する生成規則を, 深さの回数だけ繰返し適用して得られる図形である。

(2) 深さが d(1以上)の図形は,深さが d−1 の図形を構成する一つ一つの文字を, 文字“*”であるか空白文字であるかに応じて,図2に示す生成規則のとおりに, 文字の行列で置換したものである。


図2 フラクタル図形の生成規則

 

 @ 文字“*”の部分は,生成パターンと呼ぶ文字の行列で置換する。
 A 空白文字の部分は,生成パターンと同じ大きさで全ての要素が空白文字の行列で置換する。

(3) 生成パターンは,二次元の配列変数 pat によって与える。pat の各要素の値は, 空白文字を表す 0,又は文字“*”を表す 1 である。pat の行数,列数及び内容を変更することで, 異なるフラクタル図形を描画することができる。

(4) 関数 print_frac の仕様は次のとおりである。

機能: 深さが d のフラクタル図形を描画する。
引数:  d フラクタル図形の深さ
(5) 関数 print_frac で使用している関数 exists_at の仕様は次のとおりである。 機能: 深さが d のフラクタル図形の i 行 j 列目が空白文字であるか文字 “*”であるかを判定する。

引数:  i 行数(一番上の行を 0 行目とする)
     j 列数(一番左の列を 0 列目とする)
     d フラクタル図形の深さ
返却値: 判定結果( Ø :空白文字,1:文字“*”)

 

 ここで,関数の引数に誤りはないものとする。

 

〔プログラム〕
#include <stdio.h>

int pat[2][2] = {
    {1, 1 },
    {1, Ø }
};
int p_rn = sizeof pat / sizeof pat[Ø];
lnt p_cn = slzeof pat[Ø] / sizeof pat[Ø][Ø];

void print_frac(int);
int exists_at(int, int, int);

void print_frac(int d) {
     lnt i, j, rn, cn;

     rn = cn = 1;
     for (i = Ø; i < d; i++) {
        
     }

     for (i = Ø; i < rn; i++) {
         for (j = Ø; j < cn; j++) {
             putchar(exists_at(i, j, d) ? '*' : ' ');
         }
         putchar('\n');
     }
}

int exists_at(int i, int j, int d) {
    if (d == Ø) {
        retrrn ;
    } else if (exists_at(i / p_rn, j / p_cn, d - 1) == Ø) {
        retrrn ;
    } else {
        retrrn ;
    }
}

基本情報技術者試験


設問1   深さが2の図形と深さが3の図形は次のとおりである。深さが3の図形において, 深さが2の図形の斜線部を置換した部分として正しい答えを,解答群の中から選べ。

 

解答群 ア @        イ A        ウ B        エ C

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

基本情報技術者試験


設問2 配列変数 pat を変更して,深さが3の図形を描画したところ, 次のとおりになった。配列変数 pat の変更内容として正しい答えを,解答群の中から選べ。

 

解答群
 ア int pat[2][3] = {
   { Ø, 1, Ø },
   { 1, Ø, 1 }
};
    イ int pat[2][3] = {
   { 1, 1, 1 },
   { 1, Ø, 1 }
};
 ウ int pat[3][3] = {
   { Ø, 1, Ø },
   { 1, 1, 1 },
   { 1, Ø, 1 }
};
    エ int pat[3][3] = {
   { 1, 1, 1 },
   { 1, Ø, 1 }
   { 1, Ø, 1 }
};
解答 ←クリックすると正解が表示されます

基本情報技術者試験


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

 

a に関する解答群
 ア p_rn += rn;
p_cn += cn;
    イ p_rn *= rn;
p_cn *= cn;
 ウ rn += p_rn;
cn += p_cn;
    エ rn *= p_rn;
cn *= p_cn;

 

b 〜 d に関する解答群  
 ア Ø     イ 1
 ウ pat[i][j]     エ pat[i % d][j % d]
 オ pat[i / d][j / d]     カ pat[i % p_rn][j % p_cn]
 キ pat[i / p_rn][j / p_cn]      
解答 a ←クリックすると正解が表示されます

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

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

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


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