基本情報技術者試験 C言語問題のソースコード(平成28年 春期 )

このページでは平成28年春期 基本情報技術者試験のC言語問題のソースコードを実際に実行できるように変更したものを公開しています。C言語問題対策のためにも、こちらのソースコードをコピペして実際にプログラムを動作させ、どのように動作するのか、正解以外の選択肢を選んだ場合にどのような動きになるか、どう仕様を満たさないかを確認するために使用してみてください。

問題

平成28年春期のC言語問題はIPAの下記ページで公開されています。

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2016h28_1/2016h28h_fe_pm_qs.pdf

問題の解説

問題の解き方の解説は下記ページで行なっています。自分でプログラムの動きが追うのが困難な場合などに参考にしてください。

平成28年(H28)春期 基本情報技術者試験 C言語問題 解き方解説

スポンサーリンク

設問1・設問2・設問3

C言語ソースコード

h28s_c.c
#include<stdio.h>
#include<stdlib.h>

/* 基本パターン */
/* 変更すると出力画像も変わる */
int pat[2][2] = {{1,1}, {1,0}};

int p_rn = sizeof pat / sizeof pat[0];
int p_cn = sizeof pat[0] / sizeof pat[0][0];

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

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

  rn = cn = 1;
  for(i = 0; i < d; i++){
    /* 設問3[a] */
    rn *= p_rn;
    cn *= p_cn;
  }

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

int exists_at(int i, int j, int d){
  if(d == 0){
    /* 設問3[b] */
    return 1;
  } else if(exists_at(i / p_rn, j / p_cn, d - 1) == 0){
    /* 設問3[c] */
    return 0;
  } else {
    /* 設問3[d] */
    return pat[i % p_rn][j % p_cn];
  }
}

int main(int argc, char* argv[]){
   int d;

   if(argc != 2){
     printf("引数に深さを指定してください\n");
     return -1;
   }

   d = atoi(argv[1]);
   print_frac(d);

   return 0;
}

実行結果

引数に深さを指定するとその深さに応じてフラクタル図形が表示されます。深さを4で指定した場合は下記のような図形が表示されます。

また、プログラム中のpat配列の1, 0を変更すると出力される図形が変わります。

動作確認用の変更箇所

main関数追加

動作させるためにmain関数を追加しています。引数として深さを指定できるようにしており、その指定された深さを引数としてprint_frac関数を実行しています。

 

他の回のソースコード

他の回のソースコードについても下記ページで公開していますので、是非ソースコードを使用してプログラムの動きを見てみてください。

基本情報技術者試験C言語問題のプログラムを動かしてみよう(まとめ)

本ページのプログラムについて

プログラムはIPA公開の過去問題から引用し、さらに動作確認できるように必要な部分に関してのみ加工して使用させていただいております。

出典:平成28年度 春期 基本情報技術者試験(FE)試験区分 午後 問9

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です