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

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

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

〔プログラムの説明〕

(1) 2次元配列を利用して,規則性のある図形を生成するプログラムである。 このプログラムでは,表の行0に示した初期値から, 図に示すフラクタル図形(シェルピンスキーのギャスケットと呼ばれる)を出力する。 ここでは,配列の行数及び列数は33としている。


    図 出力結果

   表 生成される状態値

(2) 2次元配列 s には,状態を示す値(0又は1)が格納される。 上の表に示すように,行0に格納されている初期値から,次の規則によって, 行1以降の行の状態値を生成する。

@ i 行 j 列の状態値を s[i][j] で表す。

A 列0の値はすべて0である。

B s[i+1][j] の値(j≧1)は,s[i][j-1] 及び s[i][j] の状態値を基にして, 次の表に従って生成する。

基となる状態値 生成される状態値
s[i+1][j]
s[i][j-1] s[i][j]
1 1 0
1 0 1
0 1 1
0 0 0

(3) 2次元配列 s の列0及び行 32 の値は,出力の対象としない。

〔プログラム〕

#include <stdio.h>
#define  ALIVE    1
#define  DEAD     0
#define  SZ      33

int stschk( int, int );

main()
{
    int s[SZ][SZ], i, j;
    for ( i=0; i<SZ; i++ ) s[i][0] = DEAD;
    for ( j=2; j<SZ; j++ ) s[0][j] = DEAD;
    s[0][1] = ALIVE;    
    for ( i=0; i<SZ-1; i++ ) {
        for ( j=1; j<SZ; j++ ) {
             = stschk( ,  );
            if (  == ALIVE ) printf( "*" );
            else                     printf( " " );
        }
        printf( "\n" );
    }
}
int stschk( int s1, int s2 )
{
    if ((( s1==DEAD  )&&( s2==ALIVE ))||
        (( s1==ALIVE )&&( s2==DEAD  ))) return ALIVE;
    else return DEAD; 
}

基本情報技術者試験


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

解答群

ア s[i-1][j-1]    イ s[i-1][j]    ウ s[i-1][j+1]

エ s[i][j-1]    オ s[i][j]    カ s[i][j+1]

キ s[i+1][j-1]    ク s[i+1][j]    ケ s[i+1][j+1]

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

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

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

基本情報技術者試験


設問2  関数 stschk の if 文を変更したところ,次のような図形を出力した。 この結果になる if 文を解答群の中から選べ。

解答群

ア if (( s1==ALIVE ) || ( s2==ALIVE )) return ALIVE;

else return DEAD;

イ if (( s1==ALIVE ) && ( s2==ALIVE )) return ALIVE;

else return DEAD;

ウ if (( s1==DEAD ) || ( s2==DEAD )) return DEAD;

else return ALIVE;

エ if ((( s1==ALIVE )&&( s2==DEAD ))||

  (( s1==DEAD )&&( s2==ALIVE ))) return ALIVE;

else return DEAD;

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

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