わさっきhb

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

マルチョイ3

プログラミング座学の第7回授業は過去2年間,演習室でプログラム打ち込みをさせていましたが,今年度は講義室で「おさらい問題」を解いてもらいました.
例年,試験の直前にやっているものです.ただし今回は,第6回までの授業内容*1をもとにしています.試験の直前にも,実施する予定です.
そこで出した多肢選択式(multiple-choice)の問題の中から,個人的に気に入っているものを2つ.

「intchar」「sizeof」「X^Y」「Return」のうち,変数名として使用可能なのは______である.

  1. 1つ
  2. 2つ
  3. 3つ
  4. 4つ

正解は「2つ」で,正解率は66.0%.第3回授業開始の小テストでも,類題を出しています.
使用できないのは,予約語となっている(演算子の授業でも解説した)sizeofと,変な記号の入っている「X^Y」です.
「intchar」のように,予約語をくっつけるのは,問題ありません.また「識別子では大文字と小文字を区別する.例えば,abcとAbcとABCは異なる」という説明に関連させて,「returnはダメ(予約語)だけどReturnなら文法上は問題なし」を解説時に確認しました.
とはいえ,あくまで文法上の話であって,「intchar」も「Return」も,変数名としての使いどころは分からないのですけどね.

a=2およびb=1のとき,式a||bは______と評価される.

  1. 1
  2. 2
  3. 3
  4. 2111

正解は「1」で,正解率は28.3%.ただしこれが一番多い解答でした.言い換えると,選択がばらけました.
必要最小限の知識としては,「論理演算(&&, ||, !)の評価結果は0か1のいずれか」です.まあそれだけではなく,&&と||の「短絡評価」*2も確認しておきたいところ.問題の式では,「『2||何か』を評価すると,2は真なので,『何か』のところは見る(評価する)ことなく,式全体を真,すなわち1と評価する」といった次第です.
他の選択肢を見ておくと,PerlRubyでは,2||1は2と評価されます.それらの短絡評価では,左オペランドが真となる値なら,その値が評価結果となります*3.Cに戻って,2|1ならば,ビット単位のOR演算なので,3と評価されます.「2||1」を評価すると「2111」なるだなんて,いくらなんでもそれは,と思いながら選択肢に入れたのですが,これを選んだ解答がそれなりにあって,驚かされました.


これまでのマルチョイ:2月8日2月28日

*1:トピックとしては,変数の宣言,基本的なデータ型,制御文,演算子,式の評価,配列・文字列,ポインタ.

*2:教科書では「ショートカット判定」となっており,解説スライドにもこの言葉を入れました.ただし訳語としては,短絡=ショートサーキット,近道=ショートカット,です.

*3:もちろん,&&の場合は「偽となる値」です.「ruby -e "puts nil&&3"」と「ruby -e "puts false&&3"」によって,その違いが確認できます.