[基本情報技術者試験]午後問題・C言語の対策法

2020年1月25日

基本情報技術者試験の必修科目にはプログラミング言語があり、その中の一つがC言語になります。

C言語はプログラミングの中でも抽象的な概要が多く、

ラク
ラク
何回過去問を解いても点数が上がらない
カズ
カズ
効率の良い学習方法ないかな~

筆者自身、大学時代にC言語を学習していたにもかかわらず試験ではかなりてこずった経験もあるので、今回は試験特化の対処法を紹介していこうと思います。

キュー
キュー
実務経験があっても慣れていないと解けないからそのあたりも紹介していくで!

基本情報技術者試験のC言語の特徴

最初に、基本情報技術者で問われるC言語問題の特徴を紹介します。

C言語の特徴

C言語はCPUやメモリと言ったコンピュータのハードウェアを意識しながら問題を解いていく必要があります。

アーキクチャ分野の知識も基本情報で問われることになるので改めて知識を補う必要はありませんが、数学的な理解や知識もいるため得意不得意がはっきりと分かれてしまいます。

カズ
カズ
数学・・・苦手だなぁ(´;ω;`)

C言語は基本情報のプログラミング言語の中でも比較的抽象的で難易度が高く、しっかりとした対応をしていく必要があります。

基本情報での出題傾向

C言語の出題傾向としては文字列検索やソート、条件分岐に数式の処理と言ったものから、将棋やチェス、トランプと言ったゲーム等も問わ、必要とされる知識も非常に多く、このポイントだけ押さえて置けば良いと言ったピンポイント学習が難しくなっています。

カズ
カズ
山を貼るのが難しそう

また、問われ方としてはプログラム本文内が穴埋めになっておりそこを埋めていくパターンと、プログラムを読み解いて実行結果を求めるパターンコードの一部を改変するとどうなるかと言った内容を問われることが多いです。

C言語により記述されたサンプルコードは以下のようなものになります。

/********************/
/*  電卓プログラム  */
/********************/
#include 
#include 
void  main( )
{
    char  c[128],c1[128],op;
    int   x=0,y=0,z=0,i=0,j;

    printf("\n電卓(Ver.1.0)\n");
    printf("\n計算式: "); gets(c);      // 計算式入力

    //--1つめの数--
    for( j=0; c[i]>='0' && c[i]<='9'; i++ ) { c1[j]=c[i]; j++; } // 1文字取り出す c1[j]='\0'; x=atoi(c1); // 整数値に変換 //--演算子-- op=c[i]; i++; // 演算子を取り出す //--2つめの数-- for( j=0; c[i]>='0' && c[i]<='9'; i++ )
     { c1[j]=c[i]; j++; }               // 1文字取り出す
    c1[j]='\0'; y=atoi(c1);             // 整数値に変換

    //--計算実行--
    switch( op )
      {
        case '+': z=x+y; break;
        case '-': z=x-y; break;
        case '*': z=x*y; break;
        case '/': z=x/y; break;
        case '%': z=x%y; break;
        default : printf("\a");         // ブザー
      }

    printf("\n答: %d\n",z);
}

参照:https://saeki-ce.xsrv.jp/C_src/dentaku01.html

スポンサーリンク

C言語における問題の解き方

C言語では非常に高い読解力が求められるため、解くときの手順をしっかりと押さえて置く必要があります。

また、本番では他の問題もぱっと見てC言語にするか他を選ぶかをとっさに判断できる判断力を付ける必要もあります。

問題の全体を見て解けるかどうかを確認する

まずは問題の全体をざっと俯瞰し、自分の知識で解けるかどうか確認しましょう。

C言語問題は難解な上に長文となる傾向もあり、高得点を取れてもそこに時間がかかりすぎてしまっては問題です。

他の例えば表計算の問題やPythonなどをざっと見てそちらの方が解けそうだ、時間がかからなさそうと感じたら切り替えていきましょう。

カズ
カズ
制限時間は限られてるから時間配分も気にしないとね!

コードの中に分からない処理がないかどうかを確認

問題の概要をざっと見て解けそうだったら次にコードの中を見てみましょう。

例えば

カズ
カズ
この関数の処理が分からない
ラク
ラク
コードの流れを追ってみたけど何をしているのか分からない

と言った具体的な流れが分からなければ、全体の概要ややりたい実装内容を把握できたとしても問題を解くことは難しいでしょう。

また、少し疑問に思った点や若干理解できなかったと言ったあやふやな点が少し見つかったらそこにチェックしたり計算結果を書いておいたりしてメモを残しておくことも忘れてはいけません。

穴埋め問題では実際にその値を入れて整合が取れているかチェック

空欄を埋める穴埋め問題ではコード内に選択肢のコードを入力した後に整合性が取れるかどうかをしっかりとチェックしましょう。

特に問題文に立ち返ることで問題文中の処理と異なった動作や値になってしまう可能性もあり間違いに気づけることもあります。

ただ問題文を最初から全部見直してしまうと膨大な時間もかかってくるので、値や最終的な動作と言った問題の核となる部分だけを確認するようにしましょう。

カズ
カズ
どうしても解けなかったらカンに頼るしかないけど、選択肢を減らせるかどうかだけでもかなり変わってくるよ!

コードをじっくり読んで処理を押さえていく

全体の概要をしっかりとつかみ、コードを読んでも分からないところがなさそうだと感じたらしっかりと処理を押さえていきましょう。

その際単純に読み流しするのではなく、それぞれの変数に対してどのような値が代入され、どのように変わっていくかと言った流れを押さえていくことが重要です。

特に値を求める問題ではこの作業が出来ないと点数が取れないので、具体的な数値を入れて動いていく過程を押さえていきましょう。

ラク
ラク
コードや問題を読んでも曖昧になってしまう場合は実際に変数や配列にどんな値が入っているか書き込むのも大事だぜ!

処理の流れにも注目

C言語で注意するべき点は処理の流れに注目することです。

例えばJavaScriptの様に上から読み込んで下へと処理が進む言語と異なり、C言語は1行目のコードを読み込んだら今度は10行目に処理が移り、今度また2行目のコードに戻ると言った動作をすることもあります。

この場合1行目→2行目→3行目・・・と素直に読み進めていくと意味が分からなくなってしまいます。

ラク
ラク
国語や英語みたいな文章じゃないからわからなくなっちまうよな

分からない問題はバッサリ飛ばす

C言語の問題は中には難問もあり、100%を狙って1問1問に時間をかけすぎると時間が足りないこともあります。

順番に問題を解いていかないと後の問題も分からなくなるのではないかと思うかもしれませんが、まずC言語はその中で大問1~3問に分かれ、さらにそれぞれが小問1~3に分かれています。

そしてそれぞれの問題は解き方が独立しているので、大問1を飛ばしても2は解ける、なんてこともあります。

キュー
キュー
さっきも書いた通り、1は穴埋め、2は処理の流れを追う、とかだと考え方も違うからもう片方を理解していなくても解けるで!

また、プログラミング問題と言えども穴埋めです。その為ある程度選択肢を絞って後はカンで答えるという事も可能です。

カズ
カズ
例えばここは絶対数値が入る、ここは構文が入る、くらいの判断は簡単だし、そこまでの絞り込みが出来たら確率はぐっと上がるね!

C言語問題で押さえるべきポイント

基本情報技術者試験のC言語問題で特に押さえて置くべきポイントをいくつか紹介します。

演算子

まずは演算子です。

演算子だけで数千文字記事が埋まってしまうのでざっくりと概要だけ説明しますが、二つの値があったときの比較や代入演算子については押さえておきましょう。

カズ
カズ
“="と"=="でも全然違う処理になっちゃうらしいよ!

詳しい解説記事は以下をご覧ください。

配列

同じデータ型で揃えて複数の値をまとめて扱いたい場合に配列を使うこともあり、こちらも基本情報ではよく問われます。

定義としては以下の様に行います。

// 配列の宣言
int intArray[3];
 
// 配列を使わない場合の宣言
int num1, num2, num3;
ラク
ラク
配列はよく箱をイメージすると良いって聞くな!

体的な用法は以下の記事をご覧ください。

条件分岐

まず、条件分岐は毎回当たり前のように問われる問題です。

与えられた変数が一定条件より大きいか小さいかの判断をしっかりできているかどうかが問われます。

if( a <= i){
省略
}else{
省略
}

と言ったif、else文(条件を満たせばif{}内の処理を行い、異なった場合else{}内の処理を行う)や、

switch(式){
  case 定数1:
    省略
  case 定数2:
    省略
  default:
    省略
}

と言ったswitch文があります。

いずれも重要ポイントで真っ先に対策すべき内容なので真っ先に押さえておきましょう。

if文else文に関しては

Switch文に関しては

をご覧ください。

ループ

ループ処理も頻繁に問われる内容であり、

for (i = 0; i < a; i++){
省略
}

と言ったiを加算して条件を超えるまで実行するforループや

while(i < a) {
    処理
}

と言ったaがi以内に収まっている間はループを行うwhile文があります。

キュー
キュー
似たような処理で、A処理→B処理→C処理→・・・って処理をさせたいとき、forループで書けば数行で終わることもあるで

こちらもfor文に関しては

を、while文に関しては

をご覧ください。

関数

C言語では関数と呼ばれる処理も把握しておく必要があります。

ラク
ラク
数学の関数とは違うのか?

具体的には

int sample(int x,int y){
  省略
  return ;
}

と言ったように、独自の処理を用意しておき、それをいつでも呼び出すことで何回も利用できるように定義しておける便利なものです。

こちらも詳しくは以下の記事をご覧ください。

ポインタ

C言語ではポインタと呼ばれる変数のアドレスを記憶する変数についても学習していかなければいけません。

カズ
カズ
なんかややこしそう・・・
キュー
キュー
実際ポインタで躓く人も多いからなぁ

ポインタを使う事でアドレス先の値を取得したり変更することが可能となります。

int main(){
    int a = 0;
    int* pa;//ポインタを宣言

    pa = &a;//ポインタにアドレスを代入する
    *pa = 1;//aのアドレスに1を代入
    return 0;
}

と言った具合ですね。

こちらも詳しくは以下を参照ください。

基本情報のためのC言語の学習法

具体的にどのような知識があると良いかを深堀して紹介させていただきました。

更にここでは、基本情報技術者のC言語に特化して対策するための学習教材などを紹介していきます。

C言語を学べるテキスト

まず、テキストから紹介していきます。

例えば市販のC言語テキストなどはかなり分厚く、それを読むだけで数か月かかってしまい非効率です。

そのため基本情報に特化したC言語のテキストに絞って選ぶようにしましょう。

基本情報技術者 らくらく突破 C言語

created by Rinker
¥2,838 (2020/07/09 07:49:26時点 Amazon調べ-詳細)

まずは基本情報技術者のC言語テキストの中では定番となっている1冊です。

試験対策の為章末問題や過去問を多く取り扱っており網羅性も高く必要な情報は丁寧にまとめられているので有力な一冊です。

ラク
ラク
網羅性や演習量を重視するならこの1冊だな!

C言語の切り札

C言語の切り札では文法と問題をそれぞれ別で解説した2部構成となっています。

C言語を全く知らない人でもわかるような丁寧な解説を目指しており、コード1行ごとにかみ砕いて解説されています。

カズ
カズ
問題量よりも1問1問の丁寧な解説が欲しい人はコッチ!

C言語を学べる通信講座

C言語を学べる通信講座も実は用意されています。

スクールによってはピンポイントでこの言語だけをお得価格で受講することもできるので紹介させていただきます。

資格の大原

本気になったら大原

資格の大原は全国展開する大手スクールになりますが、午前免除試験や受験経験者を対象とした講座も開いており、通信講座だったり通学講座だったりと多様な受け方が出来る点が大きな魅力です。

19,000円でプログラミング特化の講座を受講することもでき、ピンポイントでC言語特化の授業を受けることが可能です。

どうしてもプログラミングが攻略できないと言う方は是非利用してみて下さい。

大原の講座について、さらに深く踏み込んで紹介した記事もあるので気になる方は是非ご覧になって下さい。

ラク
ラク
サンプルテキストや口コミ情報もあるから是非参考にしてくれ!

スタディング

STUDYing 可能性を実現に

通信講座に特化した講座としてはスタディングが挙げられます。

こちらはC言語特化コースはありませんが、元々安いと言った特徴があり午前午後全てひっくるめて35,980円となっています。

カズ
カズ
他のスクールの平均が10万近いから破格だね♪

全体的に苦手、これから基本情報を勉強すると言った方で特に通学に拘らない場合はSTUDYingも非常におすすめできます。

カズ
カズ
合格出来たら5,000円分のアマギフ券もあるよ!

侍エンジニア塾

短期間で基本情報に受かるため!と言った目的だと少し外れますが、プログラミングをしっかりと学んで資格取得後就職にも活かしたいと言った方はプログラミングスクールを利用するのもアリです。

基本情報を取得される方の中には転職してプログラマやSEになりたいと言う方も多いかなと思いますが、そうなってくると資格で学んだ付け焼刃だけのプログラミング技術では太刀打ちできません。

実務経験をいきなりつけろと言うのも難しいですが、講師の方とマンツーマン形式で受講できる講座で何か成果物を作れれば資格と相まって転職にも活かせることは間違いありません。

実際筆者も侍エンジニア塾と呼ばれるスクールでお世話になりましたが、独自でオーダーメイドカリキュラムを設定し学習することもできるので欲しいスキルを取得することが出来ておすすめです。

実際に筆者が体験したときの内容や成果物については以下の記事で触れているので、こちらも興味があればぜひ覗いてみて下さい。

ラク
ラク
マンツーマンで学べるのは数あるプログラミングスクールの中でもここだけだぜ!

まとめ

今回は基本情報技術者試験のC言語についての特徴や対策方法について紹介させていただきました。

試験対策の中では難しい方ですが、需要も高く、またプログラミング全般における大切なことを多く学べる言語です。

習得することで資格取得後も大きな武器になることは間違いないので、しっかりと学習してモノにしましょう!

他の言語に関しては以下で触れています。

スポンサーリンク