アルゴリズムとプログラミング
代入
「x ← x+1」で、右辺のxは更新前と更新後のどちらの値か。
- 更新前の値
右辺の式を現在の値で計算してから、結果を左辺の変数へ格納する。同じ変数が両辺にあっても等式を解く処理ではない。
正答:更新前の値
条件分岐
if・elseifで複数の条件が真になり得るとき、どの分岐を実行するか。
- 上から調べて最初に真になった条件の分岐だけ
最初に真になる条件を見つけたら対応する処理を実行し、後のelseif条件は評価しない。独立した複数のifとは異なる。
正答:上から調べて最初に真になった条件の分岐だけ
繰返しの判定位置
whileとdoで始まる後判定繰返しでは、初回の処理を実行する前の条件確認がどう違うか。
- whileは先に確認し、後判定繰返しは先に処理する
前判定は初めから条件が偽なら本体を一度も実行しない。後判定は本体を実行してから条件を確認するため、少なくとも一度は実行する。
正答:whileは先に確認し、後判定繰返しは先に処理する
剰余演算
非負の整数を正の整数で割るとき、modが表すのは商と余りのどちらか。
- 余り
modは剰余算を表す。例えば割り切れる場合の余りは0であり、商とは区別する。この問いは非負の整数と正の除数に限定する。
正答:余り
論理演算の優先順位
括弧がない擬似言語の式では、andとorのどちらを先に評価するか。
- and
演算子表では論理積andが論理和orより高い優先度。式を左から無条件に順番に計算する規則ではない。
正答:and
二次元配列
二次元配列の「data[r, c]」では、rとcはそれぞれ何を表すか。
- rが行番号、cが列番号
二次元配列は行番号、列番号の順で要素を指定する。内側の波括弧で囲まれた部分は1行分の内容である。
正答:rが行番号、cが列番号
配列要素の更新
配列の「data[i] ← 値」という代入は、配列全体と要素iのどちらを更新するか。
- 指定された要素i
角括弧内で指定した要素を代入先にする。配列全体の全要素を同じ値へ置き換える指示ではない。
正答:指定された要素i
代入の順序
x=6、y=8とする。x ← y、y ← xをこの順で実行する。二つの値を交換するつもりだったが、終了時の(x,y)はどうなるか。
- (8,6)
これは交換できた結果だが、元のx=6は最初の代入で失われている。
- (8,8)
最初の代入でxは8。次は更新後のxをyへ入れるので、両方8になる。元のxを残すには別の退避が必要。
- (6,8)
これは更新前の組であり、二つの代入を実行した結果ではない。
- (6,6)
最初にxへyの8を入れるため、6のままにはならない。
正答:(8,8)
条件分岐の順序
得点は85。区分を未設定で開始し、if(得点≧60)で区分←「合格」、elseif(得点≧80)で区分←「上位」、elseで区分←「再挑戦」とする。後で区分を変える処理はない。得られる区分はどれか。
- 上位
80以上でも、先の真の条件を実行した時点でelseifを評価しない。
- 再挑戦
最初の条件が真なのでelseに進まない。
- 未設定
最初の分岐で値を設定するため、未設定では終わらない。
- 合格
最初の得点≧60が真なので「合格」を設定し、elseif以降は実行しない。上位を先に判定したいなら条件の並びも考慮する。
正答:合格
探索と終了条件
配列a={4,9,2,8,6}は要素番号1から始まる。k←1、found←0とする。while(k≦5 and found=0)の本体で、a[k]≧7ならfound←kとし、その後k←k+1を行う。終了時の(found,k)はどれか。
- (2,3)
k=1では条件を満たす要素がなく、k=2の9でfound=2。続いてkを3にした後、found=0が偽になって終了する。
- (2,2)
見つけた回の本体でも、その後のk←k+1を行う。見つかった番号と終了時のkは異なる。
- (4,6)
foundが設定されると次のwhile条件が偽になる。全要素を調べて最後の該当番号4へ更新する処理ではない。
- (1,2)
指定は要素番号1からで、最初の4は7以上ではない。該当する最初の要素の番号は2。
正答:(2,3)
二次元配列の更新
配列aの要素番号は行・列とも1から始まり、a={{2,5,9},{4,8,6}}。a[1,2]←a[2,3]、a[2,3]←a[1,2]+a[2,1]を順に行う。終了時の(a[1,2],a[2,3])はどれか。
- (6,9)
二つ目で更新前のa[1,2]=5を使った結果。順に行うので6を使う。
- (5,10)
最初の代入でa[1,2]も更新されるため、5のままではない。
- (6,10)
最初にa[1,2]は6へ変わる。次は更新後の6とa[2,1]=4を加えて10になる。
- (8,12)
行と列を逆に読んだり、別の要素を参照したりしている。指定は行番号、列番号の順。
正答:(6,10)
論理式の評価順
a=true、b=false、c=true。式Pを「a or b and not c」、式Qを「(a or b) and not c」とする。この擬似言語の優先順位で得る(P,Q)はどれか。
- (true,false)
not c=false。Pはa or (b and false)=true。Qは括弧内がtrueでもfalseとのandなのでfalse。
- (false,false)
Pではandを先に評価するため、a=trueとのorはtrueになる。
- (true,true)
Qはnot c=falseとのandなのでtrueにならない。
- (false,true)
PはtrueでQはfalse。括弧の有無が結果を変える。
正答:(true,false)