C言語の勉強法と勉強において注意すべきポイント

C言語
スポンサーリンク

基本情報でC言語を選択するけど、何から勉強したら良いか分からない・・・

C言語の勉強を進めているけど、難しい・・・

今回はそんな悩みを持っているあなたに、C言語の勉強法と勉強における注意すべきポイントを解説します。

まず勉強法や解説を始める前に、いくつか注意点を挙げておきます。

  • C言語は選べるプログラミング言語の中でも、難しい言語である点を理解している
  • C言語の知識がゼロの場合は2ヶ月、経験ありでも1ヶ月程度の勉強期間を確保する
  • アルゴリズムに苦手意識が無い

貴方は上記のポイントを満たしていますか?

正直言って、上記の前提条件を満たしていないのであれば、他の言語を選んだ方が無難と言えます。

C言語とはそのくらい難しいプログラミング言語であるため、C言語を選ぶ前に、必ず上記のポイントをチェックして勉強を開始してください。

シロ
シロ

C言語は下手に選ぶと、中途半端に勉強を進めて、途中で挫折するというパターンがよくあるよ

チョコ
チョコ

途中で勉強を諦めて、他のプログラミング言語に移行すると、スケジュール的にも精神的にもかなり負担が大きい。

シロ
シロ

だからこそC言語は、安易に選んではいけないプログラミング言語だと覚えておいてね

※今回の記事は作成にあたり、IPA(情報処理推進機構)から配布されている基本情報技術者試験の過去問題を参考・引用・抜粋・編集しております。
スポンサーリンク

・C言語における勉強の順序

勉強の順番

まずはC言語における勉強の順序を確認しておきます。

  1. C言語の基礎知識を学ぶ
  2. 過去問題を解く

基本的には上記の順番で勉強を進めていきましょう。

またC言語の基礎知識とは、以下の内容が該当します。

  • 変数の扱い方
  • データの型や型変換
  • 配列(2次元配列を含む)
  • 各種条件分岐文
  • 演算子
  • for文やwhile文といったループ系の処理について
  • 入力処理と出力処理
  • ポインタ
  • 関数の戻り値とvoid関数について
  • 構造体
  • ヘッダファイルとinclude文の基礎知識
  • 定数とdefine文について
  • ファイルの処理について

最低でも以上の内容を頭に入れておかないと、C言語の問題は解けないため、入念な準備が必要と言えるでしょう。

ちなみにC言語の基礎知識を学ぶ際には、C言語の開発環境による学習をおススメします。

C言語の開発(テスト)環境について
C言語の開発(テスト)環境には、インターネット上で使えるソフト、本格的な開発を目的としたソフト、様々な種類があります。そのためご自分の環境や勉強の状態を加味して、開発環境を選ぶと、勉強が効率的に進められるようになります。

開発環境において実際にプログラムを触って学習を進めると、効率的にプログラムのロジックを理解できるようになるためおススメです。

シロ
シロ

C言語は、理解するのが難しいポインタと構造体が、試験勉強の山かも知れないね

チョコ
チョコ

ポインタと構造体を学習する際には、実際のプログラムを触っていないと、どうしても内容を把握するのは難しい・・・

シロ
シロ

だからこそ開発環境を取り入れて、実際のプログラムで学習を進めるようにしてね

スポンサーリンク

・C言語の注意すべきポイント

・ポインタと構造体は確実に出題されると思っておく

ポインタと構造体

基本情報技術者試験のC言語は、ポインタと構造体の問題が多数出題されます。

そのためポインタと構造体の内容については、内容を把握するだけでなく、使い慣れておくといった勉強が重要と言えるでしょう。

またポインタについては、
複数の書き方を知っておくという点が重要になります。

試験対策としてポインタの書き方を複数把握していないと、試験で知らない書き方が出題された時に、解答が行き詰まるため注意してください。

ちなみにポインタも構造体も、問題を解くために中にどのようなデータが入っているかを把握しておく必要があります。

だからこそポインタと構造体の中身が分からなくなったら、1つ1つのデータを細かくトレースする気持ちでデータを追ってみてください。

根気強く丁寧にデータの内容を調べられるといった点が、問題を正解するカギを握っていると言えるでしょう。

チョコ
チョコ

ちなみにポインタを題材にした問題って、どんなのがあるんだ?

シロ
シロ

そうだね。例えば平成24年秋期に出題された問題において、以下のような選択肢があったよ

平成24年 秋期 午後試験 問9-1

出典:平成24年 秋期 午後試験 問9より抜粋

シロ
シロ

この問題は、ポインタによって何が変数に代入されるか、という内容を把握しておく必要がある問題だね

チョコ
チョコ

なるほど。

シロ
シロ

またポインタは、問題の選択肢として出てくるパターンは少ないけど、解答には高確率で関わってくるから、ポインタの中身をしっかり把握しておく必要があるよ

ポインタがなかなか把握できないという人は、ポインタを「アドレスが保管されているだけ」といったブックマークのように考えてみてください。必要な時にだけブックマークから読みだして利用する、という感じで考え方を簡略化すると、ポインタが分かりやすくなるでしょう。
スポンサーリンク

・過去問題の復習の方が勉強時間を多く必要とする

勉強時間

あと試験まで2週間も時間が有るし、過去問題の復習も楽勝だな!

上記のような考えを持っている人は、注意してください。

何故ならばC言語の勉強というのは、
過去問題の復習の方が勉強時間を多く必要とするからです。

C言語は問題の難易度が高く、内容を理解するのが難しいといった特徴があります。

特に配列の内容を洗い出して内容を理解するのは、初心者にとって難しい作業であるため、1問の問題を解くのに何時間も掛かる、といった状況も覚悟してください。

ちなみに過去問題の復習をする際に
「1回や2回程度で、問題を完璧に理解できると思わないようにする」という事を頭に入れておきましょう。

正直言ってC言語という内容は、同じ問題を3回解いた辺りで、ようやく問題が理解できるぐらい難しくなっています。

だからこそ1回や2回程度の失敗では挫折しないように、粘り強く勉強を進めてください。

チョコ
チョコ

C言語の問題って、プログラムを触ったことの無い人には、明らかにハードルが高いよな

シロ
シロ

まあそれだけ難しい内容ではあるから、試験に合格できれば大きな自信になると思うよ

スポンサーリンク

・配列の要素数は常に注意しておく

配列の要素数をチェック

基本情報技術者試験におけるC言語の問題において、出題がされやすいポイントがあります。

それは配列の要素数です。

だからこそC言語の勉強を進める際には、常に配列の要素数に注意して勉強を進めてください。

また配列の要素数が更新されやすいループや代入といった処理では、配列内容や要素数の読み取りミスが発生しやすいため、プログラムを慎重に読む必要があります。

状況によっては、配列の後ろから内容を読み込んでいるパターンもあるため、注意してプログラムを読んでください。

ちなみに配列を操作する際には、
%やべき乗を使った計算によって、配列の要素数を操作するといった処理もあります。

そのためC言語の勉強をする際には、%やべき乗を使った計算を練習して、配列の要素数として使われているint型の変数の動きを勉強しておきましょう。
チョコ
チョコ

単純にループで配列の要素数を操作するだけでなく、%やべき乗を使って、要素数を操作するパターンもあるんだな

シロ
シロ

うん。だから試験が始まる前に%やべき乗を使った要素数の操作を一度触ってみた方が良いかもね

チョコ
チョコ

知っているだけと触ったことがある、っていう違いは大きいからな

・i++や++iの演算子は処理の順番に注意

演算子

i++と++i、みなさんは2つの演算子について違いをご存知でしょうか?

例えば、2つの演算子をプログラムで書いてみると、

  • i++
    result = i++;
    iをresultに代入してからiを1増やす
  • ++i
    result = ++i;
    iを1増やしてから、resultに代入する

といった形になっています。

基本情報技術者試験において、この「++」増分演算子が度々プログラムに出てくるため、必ず違いを把握しておくようにしましょう。

また「++」だけでなく、「–」の減分演算子も同じです。

どちらもC言語の基礎と言える内容ではありますが、基礎で点数を落とすのはもったいないため注意してください。

シロ
シロ

この「++」の増分演算子と「–」の減分演算子は、ループのカウント変数や配列の要素数操作でよく出てくる演算子だから、しっかり覚えておいてね

チョコ
チョコ

もちろんプログラムで出てくるだけでなく、問題のメインとして出題されるパターンもある。だからこそ処理の内容や処理の流れをキッチリ把握しておこう

・C言語の勉強法について

・プログラムをトレースして理解度を上げる

調べる

ちなみにプログラムをトレースする際に注意すべきポイントは、

  • 変数の内容(構造体を含む)
  • 配列の要素
  • 配列に入っている内容
  • ポインタの内容

といった点になります。

上記のポイントを細かくメモしながら勉強を進めると、プログラムの処理を読む能力が着実に身に付くでしょう。

またプログラムをトレースする力は、
プログラムの実行結果を求める問題を解く時に、重要な要素となります

プログラムの実行結果を求める問題は、正答率が低い難しい問題ですが、正解できれば合格にグッと近づきます。 

他にもプログラムの概要を把握できない場合は、

  • 問題文に書かれているイラストの内容をメモする
  • 問題文に書かれている内容をプログラムに当てはめてみる(結果や内容をメモする)
  • イラストがなければ自分で簡単に図を書いてみる

といったやり方を試してみてください。

頭の中で考えているよりも、遥かに把握しやすくなるためおススメです。

チョコ
チョコ

C言語のプログラムって、アセンブラとか表計算に比べると、使っている変数や配列が多くて大変だよな

シロ
シロ

まあ色々なことができるC言語という言語である以上仕方がないとも言えるけどね

チョコ
チョコ

他のプログラムに鞍替えしても、複雑なプログラムは待っている。腹を括るしかないか…

・プログラムの機能を想像して勉強を進める

想像

基本情報技術者試験に出題されるプログラミング言語の問題を解くためには、プログラムの機能を想像できるかがカギとなります。

なぜプログラムの機能を想像するのが大事なのか?

それはプログラムの最終目的が何をしているか、というポイントを押さえると、1つ1つの機能が把握しやすくなるからです。

そのためC言語の問題を解く際には、プログラムが何をしているか? という把握を重視して問題を解いてみましょう。

ではプログラムの機能を想像する、把握するためには、どのような勉強をすれば良いのか?

ズバリ沢山のプログラムを読み、色々な問題を解いて、経験を積むしかありません。

何故ならば基本情報技術者試験で出題されるような、細かい説明が書いてあるプログラムは、現実ではあまり無いからです。

むしろ基本情報技術者試験における特有のプログラムとも言えるでしょう。

だからこそ過去の基本情報技術者試験で出題されたC言語のプログラムを沢山読んで、経験を積んで本番の試験に挑んでください。

ちなみにプログラムの機能がイマイチ想像できないという人は、プログラムの内容を図に書いてみても良いでしょう。

そしてプログラムをの内容を図に起こす場合は、図に加えて、プログラムで使われている変数や配列を書き足してみてください。

プログラムの内容やロジックが分かりやすくなります。

シロ
シロ

ちなみにC言語の過去問題を復習する量についてだけど、勉強を完璧にするなら、最低でも過去10年20回分の問題を3~4週するぐらいが良いかなと思うよ

チョコ
チョコ

20回分の問題を3~4週って、かなり量が多いな・・・

シロ
シロ

確かに多いかも知れないね。けど基本情報技術者試験の中でも、難しいC言語を選ぶぐらいだから、このくらいの勉強量は覚悟しておいた方が良いと思うよ。

・問題文とプログラムを結び付ける

問題文

基本情報技術者試験の午後試験では、問題文とプログラムを結び付けるという方法が重要です。

もちろんC言語においても、問題文とプログラムを結び付けるという行為は、
問題を解答するまでの時間短縮解答の確実性を上げるといったポイントに繋がるため、確実に押さえておきたい解答方法と言えるでしょう。

ちなみに問題文とプログラムを結び付けるという方法が、有効になった例として、以下の問題の空白「b」と「d」をご覧ください。

平成26年 秋期 午後試験 問9-8
平成26年 秋期 午後試験 問9-1
平成26年 秋期 午後試験 問9-9
平成26年 秋期 午後試験 問9-10
平成26年 秋期 午後試験 問9-2
平成26年 秋期 午後試験 問9-3
平成26年 秋期 午後試験 問9-6
平成26年 秋期 午後試験 問9-7

出典:平成26年 秋期 午後試験 問9より抜粋

今回は必要最小限の内容だけを抜粋していますが、パッと見るだけでプログラムの説明とプログラムがリンクしている、というポイントが分かると思います。

あとはプログラムの説明を解答に当てはめるだけ。

かなり短い時間で問題が解けるようになります。

問題文とプログラムを結び付けるという方法は、C言語の問題を解くのに必要不可欠な方法です。

また問題を解くスピードも上げるため、是非ともマスタ―できるように勉強してください。

チョコ
チョコ

ちなみに問題文とプログラムを結び付けるという方法を身に付けるにはどうしたら良いんだ?

シロ
シロ

うーん。正直言って問題文とプログラムを読み込むしかないかな。あとは問題を慎重に答えるというポイントも重要だね

チョコ
チョコ

サクッと身に付けられるものではなさそうだな

シロ
シロ

まあ仕方がないね。サクッと身に付けられるスキルなら、もっとC言語を選ぶ人も多いだろうし、合格率も高くなると思うよ

スポンサーリンク

・消去法ではなく処理をしっかり追う

ポイント

プログラムがよく分からないし、選択肢を見て、消去法で問題を答えるようにしよう!

基本情報技術者試験のプログラミング言語の問題においてよくある光景です。

しかし上記のような考え方は問題の製作者に見抜かれているため、
高確率で問題を間違える羽目になります。

だからこそ勉強時間の許す限りは、プログラムの処理と解答が合致するまで粘り強く勉強をしてください。

ちなみに勉強時間や試験時間がほとんど無いといった状態でも、ある程度プログラムを読んで当たりをつけてから、消去法を使うようにしましょう。

できる限り問題を自力で考えて、
消去法で問題を答えるのは最終手段だとして覚えておいてください。

チョコ
チョコ

C言語はプログラムにおいて、変数やら配列やら読み取る内容が多いから、どうしても途中で集中力が途切れてしまうな・・・

シロ
シロ

まあどうしてもという場合には、諦めて解説と解答を見ることも重要だよ

・時間制限を決めて問題を解く

制限時間

C言語の勉強を進める際には、
時間制限を決めて問題を解くといった練習も重要です。

何故こんな基本的な話をするかというと、
C言語は難しく、問題を解く時間が長くなりやすいからです。

そのため内容を理解する点に気を取られ過ぎると、いざ試験が始まって、

C言語の問題を解いていたら、試験時間がほとんど無い・・・

なんて状況に陥るため注意が必要と言えます。

だからこそC言語の問題を解いて、プログラムをトレースする行為に慣れたら、制限時間を決めて問題を解く練習をしてください。

午後試験においては問題を正確に解くといった行為も重要ですが、
問題を素早く解くといった点も、試験の点数に直結するため注意しましょう。

チョコ
チョコ

ちなみにC言語の問題は、どのくらいの時間で解くのが目安になるんだ?

シロ
シロ

大体30分ぐらいかな。ただ問題の難易度によってブレが発生しやすい内容だから、他の問題で試験時間を貯金しておいた方が良いよ

・ビット列を使った論理演算も復習

ビット列

C言語において、意外に出題率が高い内容。

それがビット列を使った論理演算です。

そのためC言語の勉強に完璧を期したい場合は、ビット列を使ったOR、AND、XORといった論理演算を練習しておきましょう。

また机上でビット演算をやるだけでなく、
C言語のプログラム上でもビット演算に慣れておく必要があります。

例えば「問題文とプログラムを結び付ける練習をする」の見出しでも解説した以下の選択肢。

平成26年 秋期 午後試験 問9-6
平成26年 秋期 午後試験 問9-7

出典:平成26年 秋期 午後試験 問9より抜粋

選択肢で使われているNewAttrやOldAttr、BitSやBitOといった変数には、ビット列が含まれています。

ビット列を単純に計算比較しているだけだと、上記のような問題に対応できないため、必ずC言語のプログラム上(過去問題でも構わない)でビット列に慣れておいてください。

チョコ
チョコ

C言語とビット列って何だか意外な組み合わせだな。もっと高度な内容を取り扱うのかと思った

シロ
シロ

うーん。むしろC言語という、プログラミング言語の用途の広さが分かる問題と言えるのかも知れないよ。

チョコ
チョコ

なるほど。C言語を勉強しておくと、他の言語に応用が利くという話は、そういった点からも来ているのかもな

スポンサーリンク

・知らない書き方があると思って勉強を進める

調べ学習

C言語の過去問題を復習する際に、心掛けるべきポイントがあります。

それは問題の中に、知らない書き方があるという前提で勉強を進めるといった点です。

基本的にC言語のプログラムというのは、アセンブラや表計算といった初心者向きのプログラミング言語と比べて、
プログラムの書き方の幅が広いといった特徴があります。

プログラムの書き方の幅が広い
→変数や配列の代入といった要素で、色々な書き方ができる

そのため試験で使われているプログラムの中に、自分が知らない書き方があったとしても不思議ではありません。

だからこそ知らない書き方や命令文が出てきたら、
自分で調べて試してみるといった勉強法がC言語では重要になるでしょう。

ちなみに「知らない書き方があると思って、勉強を進める」というポイントについて人によっては、

当たり前のことをなに言ってるんだ?

と思うかも知れません。

しかし「知らない書き方があると思って、勉強を進める」というポイントを知らないで過去問題の復習を始めると、

こんな命令文知らない・・・ 習ってないことまで試験で出題されるの?

あれだけ基礎を勉強したのに、まだ分からない内容が多い・・・

なんてショックを受ける可能性があります。

だからこそ、ある程度「プログラムが分からない」といった覚悟をしてから、粘り強く勉強を進めるようにしてください。

チョコ
チョコ

C言語の過去問題を復習する際には、本当に粘り強さが重要だ

シロ
シロ

問題によっては、C言語の経験者やプログラマーであっても、解くのが難しい問題も出題されるからね

・保険としてアセンブラか表計算を勉強しておく

リスク管理

C言語というプログラミング言語は、
問題によって難易度に大きな差があるといった特徴があります。

例えば簡単な問題ならば、
「問題文とプログラムを結び付ける練習をする」の見出しでも紹介した通り、サクッと数分で問題を答えられます。

しかし難しい問題に当たると、
C言語の現役プログラマーでも答えるのに苦労するぐらい時間が掛かる問題もあるでしょう。

そのためC言語の勉強を進める際には、
保険としてアセンブラか表計算の勉強をしておくことをおススメします。

もちろん人によっては、

C言語の勉強だけでも手一杯なのに、アセンブラの勉強なんか手が回らないよ

と考えを持つ人がいるかも知れません。

しかしアセンブラと表計算は、C言語の問題と学習量に比べたら、問題はかなり簡単で、学習量も少なくて済みます。

むしろC言語の勉強をキッチリ進めている人からすれば、

アセンブラってこんなに簡単なんだ!

と思える可能性もあるため、是非とも覚えておいてください。

ちなみにC言語から、アセンブラか表計算の勉強に移行する場合は、

  • アセンブラ
    ビット計算の復習
  • 表計算
    セルの移動や参照方法

といったポイントを重視して勉強を進めると良いでしょう。

それぞれプログラムにおいて特有のポイントを押さえてしまえば、勉強がスムーズに進むため、必ず覚えておくようにしてください。

チョコ
チョコ

言い方は悪いかも知れないが、逃げ道を作っておくことも本番の試験では重要なのかも知れないな

シロ
シロ

C言語の場合は、難しい問題が出題されるから特にね。そもそも試験合格が第一目標なんだから、別に悪い行為ではないと思うよ

まとめ

今回はC言語の勉強法、勉強する際に注意すべきポイントについて解説しました。

C言語における勉強の順序

  1. C言語の基礎知識を学ぶ
  2. 過去問題を解く

C言語の注意すべきポイント

  • ポインタと構造体の問題は、確実に出題されると思っておく
  • 過去問題の復習の方が勉強時間を多く必要とする
  • 配列の要素数は常に注意しておく
  • i++や++iの演算子は処理の順番に注意

C言語の勉強法について

  • プログラムをトレースして理解度を上げる
  • プログラムの機能を想像して勉強を進める
  • 問題文とプログラムを結び付ける
  • 消去法ではなく処理をしっかり追う
  • 時間制限を決めて問題を解く
  • ビット列を使った論理演算も練習する
  • 知らない書き方があると思って勉強を進める
  • 保険としてアセンブラか表計算を勉強しておく

かなり長くなってしまったため、読むのが辛かったと思いますが、C言語において重要なポイントは詰め込んだつもりです。

そのため是非とも今回読んだポイントを元に、C言語の勉強の糧にして頂ければと思います。

ちなみにC言語の勉強には、開発環境を利用すると、より効率的に勉強が進められます。

以下のページでは、C言語の開発環境について解説しているため、是非とも参考にしてください。

C言語の開発(テスト)環境について
C言語の開発(テスト)環境には、インターネット上で使えるソフト、本格的な開発を目的としたソフト、様々な種類があります。そのためご自分の環境や勉強の状態を加味して、開発環境を選ぶと、勉強が効率的に進められるようになります。

コメント