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

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

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

〔プログラムの説明〕

 引数の配列 in に格納された8文字×6文字の文字パターンを,引数 invtype の値 (1〜4)に従って,回転又は反転して標準出力に出力する関数 invert である。

(1) 引数 invtype の値と文字パターンの回転又は反転種別の関係は,表のとおりである。

表 引数 invtype の値と文字パターンの回転・反転種別
 invtype   回転・反転種別  
 1   90 度右回転  
 2   90 度左回転  
 3   上下反転  
 4   左右反転  

(2) 関数 main の実行結果をまとめた文字パターンの印字例を図に示す。

   図 文字パターンの印字例

(3) 回転及び反転操作の手順を,8行6列の配列 dat[8][6] を例として説明する。

 90 度回転では,回転後は行と列の数が入れ替わることになる。

 90 度右回転の場合には,次に示すように先頭の行データ群は,右端の列データ 群に移る。次の行データ群が右から二つ目の列に移り,同様の手順で移動が進み, 最後に最下段の行データ群が左端の列データ群に移る。

  先頭行: dat[0][0], dat[0][1], … , dat[0][4], dat[0][5]
      ↓      ↓      ↓     ↓
  右端列: dat[0][7], dat[1][7], … , dat[4][7], dat[5][7]

 90 度左回転の場合には,先頭の行データ群は,左端の列データ群 dat[5][0], dat[4][0], …, dat[1][0], dat[0][0] に移る。次の行データ群が左から二つ目の 列に移り,同様の手順で移動が進み,最後に最下段の行データ群が右端の列データ群に移る。

 上下反転では,先頭の行データ群は,最下段の行データ群 dat[7][0], dat[7][1], …, dat[7][41, dat[7][5] に移る。次の行データ群が下から二つ目の行に移り, 同様の手順で移動が進み,最後に最下段の行データ群が先頭の行データ群に移る。

 左右反転では,行内で入れ替わるので,先頭の行データ群は,dat[0][5], dat[0][4], …, dat[0][1], dat[0][0] に移る。以降の行データ群も同様の 手順で行内で順序が入れ替わる。

〔プログラム〕

#include <stdio.h>
#define RSZ 6
#define CSZ 8

void invert(int, char[][]);
void invert(int invtype, char in[CSZ][RSZ]){
   int row = RSZ, col = CSZ;
   int i, j;

   if(  ){  /* 行数と列数の入替え */
      row = CSZ;
      col = RSZ;
   }
   for(i = 0; i < col; i++){
      for(j = 0; j < row; j++){
        switch(invtype){
          case 1:     /* 90度右回転 */
               printf("%c", in[CSZ - j - 1][i]);
               break;
          case 2:     /* 90度左回転 */
               printf("%c",  );
               break;
          case 3:     /* 上下反転 */
               printf("%c", in[CSZ - i - 1][j]);
               break;
          case 4:     /* 左右反転 */
               printf("%c",  );
               break;
          default:
               break;
        }
      }
      printf("\n");
   }
}

void main(){
   char src[CSZ][RSZ] = {{'#','#','#','#','#','#'},
                         {'#',' ',' ',' ',' ',' '},
                         {'#',' ',' ',' ',' ',' '},
                         {'#',' ',' ',' ',' ',' '},
                         {'#','#','#',' ',' ',' '},
                         {'#',' ',' ',' ',' ',' '},
                         {'#',' ',' ',' ',' ',' '},
                         {'#',' ',' ',' ',' ',' '}};
   invert(1, src);
   invert(2, src);
   invert(3, src);
   invert(4, src);
}
設問 プログラム中の に入れる正しい答えを, 解答群の中から選べ。

a に関する解答群

ア invtype == 1
イ invtype == 2
ウ invtype == 3
エ invtype == 4
オ (invtype == 1) || (invtype == 2)
力 (invtype == 3) || (invtype == 4)

b,c に関する解答群

ア in[RSZ - i - 1][j]
イ in[RSZ - j - 1][i]
ウ in[i][CSZ - j - 1]
エ in[i][RSZ - j - 1]
オ in[j][CSZ - i - 1]
力 in[j][RSZ - i - 1]
解答 a ←クリックすると正解が表示されます

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

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


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