C言語プログラミング能力認定試験2級受験@体験記

C言語プログラミング能力認定試験を受験しました


C言語プログラミング能力認定試験合格を目指します。 実は情報系大学出身なのにプログラムが読めない書けない私でも合格できる?!

受験しようと思った理由

C言語プログラミング認定試験を受けようと決意したのは、昔とあるソフトウエア会社の面接の場で面接官が私に向かって言った言葉がきっかけでした。


面接官が私にどれくらいプログラミング能力を身に着けているか調べる意味で 基本なC言語に関する質問を出題しましたが、 私はその基本的な問題ですら答えることができませんでした。


すると面接官が私に向かってこう言われました。


「プログラミングをやっている人なら誰でも知っていることをできない人間を雇うつもりは無い。」 その言葉で面接が不合格ということが決定しました。言われた時の悔しさは今でも覚えています。


確かに私は情報系の大学出身なのにプログラムが書けないし、読めません。 独学でプログラミングを勉強しましたが、思うように身に付きませんでした。


このまま面接を受けてもまた同じことの繰り返しになる可能性が高いです。 そこで何か打開策がないかと考えて思いついたのが、情報処理関連の資格をとることです。


情報処理関連の資格をとることは、プログラミングができることの証明の一つになるのではないかと思い、 受験を決意しました。


受験勉強の方法

私はC言語プログラミング能力認定試験の受験勉強の方法として主に次の2つのことを中心に勉強しました。


・C言語プログラミング能力認定試験の問題集の問題を解く
・C言語の教本で試験範囲の箇所を勉強する


一つ目の「C言語プログラミング能力認定試験の問題集の問題を解く」については 試験の問題に出題方法に慣れることによって、 出題パターンを予想することが合格への近道になるのではないかと考え、 問題集を購入し勉強を始めました。


しかし問題集を解くだけでは不十分です。


問題集の問題と別の視点での問題が出題されると答えられなくなる場合が多いので、 C言語について知識をしっかりと身につけるべきです。


そのために、「C言語の教本で試験範囲の箇所を勉強する」ということを試みました。


私はあまり教本を買う余裕が無かったので、図書館から借りて勉学をするということを試みました。 初めて受験する方は初心者レベルの教本を選んだほうが良いと思います。




私がお勧めする教本は「世界一わかりやすいCプログラミングの授業」
(出版元:ソシム、著者:Lepton)です。


初心者でも解り易いように図と具体例で説明していますので、 初めてC言語を習う方でも解りやすいと思います。


私はこの本のおかげで関数の仕組みを理解できました。


以前、大学の授業で習ったのですがイマイチ理解できませんでしたが、 そういう意味では私にとってこの本は大いに役に立ちました。


記憶クラス指定子

C言語では変数や関数などを管理するための方法で、記憶クラスというものがあります。


記憶クラスで試験の出題率が高く私が重要だと思ったのは「static」と「auto」という記憶クラス指定子です。


auto(自動変数)
・変数を宣言する時は何もつけずに宣言をする。
例) int a;
・宣言した関数内ではメモリ領域が確保されますが、 関数からの制御が離れた後はメモリ領域を確保することが”できない”。


static(局所変数)
・変数を宣言する時にstatic記憶クラス指定子を付けて宣言をする。
例) static int a;
・宣言した関数内ではメモリ領域が確保され、関数からの制御が離れた後はメモリ領域も確保することが”できる”。
・プログラムが実行を開始する時の一度だけ初期化される。


以上がstaticとautoの違いです。


特に複数の関数でstaticとautoを用いた変数の値を求める問題は出題率が高いので、要チェックです。


また、記憶クラス指定子でもう一つ忘れてはいけないものとして 「extern記憶クラス指定子があります。


私はexternの存在を忘れてしまい、試験に出題されて困ったことを覚えています。
externも出題率が高めなので、externの性質も覚える必要があります。


extern(大域変数)
・変数を宣言する時はstaticと同じようにextern記憶クラス指定子をつけて宣言をする。
例) extern int y;
・externを付けて宣言した変数は、実体が他のファイルにあることを示し、その実体がある場所を参照する。


以上のことが私が記憶クラス指定子の範囲で重要だと思ったことをまとめました。 ここで重要なのは記憶クラス指定子の違いをしっかりと見極めることだと思います。


関数の仕組み

C言語をやり始めた初心者にとって、 最初の難関は関数だと思います。私も大学のC言語の演習科目で最初に躓いたのが関数でした。


まず、関数の仕組みを理解する前に関数に意味を知っておくべきだと思います。


数学にも関数という言葉を使いますが、C言語で使われる場合と意味が違います。 C言語で関数の意味は、「プログラム内で独立して、あることが決められて、まとまった機能を持った小さな単位」のことを言いますが、 これだけ聞いてもイマイチ解らないと思います。


関数の仕組みを理解するためには実際に関数をプログラムで書いてみないと 実感つかめないと思うので、まずは実際に関数を使った簡単なプログラムを書いてみると理解しやすいと思います。


まず、最も重要なものは関数の名前と引数です。


これら二つで関数がどんな処理をするのかある程度予想することができます。 試験で出題されるソースで書かれている関数の名前には特に注目するようにしましょう。


関数が関することが出題されている問題が出された場合、私流の問題の解き方を紹介します。


私は試験問題でプログラムが書かれていたら、 まず最初の数行をじっくり見ます。


関数が使われている場合は必ずプロトタイプ宣言をしていますので、 その行で書かれている関数の名前と引数をチェックします。


その次にメイン関数でその宣言された関数の前後の行の処理をチェックして、 なぜここでこの関数を呼び出さしたのか理由を探ります。


そして、宣言された関数でどうような処理をしたのか、 戻り値はどのようになっているのかを調べます。


こうすることにとってプログラムの全体の動きを理解します。


試験で出てくるような関数は複雑な内容が多いですが、 仕組みはすべて同じなので、関数の仕組みを完璧に覚えましょう。


ポインタ

プログラムを勉強をする上でおそらく誰もが躓くのが「ポインタ」だと思います。 私もポインタの意味が解らずに散々泣かされました。


初めて大学の授業でC言語の演習でポインタを習った時は講師が言っていることがさっぱり意味が解りませんでした。 しかし、私はポインタの意味が解れば初心者レベルを脱出できるので、なんとか理解しようと試みました。


まず、ポインタの意味を知っておくべきだと思います。


ポインタというのは、メモリのアドレスということだけ覚えていれば大丈夫です。 アドレスというのは、場所を示す住所みたいなものと思ってください。


ここから、私のポインタの問題が出題された時の私の考え方を書きます。


まず、ポインタを使われている場所を探します。変数を宣言しているところに 「*」(アスタリスク)が書いている場合がポインタになります。


そして、ポインタされた変数を住所(アドレス)を示された箱と仮定します。 もし、その箱に値を代入する処理があれば、その箱の住所が示す箱(アドレス)に値を代入します。


また、試験では文字列がポインタとして使われているパターンが多いです。 なぜその文字列がポインタとして使われる意味が解ればプログラム全体の動きが見えてくると思います。


以上が私流のポインタの問題が出題された時の考え方です。


ポインタの意味が解れば試験に合格できるとは言い過ぎかもしれませんが、 試験ではかなり重要なポイントです。


ポインタを理解するには時間がかかるかもしれませんが、 ポインタが出題されている問題を繰り返し取り組んで、理解を深めると良いと思います。


プログラムソースの穴埋め問題

C言語プログラムミング能力認定試験で100%必ず出題される問題があります。


それがプログラムソースの穴埋め問題です。


2級の場合は、全8問中2問は出題されます。難易度も高いので、 合格するためにはこのプログラムソースの穴埋め問題をうまく攻略できるかによって 合否が左右するともいえるでしょう。


試験で出題されるプログラムは行数は30〜40行と比較的あまり複雑なものは出題されません。 その一部が穴埋め問題となっていますので、プログラムを読む能力が問われます。


ここで私のプログラムソースの穴埋め問題の解き方を紹介します。


まず、最初の数行をチェックします。関数が使われている場合は、 必ずプロトタイプ宣言をしていますので、関数の名前と関数に使われる引数の変数をチェックします。


そして、次にメイン関数に移ります。 必ず最初の数行でメイン関数で使われる変数の宣言をしています。 ここで私は変数の名前に注目します。


変数の名前からそのプログラムでの役割がなんとなく想像できる変数があります。 例えば、変数の名前が”count”ならば何かの値を数えているかもしれない。 ”sum”なら何かの値の合計を表しているかもしれないと想像つきます。 そのことが問題を解くのに大きなヒントになる場合があります。


また、穴埋めの前後の処理がヒントになる場合もあります。 前後の行に書かれていることを注目して答えを導きます。


以上が私流のプログラムソースの穴埋め問題の解き方のコツです。 最初に書きましたがプログラムソースの穴埋め問題は非常に大切な問題です。


受験日一週間前の勉強方法

C言語プログラミング能力認定試験の受験日の一週間前になった日、 私はいつもの通り机に向かい試験勉強を始めました。 受験日一週間前に私が主に勉強したところを書きます。


・問題集の問題を解く
・文字列操作関数を覚える
・ポインタ


「問題集の問題を解く」については 私が今まで続けていた問題集の問題を解くという勉強方法を継続しました。 試験の問題方式に慣れることが受験に合格する一番の近道だと私は思います。


「文字列操作関数を覚える」は、問題集のプログラムソースの問題に 文字列操作関数が使われている頻度が高いので、 試験に出題される可能性が高いので覚えた方が良いと思います。


特にstrcat(文字列連結)、strcpy(文字列コピー)、 strlen(文字列の長さ)は出題される頻度が高いので意味、 使い方を共に完璧に覚えたほうが良いです。


「ポインタ」は、私がC言語学習にあたって最もうまく理解できていないところだったのですが、 技術評論社の「C言語ポインタが理解できない理由」で学習しました。


ポインタに関することが初心者でも解り易く説明しているので C言語のポインタが良く理解できない方にお勧めです。


一週間前になると緊張しがちですが、 今まで試験に向けて学習してきた自分を信じて合格を目指しましょう。


受験当日の出来事

受験当日、私はC言語プログラミング能力認定試験を受けるために某情報系専門学校に向かいました。 会場を予め下見していたので迷わずに会場に着くことが出来ました。


会場の教室に着き、自分の番号が書かれている席に座り、 時計を見たら試験開始の約30分前だったので、十分に問題集を見直す時間が出来ました。


受験者は私を入れて30人ほどいて、その受験者の年齢層は私と同じような 二十歳前後の人が多く、男女比ではやはり男の人が多いようでした。


しばらくすると試験監督が来て、問題用紙と解答用紙が配られ、 試験が開始されました。


試験開始の合図とともに、早速問題にとりかかりましたが、試験開始早々から問題を解くスピードは上がりませんでした。 正直、問題文の意味が解らなかったり、externの意味を忘れてしまったりと 悪戦苦闘しながら、試験終了時間まで粘りましたが、 結局最後まで答えが出ずに、とりあえず適当に書いて終了することに。


私のC言語プログラミング能力認定試験の初受験の手応えは、 あまり良くありませんでした。


当然、結果も満足な結果を残すことが出来ずに後悔が残りました。


ちなみに試験終了時に問題用紙も解答用紙と一緒に回収されますので、 過去問題が欲しい場合は問題集を買うしか方法はありません。


また、受験当日迷わないようにするために会場を下見することもオススメします。