わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

試験問題から

昨日,担当科目(Cプログラミングの座学)の試験を実施しました.
今回は出題の構成を少し変えました.大問1を4択10問に減らしました.大問2はforループの穴埋めのみとし,大問3に,小テストでも実施していた,訂正問題を入れました.授業終了時の小テストでは,修正対象を選ぶことも,してもらっていましたが,採点の煩雑さを避けるため,試験では訂正箇所に下線を引いて提示しました.最後の大問は,大問番号が4になった以外は変更なく,プログラムの読解と論述です.
ざっと採点したところ,次の出題が,4沢の中で正解率最低となりました.

  • 《 同一の型の集まりを処理 / 各要素に番号を振って入出力 / ファイルから異なる型の数値を1回で読み出 / 各要素に付けた名前を使ってアクセス 》したいとき,配列ではなく構造体を用いるのが効果的である.

正解は「各要素に付けた名前を使ってアクセス」です.このうち,「各要素に付けた名前」とは,Cの用語で言うとメンバのことです.
これよりも「ファイルから異なる型の数値を1回で読み出」を解答した学生が多かったのですが,これはfprintf関数の説明です.他の選択肢についても書いておくと,「各要素に番号を振って入出力」はどう見ても配列が効果的な場面であり,「同一の型の集まりを処理」は,どちらかというと配列の話(集まりの数が少なければ構造体でも表現可能)です.
…と本記事を書きながら,少し考えてみると,「ファイルから異なる型の数値を1回で読み出」すのは,freadと,構造体のポインタを組み合わせれば,できそうなことに気づきました.freadは授業で扱っていません*1が,教科書には載っています.
Webで探すと,いろいろと見つかりますね:

ということで,「ファイルから異なる型の数値を1回で読み出」も正解とすることにしました.
「ファイルから複数の数値を1回で読み出」としておけば,「同一の型の集まりを処理」と同じく,必ずしも構造体の話ではない(配列にも適用できる)ので,不正解にできたわけですが,試験は終わり問題も公表しているので,もはや変えるわけにいきません.

*1:「バイナリファイルはこの授業の対象外」は,言っていました.