わさっきhb

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

試験終了

今年度のプログラミング授業の採点を終えました.問題文・解答例・解説・誤答例は,授業Webページで公開しています.
大問1(2択5問と4択10問)の中で,こちらとしては予想していなかった問題が,正答率最下位(60%強)でした.

  • switch〜caseで,どの値(定数式)とも一致しないときの処理を書くには《 break / default 》を用いる.

正解は「default」のほうです.breakは,switch〜caseを途中で抜けるときに使います.
第3回の授業だったので,忘れてしまっていたのかな,と思いつつ,公開した内容を見直したところ,switch〜caseを用いたコードは第7回授業で,しかもそこではdefaultを使っていませんでした.
ともあれ第3回のスライドではdefaultのことを書いているし,授業から離れてCプログラミングとして考えても,breakではどうやっても無理というものです.
正答率が最低になると予想していた問題を,書いておきます.

  • 再帰呼び出しでは,同じ有効範囲の自動変数に対して,《 ヒープ領域 / スタティック領域 / 呼び出しごとに別々 / 呼び出しにかかわらず共通 》のオブジェクトが確保される.

正解は「呼び出しごとに別々」です.正解率は70%ほどで,他にも4択で同じ割合になったものがありました.
授業の小テストでは,「別々」「共通」の2択で出したこともあって,学生さんはテスト準備でチェックしていたのでしょう.思っていたよりも,高くなりました.そういった予備知識がない場合でも,「自動変数」を手がかりに,他の選択肢が間違いと言えます.この出題で,再帰は,あまり重要ではありません*1
大問2は,穴埋めです.前半の4問はforループと変数のパターンをみるものとし,後半の5問は,whileとgetcharを組み合わせて1文字ずつ読み出すコードを取り上げました.
後半の話に「文字列」「ナル文字(ヌル文字,'\0')」は出てきませんので,書いたらバツまたは減点です.「ファイル」も減点です.
EOFは「ファイルの終わり」を意味する定数だけれど,今回の話では,getcharは「入力の終わり」に達したら,戻り値をEOFとします.
それで答案を見ていくと,「エラーのとき」「入力の終わりか,エラーのとき」といった解答を数多く見ました.これらも正解です.
大問3は,snake_caseをsnakeCase,じゃなかったcamelCaseにするプログラムの読解・論述です.しっかり書いてくれた学生にも,字数は少なくても要所を押さえて記述した学生にも,その内容に応じて点数をつけました.
例年,プログラムコードを解答するところで「j≦i」といった書き方をしている答案があり,今回は試験前に減点しますよと言ったところ,今回,この書き方は減ったように思います.しかしそのかわり,iの値を3倍するコードを「i=i×3」とした答案や,「i_pad => iPad」と書いてほしいとろが「i_pad \Rightarrow iPad」になっていたりして,手書き答案ってこういう問題があるんだよなあとも感じました.

*1:とはいえ「再帰呼び出し」を書かなかったら,文を修正しないといけません.スタック領域に同じ名前の変数が複数個できるという図は,再帰を扱った授業で提示したのでした.