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

C言語
スポンサーリンク

 

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

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

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

 

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

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

 

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

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

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

 

シロ
シロ

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

チョコ
チョコ

途中で勉強を諦めて、他のプログラミング言語に移行すると、
スケジュール的にも精神的にもかなり負担が大きい。
だからこそC言語は、
安易に選んではいけないプログラミング言語だと覚えておこう

 

ちなみに今回の「C言語の勉強法と勉強において注意すべきポイント」については、
内容が長くなったため、内容を分けて投稿しております。

次回のPart2では、C言語の問題を解く際にどのような練習をすれば良いのか?
というポイントも解説しているため、是非ともチェックしてみてください。

C言語の勉強法と勉強において注意すべきポイント Part2
基本情報技術者試験のC言語は、注意すべきポイントが沢山あります。また問題の難易度に波があるため、逃げ道を作っておくことも重要です。

 

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

 

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

勉強の順番

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

①C言語の基礎知識を学ぶ
②過去問題を解く

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

 

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

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

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

 

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

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

開発環境において実際にプログラムを触って学習を進めるのと、
参考書のみで勉強を進めるのとでは、天と地ほど学習スピードに差が出るため、
C言語の基礎知識を勉強する際には必ず取り入れるようにしてください。

 

シロ
シロ

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

チョコ
チョコ

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

シロ
シロ

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

スポンサーリンク

 

・問題の種類は主に2つ

問題の種類

試験で出題される問題の種類は、主に2つ。

・プログラムの穴埋め
・実行結果を求める問題

となっています。

では、それぞれの問題について少し解説をしていきます。

 

・プログラムの穴埋め

C言語の問題において、最も出題されやすいのがプログラムの穴埋め

1つ例を紹介すると、
平成31年春期試験には、以下のようなプログラムの穴埋めが出題されました。

平成31年 春期 午後試験 問9-2

平成31年 春期 午後試験 問9ー3

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

基本的には1つの穴埋めに対して、1つの命令文や変数、
配列や要素番号を入れるような形となっており、
複数の命令文を入れる、プログラムを丸ごと選ぶというパターンはほとんどありません。

ただし1つの命令文を入れるにしても、
プログラムをよく理解する必要があるため、難易度が低い訳ではないという点に注意しましょう。

 

またC言語の問題においてよくあるのが、
プログラムの変更に伴い、プログラムを置き換えるというパターンです。

プログラムの置き換えに関しても、命令文を穴埋めするような問題が多いため、
プログラムの穴埋めができるかどうかで、C言語の点数が大きく変動するでしょう。

 

ちなみにプログラムの穴埋めに関して勉強をする場合は、
過去問題の復習が勉強の中心になります。

とにかくプログラムに慣れることが、
プログラムの穴埋めにおけるコツであるため、
できる限り過去問題の復習をして、プログラムを読んだという経験を積んでください。

 

シロ
シロ

プログラムの穴埋めで注意するポイントと言えば、
他の問題に影響が出てくるという点だね

チョコ
チョコ

自分が答えた命令文が、そのままプログラムに当てはまるから、
下手をすればC言語全体の問題が総崩れになる可能性もある。
だから慎重に答えるようにしてくれ

 

・実行結果を求める問題

プログラムの穴埋めの次に出題される可能性が高いのが、
プログラムの実行結果を求める問題です。

 

例えば、平成29年春期に出題された問題。

平成29年 春期 午後試験 問9ー1

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

上記の問題は、
マークシート式の試験を採点するプログラムを題材とした問題で、
順不同式の問題を採点する際の正しい実行内容を選ぶ問題でした。

 

基本情報技術者試験で出題されるC言語の問題は、
出力された内容を答える問題、内部の変数を求める問題など、
色々な形式で実行結果を求めるようになるため、プログラムをトレースする力が重要になります。

また実行結果を求める問題は、
C言語の問題において後半で出題されるパターンが多く、
難易度が高くなりやすいといった特徴があります。

先の「プログラムの穴埋め」でも少し話題に挙げましたが、
プログラムの穴埋めによる解答によって、他の問題に影響が出てくるといった点からも、
難易度が高いと言えるでしょう。

 

ちなみに過去問題の処理において分からない点があれば、
C言語の開発環境を利用して、実際にプログラムを動かして理解してください。

もしくは問題に書かれているデータを当てはめて考えてみると、
プログラムの処理が理解しやすいと思います。

 

シロ
シロ

プログラムを実行して処理を追ってみるという方法は、
配列の処理を追う際に有効だと言えるね

チョコ
チョコ

あとは計算が必要な処理とかだな。
特に小数とint型の変数が絡む場合なんかは、
プログラムで実際に見た方が分かりやすいかも知れないな

スポンサーリンク

 

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

調べ学習

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

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

 

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

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

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

 

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

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

と思うかも知れません。

 

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

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

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

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

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

 

チョコ
チョコ

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

シロ
シロ

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

 

 

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

ポインタと構造体

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

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

 

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

何故ならば、C言語の勉強において、
多くの人が躓きやすく手を抜いてしまいがちなポインタこそ、
試験において問題のメインになる確率が高いからです。

だからこそポインタの書き方を知っているかどうかで、
試験の点数に大きな差が出てくると覚えておいてください。

 

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

だからこそ問題において、ポインタと構造体の中身が分からなくなったら、
1つ1つのデータをプログラムのようにトレースする気持ちで、
データを追ってみてください。

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

 

チョコ
チョコ

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

シロ
シロ

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

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

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

シロ
シロ

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

チョコ
チョコ

なるほど。

シロ
シロ

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

 

ポインタがなかなか把握できないという人は、
ポインタをアドレスが保管されているだけ、
といったブックマークのように考えてみてください。

必要な時にだけブックマークから読みだして利用する。
という感じで考え方を簡略化すると、ポインタが分かりやすくなるでしょう。

スポンサーリンク

 

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

勉強時間

 

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

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

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

 

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

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

だからこそC言語の勉強に取り組む際には、
勉強のスケジュールを長めに確保しておきましょう。

 

ちなみに過去問題の復習をする際に心掛けておいて欲しいポイントが有ります。

それは「1回や2回程度で、問題を完璧に理解できると思わないようにする」という点です。

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

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

 

チョコ
チョコ

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

シロ
シロ

そうだね。
アセンブラや表計算といった初心者向きの言語と比べて、
明らかに難易度が高いからね

チョコ
チョコ

でも何でこんなに、C言語の問題は難しく感じるんだ?

シロ
シロ

それはPart2で解説している
「C言語にはアルゴリズムの要素が入る」
といった要素が絡んでくるからだよ。
気になる人は、Part2の解説までチェックしてみてね

 

・問題を解く際に重要なのは、機能を想像できるか

想像

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

そのためC言語の問題を解く際にも、
プログラムの機能を想像する、もしくはプログラムの内容を把握する
というポイントを重視して勉強を進めてください。

 

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

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

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

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

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

 

また基本情報技術者試験における午後試験で出題されるような長文は、
問題を読み慣れているという経験が必要不可欠です。

だからこそプログラムの経験を積むつもりで、
沢山のプログラムを読み、問題を解いて、
プログラムを想像できる力や問題を解くスピードを身に付けてください。

 

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

そしてプログラムをの内容を図に起こす場合は、
図に加えて、プログラムで使われている変数や配列を書き足しておくと、
内容が分かりやすくなるため是非とも試してみてください。

 

シロ
シロ

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

チョコ
チョコ

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

シロ
シロ

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

スポンサーリンク

 

まとめ

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

・C言語における勉強の順序
 ①C言語の基礎知識を学ぶ
 ②過去問題を解く

・問題の種類は主に2つ
 ・プログラムの穴埋め
 ・実行結果を求める問題

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

・ポインタと構造体の問題は、確実に出題されると思っておく
・過去問題の復習の方が勉強時間を多く必要とする
・問題を解く際に重要なのは、機能を想像できるか

では、Part2へ続きます。
C言語の勉強法と勉強において注意すべきポイント Part2
基本情報技術者試験のC言語は、注意すべきポイントが沢山あります。また問題の難易度に波があるため、逃げ道を作っておくことも重要です。

コメント