こんにちは。アルロジです。
私はサーティファイが主催する「C言語プログラミング能力検定試験1、2、3級」を取得しているソフトウェアエンジニアです。
C言語は若手の頃から相当苦労して覚えましたし、普段から業務で使ってますので最も自信があるスキルです。
自分の力試しの感覚で資格取得を目指したいと考え、ネットで調べるとサーティファイが主催するC言語の資格試験があること知りました。
新入社員1年目で3級を受験、2年目に2級を受験し、順調に1発合格を成功させていたのですが、1級については3度目の受験でようやく合格できました・・・。
正直、自分が落ちるはずが無いと思っていましたので、最初に落ちた時はビックリしました。
~経緯~
1度目は何も準備せずに撃沈・・・(45点)
2度目は使用したい標準関数が思い出せず不合格・・・(45点)
3度目に合格しました。
たぶん、あまり準備をせずに1級に1発合格できる人は本職がプログラマの方だろうとおもいます。
私はプログラマと同じスピードでコードを書くことができないので苦戦しました。
3度も1級を受験した私ですが、せっかくいい経験をしたので、後輩には同じ失敗をしてほしくないと思い、「コツ」を後輩へ伝授したところ、3/3名が無事1回の受験で合格してくれました。
じゃあ、せっかくなのでもっと多くの方の参考になればと思い、ブログに掲載しておくこととしました。
(参考)サーティファイHP https://www.sikaku.gr.jp/js/cp/
C言語1級合格への道
C言語プログラミング能力検定試験の概要を教えて
合格ラインは60点です。
このページでは1級合格のコツをお教えすることはできますが、C言語のスキル自体は必須です。
対象 | 学習時間の目安 |
3級 | 110時間 |
2級 | 110時間+100時間 |
1級 | 110時間+100時間+68時間 |
サーティファイのホームページによると、上記の時間が学習時間の目安として設定されていますが、たしかにそのくらい勉強しないと取得できないでしょう。
3級は独習Cを「ざー」と一通り課題をやっていれば余裕で合格できます。
2級は独習Cをしっかり理解までしていれば余裕(90点以上取れます)で合格できます。
1級はコツがあります。

コツさえ抑えておけば、C言語1級の合格は決して無理じゃないぞ!
以下のブログで独習Cを使った勉強方法を紹介しています。「先にC言語のスキルを向上させたい!」という方はこちらからどうぞ。
1級合格のための5つのコツ
コツ①:テーマプログラムを覚えて行くこと
コツ②:Borland C++ Compilerのコンパイル方法に慣れておくこと
コツ③:Tera Padの検索方法に慣れておくこと
コツ④:仕様書の作成は最初から諦める
コツ⑤:標準関数はできるだけ記憶しておく
コツ①:テーマプログラムを覚えて行くこと
試験時間内に2つの課題をクリアしないといけないのですが、その場でプログラムを読み始めているようでは遅いです。試験で使用するプログラムは事前にサーティファイのホームページにて公開されています。「どのCファイルに、どの処理が、大体何行目くらいに記載されていたか」が言えるようになっていないと、まったく時間が足らないのです。覚えてさえいれば、「あの処理をあの関数内部にコピーして、ちょっと改造すればできそうだな」という発想が出てきます。イチからハンドコーディングしようと思わないことです。

C、Hファイルは機能毎に分割されているぞ!
課題はほとんどコピーしてちょい改造すればできるけど、全部コーディングしていると時間が足らないぞ!
コツ②:Borland C++ Compilerのコンパイル方法に慣れておくこと
試験会場ではフリーコンパイラのBorland C++ Compilerがインストールされた状態になっています。ビルドエラーになるコードはそもそも採点の対象にならないとされています。よって、提出前には必ずビルドチェックが必須になるわけですが、もちろんCompilerの使用方法については説明がありません。試験官も教えてくれません。コマンドプロンプトでコンパイルする方法を知らない時点で詰みです。(私の3度目の受験のとき、試験会場にコンパイルの方法を知らない受験者がいました。手を挙げて試験監督を読んで「コンパイルの仕方を教えて」と言っているように聞こえました。試験監督も困ってました。あの後どうしたんでしょう・・・。)

分割コンパイルは理解できているか!?
ヘッダーファイルの使い方がわかっていないとビルドエラーが取り除けないぞお!
以下のブログで Borland C++ Compiler のインストール方法やコンパイルのやり方を解説します。

コツ③:Tera Padの検索方法に慣れておくこと
使用できるエディタは「メモ帳」もしくは「Tera Pad」のいずれかです。秀丸やサクラエディタでは使用できるグローバル検索ができないことを知っておく必要があります。以下からフリーでダウンロードできますので、一度使っておくことは重要です。難しい操作は必要ありません。ディスクトップにあるショートカットにドラッグアンドドロップで開くことができます。試験当日もディスクトップにショートカットを置いてくれているハズです。開いて閉じてが面倒なので、私は試験開始とともに全部開いておきました。モニタいっぱいに4分割でソースコードを配置して、どこにどのファイルを開いたかを覚えておけば作業効率アップです。(Tera Padはタブ表示機能が無いので途中でどれがどのコードかわからなくなる危険性があります)
(参考)Tera Pad 公式ホームページ(https://tera-net.com/)

大体の行数を覚えておくことで、Tera Pad でジャンプすることが可能だ!
Tera Padは無料のエディタなので、ぜひ一度使ってみてほしいぞ!
コツ④:仕様書の作成は最初から諦める
これは配点と合格ラインによる作戦になります。
配点は以下です。
問1:コード(45点)、仕様書(5点)
問2:コード(45点)、仕様書(5点)
上記の配点から合格ラインの 60点 を超える組み合わせは、
問1:コード(45点)+問2:コード(45点)= 90点 の組み合わせしかありません。
仮に問1に時間をかけて満点をとったとしても 50点 しかないので合格できません。
問1のコード作成が終わったら、そのまま問2のコード作成に移ればいいわけです。
仕様書作成にかける時間があれば作成したコードのデバッグに時間を使いましょう。
(私は仕様書にはまったく手を振れず、白紙で提出しましたが合格しました)
問1コード | 問1仕様書 | 問2コード | 問2仕様書 | 合計 | 結果 |
---|---|---|---|---|---|
45点 | 5点 | 45点 | 5点 | 100点 | 合格 |
45点 | 5点 | 45点 | 0点 | 95点 | 合格 |
45点 | 5点 | 0点 | 5点 | 55点 | |
45点 | 5点 | 0点 | 0点 | 50点 | |
45点 | 0点 | 45点 | 5点 | 95点 | 合格 |
45点 | 0点 | 45点 | 0点 | 90点 | 合格 |
45点 | 0点 | 0点 | 5点 | 50点 | |
45点 | 0点 | 0点 | 0点 | 45点 | |
0点 | 5点 | 45点 | 5点 | 55点 | |
0点 | 5点 | 45点 | 0点 | 50点 | |
0点 | 5点 | 0点 | 5点 | 10点 | |
0点 | 5点 | 0点 | 0点 | 5点 | |
0点 | 0点 | 45点 | 5点 | 50点 | |
0点 | 0点 | 45点 | 0点 | 45点 | |
0点 | 0点 | 0点 | 5点 | 5点 | |
0点 | 0点 | 0点 | 0点 | 0点 |

コードの出来を上げることに注力した方が効率がいいぞ!
コツ⑤:標準関数はできるだけ記憶しておく
さすが2級の上位級に位置するだけあって、標準関数の使い方を誤ると採点が厳しい印象です。
多種多様な標準関数を覚えておく必要はありませんが、文字列操作関連は必須です。あとは特に以下に注意ください。それぞれの機能が言えますか?
特に気を付けたい標準関数 |
---|
atoi(x) |
atof(x) |
atol(x) |
isupper(x) |
islower(x) |
toupper(x) |
tolower(x) |
strspn(const char *s1, const char *s2) |
strlen(const char *s) |
strcpy(char *s1, const char *s2) |

2級の時に勉強したな!
もちろん1級でも標準関数の使い方は問われるぞ。
これが使えないと致命傷になるから注意な!
効率的に学習するには
サンプルプログラムのポイント
2020年時点ではテーマプログラムは[第5版]になっていますが、内容はあまり変わっていません。
以下は[第5版]を前提に記載しています。
仕様はしっかり理解しておこう!
アスレチッククラブの会員管理プログラムです。
会員情報の管理は入会、計測結果の入力、削除(退会)があるようですね。
幸いにイメージが湧きやすいですよね。
(ですが、実装は試験用にわざと複雑に仕込んであります・・・)
テーブルに注意せよ
仕様書に記載されているとおり、以下のテーブルが存在します。
試験までに以下の3つの観点でまとめておくことをおススメしています。
akicode.tbl |
codedata.tbl |
keisoku.tbl |
keisoku.tmp |
- 各テーブルは初回起動時にどうなっている?
- 各テーブルの先頭アドレスには何が入っている?
- 各テーブルに格納されているフォーマットはテキスト形式?バイナリ形式?
- 追加時にはどこに格納するルール?
運動実績を入力するときに注意せよ
運動1~5の負荷、セット、回数を入力することになりますが、それをよく理解していないとビルド後の動作確認で慌てることになります。
さいごに
私の不合格、合格の理由を自分なりに分析してみました。
下記の画像は不合格、合格時の採点結果です。
何が失敗要因で、どのように対策したのでしょうか。
合否を分けたのは以下の2点だったように思えます。
項目 | 不合格時 | 合格時 |
---|---|---|
コツ①:テーマプログラムの記憶 | 〇 | 〇 |
コツ②:Compilerの使い方 | 〇 | 〇 |
コツ③:TeraPadの使い方 | 〇 | 〇 |
コツ④:仕様書を書かない | 〇 | 〇 |
コツ⑤:標準関数の記憶 | × | 〇 |
大体のところで次に行く | × | 〇 |
不合格のときには問2が0点です。それが敗因でした。
内部処理は完璧に作れたのですが、結果を出力する処理の部分でコケました。
問は「小数点以下も出力せよ」だったのですが、勉強不足で標準関数「atof(x)」の存在を知らず、「atoi(x)」を使っていました。
問1を完璧にデバッグしていた私は問2でデバッグする時間が足らず、どこで小数点以下が落ちているのかを見つける時間が取れずに終わってしまいました。
よって、次回受験のときには、
①標準関数は完璧に覚えておく
②問1を完璧にする必要はない
ことを念頭に受験して、無事に合格することができました。
配点のことは公開されていないので、よくわかりませんが、小問が出来ていても、出力が要件を満たせていない場合には、その問自体が0点になってしまうことがあるようです。
これはコツとして記載することはできませんでしたが、受験の際には念頭に置いて対応いただければ幸いです。
それでは頑張ってください!