プログラミング座学の第7回授業は過去2年間,演習室でプログラム打ち込みをさせていましたが,今年度は講義室で「おさらい問題」を解いてもらいました.
例年,試験の直前にやっているものです.ただし今回は,第6回までの授業内容*1をもとにしています.試験の直前にも,実施する予定です.
そこで出した多肢選択式(multiple-choice)の問題の中から,個人的に気に入っているものを2つ.
「intchar」「sizeof」「X^Y」「Return」のうち,変数名として使用可能なのは______である.
- 1つ
- 2つ
- 3つ
- 4つ
正解は「2つ」で,正解率は66.0%.第3回授業開始の小テストでも,類題を出しています.
使用できないのは,予約語となっている(演算子の授業でも解説した)sizeofと,変な記号の入っている「X^Y」です.
「intchar」のように,予約語をくっつけるのは,問題ありません.また「識別子では大文字と小文字を区別する.例えば,abcとAbcとABCは異なる」という説明に関連させて,「returnはダメ(予約語)だけどReturnなら文法上は問題なし」を解説時に確認しました.
とはいえ,あくまで文法上の話であって,「intchar」も「Return」も,変数名としての使いどころは分からないのですけどね.
a=2およびb=1のとき,式a||bは______と評価される.
- 1
- 2
- 3
- 2111
正解は「1」で,正解率は28.3%.ただしこれが一番多い解答でした.言い換えると,選択がばらけました.
必要最小限の知識としては,「論理演算(&&, ||, !)の評価結果は0か1のいずれか」です.まあそれだけではなく,&&と||の「短絡評価」*2も確認しておきたいところ.問題の式では,「『2||何か』を評価すると,2は真なので,『何か』のところは見る(評価する)ことなく,式全体を真,すなわち1と評価する」といった次第です.
他の選択肢を見ておくと,PerlやRubyでは,2||1は2と評価されます.それらの短絡評価では,左オペランドが真となる値なら,その値が評価結果となります*3.Cに戻って,2|1ならば,ビット単位のOR演算なので,3と評価されます.「2||1」を評価すると「2111」なるだなんて,いくらなんでもそれは,と思いながら選択肢に入れたのですが,これを選んだ解答がそれなりにあって,驚かされました.