情報処理Ⅱ

情報処理Ⅱ
2004年1月20日(火)
(おさらい問題の解答と解説)
大問1の解答

奇数番目はすべて×,偶数番目はすべて○

解く際の注意点




試験では,連続して○や×になることもある.
講義スライドを見直しておく.
配列とポインタの使い分け,演算子(特にビット演
算子と代入演算子)の用法を理解しておく.
「心がけ問題」は,知識だけでなく常識も動員する.
大問2の解答(1)
(1) 8行目を,int checkbrace(char *str) にする.

char *の前にconstをつけてもよい.
(2) 10行目を,int level = 0; にする.

解く際の注意点



変数(仮引数を含む)の型に注意する.
変数にはどのような値が格納され得るかを見極める.
関数呼び出し(引数の受け渡し,返り値の使用)で,
型の不整合がないかチェックする.
大問2の解答(2)
(3) 以下の通り.


./brace {}{{ を実行したとき: 0,1,0,1,2
./brace {}}{ を実行したとき: 0,1,0,-1


3文字目を読んだ時点で,18行目により関数内の処理を
終え,4文字目の '}' は読まない.
解く際の注意点

どこで値が変わるかを押さえる.


代入演算子,++,-- に着目する.
入力をすべて見ることなく終わる(ループや関数を
抜ける)ことがある.
大問2の解答(3)
(4)いずれも,「*strの値が0でない限り反復する」こ
とを表しているため.
(5)ならない.置き換えると,levelが0から-1になると
きにも条件式は偽と評価されるため.
[別解] 置き換えると,./brace {}}{ を実行したときも「OK」と
出力してしまう.

解く際の注意点


行単位で,処理内容を日本語で説明できるようにす
る.
推敲する(「これはこれに置き換えられるか?」と
考える)癖をつける.
大問3の補足


この問題の意図は,「与えられた機能(関数)を使
用して,新たな機能(関数)を構成できること」.
3つの関数について



atoiは,stdlib.hで宣言されているライブラリ関数.
atoi2,atoisumはこの問題のための独自関数.
atoi使用時の注意


atoi("abc") の返り値は不定.0になると期待してはい
けない.
atoi("1abc") の返り値は1になることが,仕様で定め
られている.