C言語検定難しすぎ

どうやらC言語検定の結果が発表されたようです。いまさらながら、どんな問題なのか見てみようと思い、サンプル問題に取り組んでみることにしました。最初なので一番レベルが低いとされる3級からの挑戦です。

挑戦した感想ですが、「これが3級?」というぐらい難しい問題でした。それでは順番に見ていくことにしましょう。まずは、問1からです。

問1 C言語の特徴に関する次の記述の正誤を,解答群の中から選べ。

解答群というのは、「正しい」と「誤り」の二つです。マークセンス方式なのでこのようになっています。

(1)全角の空白と半角の空白は,ともに空白文字として扱われる。すなわち,全角の
 空白は半角の空白2 文字分として処理される。

いきなり超難問です。この検定では処理系を特定していませんので、特定処理系がどうであるかについての解答は要求されていないはずです。Cの規格では、全角か半角かなどの規定はなく、どちらも空白文字として扱ってもよいですし、一方だけを空白文字として扱ってもよいはずです。全角の空白が半角の空白2文字分として処理されるという下りも、どんな状況での話なのかがよくわかりません。ソース文字集合が全角の空白であっても、実行文字集合が半角の空白2文字分になるということがあっても、それはそれでよいでしょう。ただ、常にそうかというと、決してそんなことはないので、ここは「誤り」ということにしましょう。

(2)C言語は,コンパイルが不要であるインタプリタ言語である。

例えばCINTのようにインタプリタの処理系もあるわけですが、Cが常にインタプリタとして実装されるかというとそうではないので、ここも「誤り」としましょう。どうやら、常に成り立つかどうかが判断基準のようです。

(3)C言語では一つのコマンド記述が複数行にまたがる場合,必ず行末に'¥'を記述
 しなければならない。

まず「コマンド記述」というのが何なのか、私には理解できませんでした。あと、'¥'とのことですが、それは最低限サポートしなければならない基本ソース文字集合には含まれない文字です。したがって、常に成り立つわけではないので「誤り」としましょう。

(4)C言語では,変数名がABC とabc のように大文字と小文字の違いだけなら,同じ
 変数として識別される。

これまた難問です。Cでは、外部結合の識別子に関しては、大文字小文字が区別されるかどうかは処理系定義です。しかし、常に成り立つかどうかの観点からすれば、これまた「誤り」です。

(5)C言語では,記号定数EOF の値はstdio.h の中において-1 で定義されている。

これは簡単です。EOFは、int型かつ負の値を持つ整数定数式に展開されることが規定されているだけですので「誤り」です。

(6)C言語では,変数名に予約語を使ってはいけないが,予約語を含む名前は使って
 よい。

これは厳しい引掛け問題です。ついつい「正しい」としてしまいがちです。ところが、予約語 _Complexを含む_Complex1_2iのような名前を使ってよいかというと、これは予約済み識別子なので使うことはできません。よって常に成り立つわけではないのでこれも「誤り」です。

(7)C言語は,宣言した配列の要素数を越えた添字で配列要素を参照した場合,コン
 パイルエラーが発生する。

これも微妙な問題です。配列の要素数を越えた添字で配列要素を参照した場合は未定義の動作ですので、静的に検出できるのであればコンパイルエラーになってもかまわないわけですが、やはり常に成り立つわけではありません。よって「誤り」です。

(8)C言語では,多次元配列を使用することができるが,最高5 次元配列までである。

これは簡単ですね。Cでは多次元配列を使用することはできないので「誤り」です。これで問1は終りです。

とりあえず問1だけ答え合わせをしてみることにしました。私の解答は(1)から(8)まですべて「誤り」ですので、答え合わせも簡単です。巻末の正答を見てみると、何と!「正しい」が3つもあるではないですか。正答率62.5%です。これはかなり厳しい結果が出ました。ヘタをすると、3級に合格できないかもしれないと、そんな予感がしてきました。うむむ、C言語検定難しすぎます。

この記事のトラックバックURL:

http://www.kijineko.co.jp/trackback/716