中の人:金具 Twitter:@Kanagu_Requiem 

C言語プログラミング能力試験 1級に合格しました

2023.07.14
近況報告

こんにちは。金具です。 みなさんはC言語書いてますか?僕は書いてません。

書いてませんが、ついこの前C言語の能力者になりました。

TL;DR

  • C言語プログラミング能力試験 1級に合格しました。
  • 試験が実技試験で面白かったので、C 言語好きな人はチャレンジするといいかも。
合格
合格

発端

資格とか取ったほうがいいのかな〜みたいなことを長らく考えていたんですね。
で、C言語の資格とかないかなとか言って調べてみたら見事にヒット。
なんか面白そうだったので受けてみました。
ちなみに、{基本/応用}技術者試験は絶賛受ける受ける詐欺中

せっかく受けたので、所感をいろいろ書いておこうと思います。

C言語プログラミング能力試験とは?

株式会社サーティファイ が実施している試験です。
サーティファイでは情報処理技術者能力認定試験 (基本情報技術者試験 FE の一部が免除になるらしい[1]) とか、 Microsoft Office の検定とかをやってる[2]みたいですね。

さて、本題のC言語プログラミング能力試験を。
内容は文字通りC言語の基礎知識を問うものです。3級、2級は選択式の問題になっていて、サンプル問題ちらっと見た感じでは、まあ予想できる通りの問題です。
珍しいのは1級で、なんと 実技試験 となっています。
実技試験って何??? おもしろ。

役に立つの?

わかりません。

C言語の習熟度を客観的に示せるという点では、有用なんじゃないでしょうか。(有用だといいなぁ。)

問題形式

1級の試験では、事前にテーマプログラムとその仕様書が渡されます。
仮想のアスレチッククラブのメンバ管理を行うプログラムで、ヘッダファイルとソースファイル合わせて9ファイル、計 1700 行程度のコードです。

試験問題では、このテーマプログラムの仕様変更が求められます。
コードを書き換えて、仕様変更書を書くのを2問。

以上です。

簡単そうに見えてきましたか?
実際、普段からゴリゴリコード書いている人なら簡単だと思います。
逆に、単純な知識問題ではないので、対策をしたらなんとかなる試験ではないと思います。

公式サイトでアカウント登録するとテーマプログラムとサンプル問題をもらえるので、気になる人は見てみましょう。

ポイント

本番の流れ

会場に行くと机にパソコンが置いてあります。
試験開始前には、テーマプログラムの入った USB メモリ、テーマプログラムの仕様書、問題用紙、仕様変更書の解答用紙(罫線の入ったただのレポート用紙)が配られます。
問題は2問あり、解答時間は 150 分です。

また、 USB メモリにはC言語のリファレンス PDF が入っており、標準関数の使い方や書式指定文字列のドキュメントが入ってます。
本番では当然ブラウザ検索はできないので、これは結構心強いね。

C言語の知識について

C言語の習熟度としては、だいたい次の要素が理解できていれば良いんじゃないでしょうか。

  • 配列操作
  • 文字列操作
  • 構造体
  • 簡単なポインタ操作
  • ファイル入出力、ファイル操作
  • ヘッダファイル

逆に、求められない要素はこんな感じです。

  • 難解なポインタ操作
  • 難解な型パズル
  • 関数ポインタ
  • アセンブリの知識

ポインタ操作は比較的簡単なものだけ必要で、ポインタのポインタのポインタの…みたいなゲテモノや、ポインタを使った配列要素参照みたいなものは出てきません。

また、テーマプログラムはかなり読みやすく書いてあるので、難解コードの解読みたいなこともありません。

プログラミングの習熟度について

テーマプログラムは計 1700 行です。
似たような処理が多い上に変更するのは一部のファイルだけなので、数字のインパクトほど大変ではありませんが、それでもまあまあ巨大なコードを扱うことになります。
なので、この規模のコードを触ったことがない人は少しきついかもしれません。
言語はなんでもいいので、複数のモジュールから成るコードを触ったことがあるなら問題ないと思います。

事前対策

テーマプログラムを読んで理解しましょう。
出てくる標準関数で使い方微妙なのが出てきたら復習しておくといいかも。
僕は fseek まわりを復習しました。

また、仕様変更書の書き方を、サンプル問題&解答を見て理解しましょう。
初見だと何書けばいいかわからないですが、コツを掴めば簡単でした。
仕様書に書いてあることで、変更がある部分を丸々書き直せば OK です。

例えば、1から max まで fizzbuzz する関数があって、「最小値を指定できるようにする」という仕様変更だったら、仕様変更書はこんな感じ。
変更ない項目は「変更なし」で端折っても満点来たから、必要な要素がちゃんと入ってたら適当でも良さそう。

仕様変更書の例
書式    /* 変更 */ void fizzbuzz( min, max )
パラメータ /* 追加 */
 
int min: 最小値
int max: 最大値
戻り値 なし
処理概要  /* 変更 */
 
 
 
 
min から max まで、以下の処理を行う。
1. 3の倍数でも5の倍数でもないとき、その数自身を表示する。
2. 3の倍数であり5の倍数でないとき、 Fizz を表示する。
3. 5の倍数であり3の倍数でないとき、 Buzz を表示する。
4. 15の倍数のとき、 FizzBuzz を表示する。

あとは、 TeraPad が使えるようにしておきましょう。
若干リッチなメモ帳なので難しくはないです。快適性はないです。

気になった点

仕様変更書が手書き

仕様変更書は、まともに書こうとするとかなりの分量になるのですが、これはなんと手書きしなければなりません。結構大変。

ただし、サンプル問題によると仕様変更書は配点が 10% しかないので、真っ白でも合格できます。 (合格点は 60% です)
僕は時間余ったのでやりました。

エディタ

本番ではメモ帳、もしくは TeraPad が利用できます。
TeraPad はちょっとリッチなメモ帳です。シンタックスハイライトつけてくれます。
ただし、よくできたエディタほどは快適さはないです。
ストレス忍耐試験だと思って頑張りましょう。

コンパイラ

Borland C++ Compiler 5.5 がコンパイラとして指定されています。
よくわかってませんが、コンパイルは GCC と同じ感じで通ったので多分問題はないと思います。

コマンドプロンプト

当コンパイラの操作にはコマンドプロンプトの知識が必要です。

😩

コマンドプロンプト、基本的なコマンドですら軒並み独特だから苦手。
カレントディレクトリ以外補完してくれないし。

机が狭い

会場の机がかなり狭かったです。
2人用の長机を2人で使う感じでした。
試験中はパソコン操作して、問題用紙開いて、仕様変更書を手書きして、さらには受験票 (A4) を横に置いておかないといけなくて、みたいな感じだったので、結構窮屈でした。
アンケートで要望は出してみたけど、会場が狭かったので改善は厳しいかも。

おわりに

「C言語プログラミング能力試験 1級」と聞くと仰々しいけど、試験自体はかなり簡単でした。
問題文もかなり丁寧に書いてあって、言われたとおりにプログラム書き換えたら終わり、みたいな感じでした。

実技試験を受けたのは初めてだったので、新鮮で楽しかったです。
履歴書の資格欄が運転免許だけだったけど、これで賑やかになるね。

実はこの試験の Java 版もあるみたいだけど、飽きたので多分取りません。
暇な人は、ぜひ。

参考文献

[1] 株式会社サーティファイ『情報処理技術者能力認定試験』 (最終閲覧日: 2023年07月14日)
https://www.sikaku.gr.jp/js/jss/

[2] 株式会社サーティファイ『サーティファイとは?』 (最終閲覧日: 2023年07月14日)
https://www.sikaku.gr.jp/introduction/