アルゴリズムとプログラミング

代入

「x ← x+1」で、右辺のxは更新前と更新後のどちらの値か。

  1. 更新前の値

    右辺の式を現在の値で計算してから、結果を左辺の変数へ格納する。同じ変数が両辺にあっても等式を解く処理ではない。

正答:更新前の値

条件分岐

if・elseifで複数の条件が真になり得るとき、どの分岐を実行するか。

  1. 上から調べて最初に真になった条件の分岐だけ

    最初に真になる条件を見つけたら対応する処理を実行し、後のelseif条件は評価しない。独立した複数のifとは異なる。

正答:上から調べて最初に真になった条件の分岐だけ

繰返しの判定位置

whileとdoで始まる後判定繰返しでは、初回の処理を実行する前の条件確認がどう違うか。

  1. whileは先に確認し、後判定繰返しは先に処理する

    前判定は初めから条件が偽なら本体を一度も実行しない。後判定は本体を実行してから条件を確認するため、少なくとも一度は実行する。

正答:whileは先に確認し、後判定繰返しは先に処理する

剰余演算

非負の整数を正の整数で割るとき、modが表すのは商と余りのどちらか。

  1. 余り

    modは剰余算を表す。例えば割り切れる場合の余りは0であり、商とは区別する。この問いは非負の整数と正の除数に限定する。

正答:余り

論理演算の優先順位

括弧がない擬似言語の式では、andとorのどちらを先に評価するか。

  1. and

    演算子表では論理積andが論理和orより高い優先度。式を左から無条件に順番に計算する規則ではない。

正答:and

二次元配列

二次元配列の「data[r, c]」では、rとcはそれぞれ何を表すか。

  1. rが行番号、cが列番号

    二次元配列は行番号、列番号の順で要素を指定する。内側の波括弧で囲まれた部分は1行分の内容である。

正答:rが行番号、cが列番号

配列要素の更新

配列の「data[i] ← 値」という代入は、配列全体と要素iのどちらを更新するか。

  1. 指定された要素i

    角括弧内で指定した要素を代入先にする。配列全体の全要素を同じ値へ置き換える指示ではない。

正答:指定された要素i

代入の順序

x=6、y=8とする。x ← y、y ← xをこの順で実行する。二つの値を交換するつもりだったが、終了時の(x,y)はどうなるか。

  1. (8,6)

    これは交換できた結果だが、元のx=6は最初の代入で失われている。

  2. (8,8)

    最初の代入でxは8。次は更新後のxをyへ入れるので、両方8になる。元のxを残すには別の退避が必要。

  3. (6,8)

    これは更新前の組であり、二つの代入を実行した結果ではない。

  4. (6,6)

    最初にxへyの8を入れるため、6のままにはならない。

正答:(8,8)

条件分岐の順序

得点は85。区分を未設定で開始し、if(得点≧60)で区分←「合格」、elseif(得点≧80)で区分←「上位」、elseで区分←「再挑戦」とする。後で区分を変える処理はない。得られる区分はどれか。

  1. 上位

    80以上でも、先の真の条件を実行した時点でelseifを評価しない。

  2. 再挑戦

    最初の条件が真なのでelseに進まない。

  3. 未設定

    最初の分岐で値を設定するため、未設定では終わらない。

  4. 合格

    最初の得点≧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)はどれか。

  1. (2,3)

    k=1では条件を満たす要素がなく、k=2の9でfound=2。続いてkを3にした後、found=0が偽になって終了する。

  2. (2,2)

    見つけた回の本体でも、その後のk←k+1を行う。見つかった番号と終了時のkは異なる。

  3. (4,6)

    foundが設定されると次のwhile条件が偽になる。全要素を調べて最後の該当番号4へ更新する処理ではない。

  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])はどれか。

  1. (6,9)

    二つ目で更新前のa[1,2]=5を使った結果。順に行うので6を使う。

  2. (5,10)

    最初の代入でa[1,2]も更新されるため、5のままではない。

  3. (6,10)

    最初にa[1,2]は6へ変わる。次は更新後の6とa[2,1]=4を加えて10になる。

  4. (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)はどれか。

  1. (true,false)

    not c=false。Pはa or (b and false)=true。Qは括弧内がtrueでもfalseとのandなのでfalse。

  2. (false,false)

    Pではandを先に評価するため、a=trueとのorはtrueになる。

  3. (true,true)

    Qはnot c=falseとのandなのでtrueにならない。

  4. (false,true)

    PはtrueでQはfalse。括弧の有無が結果を変える。

正答:(true,false)