【C言語編/全15問】プログラミングスキル検定!

2020年6月15日

C言語編 プログラマー検定

こんばんは、てぃってぃ(嫁)の夫です。

本記事では、プログラミングを初めて10年経つ筆者の独断と偏見により作成した、C言語のプログラミング技術力検定を行います!「我こそは」という方は、ぜひチャレンジしてみてください!

はじめに

筆者は、仕事にする前から趣味で触っていて、こんな事をしていました。

・「ジオシティーズ」で無料サーバーを借りて、自分でhtmlとcssを作ってホームページを作ったり。

・「DirectX」とかを触っていてなんちゃってゲームを作ったり。

・「CGIゲーム」が流行りだしたころ、真似して作ったり。

そんな私も、現在はIT企業の開発現場でプロジェクトリーダーとして仕事していますが、まだまだ現役で毎日のようにプログラムを作っています。

自分でいうのもなんですが、プログラミングにはかなりの自信があります。

そんな私が声高にしていいたいこと。それは。

Twitterのプロフィール欄に、軽々しく「プログラミングを教えます」って書いてる人たち!

ほんとにできんの??あぁん???

いや、ほんとにできる人もいると思います。(笑)

そういう方は否定しません。

でもね、大半が、いざブログを見に行くと、クソみたいな「おすすめのプログラミング教室」やら「C言語入門書」のアフィリエイトリンクがあるだけ

う、うn・・・。はい??? ?

ハァ??舐めてんのか??(#^ω^)wwww

そしてこんなクソみたいなブロガーが「起業家」だの「トップブロガー」とか名乗っていて、フォロワーが数千人といる。なんてしょうもない世の中なんだろうね…。と最近すごく思うわけ。

(起業家とかトップブロガーとかビジネスとか書いている人の8割は詐欺師だと勝手に思っている)

さて、そんな詐欺師の奴らでは書くことのできない、実際に現場で使われている技術をもとに、私が皆さんのプログラマーレベルを測定できる問題を出そうではないかと思い、クイズを作ってみることにしました!

本記事は【C言語編】 です。プログラミング未経験の方でも、ぜひやってみてください!(厳しいかもw)

【C言語編】プログラマー検定

入門編

まずは初級編です。全問正解で、ぎりぎり「C言語を知っている」と言ってもOKです。

第1問

C言語をプログラムファイルに変換するために必要なプログラムをなんというか。

① デバッガ

② コンパイラ

③ テキストエディタ

正解:「②コンパイラ」(反転で正解表示)

エディタ等で書いたソースコードを、コンピュータが理解できる形式に変換する作業のことを言います。これだけC言語に限らないですが、とりあえずこれを知らないとCのモジュールを作れないはずなので、門前払いがてら書きました。(笑)

第2問

「標準出力」に文字列を出力する関数は何か。(stdio.h)

① printf

② fwrite

③ sscanf

正解:「①printf」

基礎中の基礎にして、動作確認に必ず必要となる関数です。「Hello World」が特に有名ですね。C言語に限らず、ほぼすべてのプログラミング言語にはこれに相当する関数が存在します。

第3問

「ファイル」にデータを書き込む関数は何か。(stdio.h)

① printf

② fwrite

③ sscanf

正解:「②fwrite」

ファイルのアクセスも基礎中の基礎なので、ググることなくぱぱっとコーディングできるようになりましょう。こちらもファイルシステムが存在するOSにてほぼすべてのプログラミング言語に同等の処理を行える関数が存在します。。

初級編

続いて初級編。全問正解で、「C言語をやったことある」と言うレベルですね。

第4問

次のうち、繰り返し処理でないものはどれか。

① for

② while

③ if

正解:「③if」

条件分岐が行えます。変数の値が○○ならXX、といった処理分けが行えます。

第5問

構造体宣言を行うための型はどれか。

① FILE

② struct

③ unsigned

正解:「②struct」

絶対に抑えないといけない内容です。

第6問

ビットマスクでOR演算を行う記号はどれか。

① |

② &

③ ^

正解:「①|」

ビットのOR演算が行えます。残り2つはANDとXORです。そろそろ難しいかな?

第7問

ポインター宣言を行う記号はどれか。

① &

② ^

③ *

正解:「③*」

構造体に続き、絶対抑えないといけませんが、脱落者を多く出す最初の難関です。ギターでいうとFコード的な。

第8問

int型配列aの宣言方法はどれか。

① int a<100>

② int a{100}

③ int a[100]

正解:「③int a[100]」

これも絶対に必要な知識です。

中級編

いよいよ中級編。全問正解で、「C言語が趣味・特技です」と言っていいレベルだよ!

第9問

構造体ポインターのメンバ変数のアクセス方法はどれか。

① *変数

② ->変数

③ &変数

正解:「②->」

アロー演算子というものです。使いこなせるようになると可変長リストが作れます。

第10問

ヒープメモリの動的確保を行う関数はどれか。

① malloc

② free

③ semget

正解:「①malloc」

メモリを動的確保する手法です。配列でたくさん宣言するのではなく必要分を追加追加で獲得することが出来ますが、実行中に足りなくなった場合、常に増やし続け内容にする、等色々気をつけないといけないことがあります。

第11問

short型変数aの上位8bitだけ落とす方法はどれか。

① a & 0xff00

② a >> 8

③ a & 0x00ff

正解:「③ a & 0x00ff」

これが分かればビットシフトはおそらく抑えられていますね。

第12問

構造体「struct HOGE hoge」の0初期化で正しいものはどれか。

① memset(&hoge, 0, sizeof(HOGE))

② memset(hoge, 0, sizeof(HOGE))

③ memset(HOGE, 0, sizeof(hoge))

正解:「① memset(&hoge, 0, sizeof(HOGE))」

型、変数、アドレス、サイズ。すべてを理解していればOK。ちなみに第三引数はどっちでもOK。

上級編

ラストの上級編。ここまでついて来ている方はおそらく現職プログラマーか本門の趣味プログラマーでしょうね!全問正解で、「C言語のプロです」と言っていいです。まじで。

第13問

メモリ a[100]を、構造体ポインタ「struct HOGE *hoge」でキャストして参照したい。、

① hoge = (HOGE *)&a;

② hoge = (char *)&a;

③ hoge = (HOGE *)a;

正解:「③ hoge = (HOGE *)a;」

構造体ポインタキャスト。通信処理でめちゃくちゃ使います。

第14問

TCP受信をタイムアウトさせるために必要な関数はどれか。

① recv

② select

③ sock

正解:「② select」

同じく通信処理から出題。商用プログラムで通信相手が誰かわからない(つながっている保証がない)時は特に必須です。

第15問

ネットワーク内の特定グループにパケットを一斉送信する方法を何というか。

① ユニキャスト

② マルチキャスト

③ ブロードキャスト

正解:「② マルチキャスト」

最後通信処理から。3つをどのタイミングで使用するか理解しておきましょう。

おわりに

いかがだったでしょうか。

自身のスキルチェック、確認のためにも、ぜひ何度かチャレンジしてみて、完全に自分の口で説明できて、自分で実装できるようになってみてくださいね!

ご購読、ありがとうございました。