情報処理Ⅱ 第14回 2006年1月23日(月)
本日のスケジュール 14:50~14:55 … 復習問題 14:55~15:30 … おさらい問題 14:50~14:55 … 復習問題 14:55~15:30 … おさらい問題 何でも参照可.周りと相談可.質問可. 採点の対象にはならない. 15:30~16:15 … おさらい問題の解説 16:15~16:20 … 試験について
本日授業を欠席した人へ 1年生・再履修者共通 再履修者で,月7・8限に授業がある人 配布資料を渡すので,A-510まで Webでも読める 来る場合,メール連絡あるとありがたい 再履修者で,月7・8限に授業がある人 口頭で,本日の課題を指示するので,メールで回答すること. 1年生と,再履修者でもA-510まで配布資料を取りに来ない人からは,回答メールがあっても出席点としない.
試験の心構え しっかり準備をする. Webページの復習問題には目を通しておく. プログラムコードを見て,出題意図を把握する. 特に,「データ型の表現できる範囲」「演算子の種類と優先順位」「配列とポインタの使い分け」を理解しておく. Webページの復習問題には目を通しておく. プログラムコードを見て,出題意図を把握する. 何の話(2重ループ,文字列,関数と変数,再帰)か? プログラムコードを見て,日本語で説明できるよう,訓練する. 何をするプログラムか? 何をする関数,変数,型か?
大問3の解説(1) 解答例 コメント 29行目を return 0; とする. 関数が,値を返して関数処理を終了するとき, return(値); または return 値; と書く. returnは関数ではなく制御文のキーワードであることに注意. コンパイルエラーがあったら,問題のある「行番号」だけでなく,コンパイラが出力している「識別子」にも注意する.
大問3の解説(2) 解答例 コメント 先頭から順に見ても,末尾から逆順に見ても,同じ文字の並びになる文字列. 「palindrome = 回文」で安心しないこと. プログラムの動作説明は,40字程度の1文で書けるようにしよう.
大問3の解説(3) 解答例 コメント ./palindrome aba Yes ./palindrome Yes NooN 「この入力には何を出力するか?」は試験に出さない. 出力を見て,「どんな入力を与えたらその出力になるか」を考えること(未知のプログラムを実行するときにも重要).
大問3の解説(4) 解答例 2行目は前処理指令の一つであり,11行目でライブラリ関数の strlen を使用するために記述している. コメント 「ライブラリ関数」については,それを使うためにインクルードすべき「ヘッダファイル」も合わせて理解する. 入出力:stdio.h 文字列:string.h 文字情報:ctype.h その他有用な関数:stdlib.h
大問3の解説(5) 解答例 変数pは,文字列(コマンドライン引数の各語)が与えられるたびに,その先頭を参照するポインタ変数であり,26行目でその文字列を出力する際までその値を保持する. 変数qの初期値はpと同じ文字列の先頭であるが,14~19行目で回文の検査をする際,一つずつ次の文字を参照していく. コメント 変数名,関数名,プログラムを主語とした書き方に慣れること. 二つのものが指定されているとき,その違いが際立つように説明する.
大問3の解説(6) 解答例 誤答例 コメント while (q < r && *q == *r) { C言語の多彩な演算子を確認する.ただし丸暗記する必要はない. forやwhileの条件は,反復を打ち切る条件ではなく,反復を維持する条件である.
大問2の解説(1) 解答例 コメント 0 1 2 3 4 2 3 4 5 4 5 6 6 7 8 ループの変数の範囲に注意すること. 「i + j」が別のものに変わっても,出力内容が答えられるように.
大問2の解説(2) 解答例 誤答例 コメント W a k a W a k a y 文字列を参照するポインタ変数pについて 「p--」,「p+=2」は?
大問2の解説(3) 解答例 コメント x = 1, y = 2 x = 1, y = 2 swap関数内の変数x, yと,呼び出し側のそれらは別物 呼び出し元のx, yの値は,swapのx, yに渡される. swapのx, yの値は,呼び出し元に返らない.
大問2の解説(4) 解答例 コメント x = 1, y = 2 x = 2, y = 1 呼び出し元の「swap(x, y);」は,「{int tmp = x; x = y; y = tmp;};」に置き換えられる. tmpは,そのブロックの中だけのローカル変数. 最後のセミコロンは,空文であり,文法上問題ない. 関数形式マクロと関数プロトタイプを理解しておくこと.
大問2の解説(5) 解答例 factorial(5) factorial(4) factorial(3) factorial(2) factorial(1) 120 コメント 再帰の打ち切り条件に注意(この問題では,factorial(1)からfactorial(0)を呼び出すことはない).
大問1の解答 (11) ① (1) ② (12) ② (2) ③ (13) ② (3) ① (14) ① (4) ② (15) ② (5) ① (6) ② (7) ② (8) ① (9) ② (10) ① (11) ① (12) ② (13) ② (14) ① (15) ②
大問1の解説 (3)0.1は,有限桁数の2進数で誤差なく表現できない. (6)単項演算子は「++」と「--」に限り,オペランドの右にも付けられるが,左に付けるのと効果が異なる. (11)関数や変数が増えると,オーバーヘッドが生じて,処理速度は低下する.(しかしそれは,現在のハードウェア・ソフトウェア技術からすると微々たるものである.) (15)構造体に限らず,「関数内のauto変数のオブジェクトのポインタを返す関数」を定義してはならない. コメント 授業で見聞きしたことを思い出す. おさらい問題の問題文は,本番でも,表現を変えて出題するかもしれない. 迷ったら,「プログラミングの心がけ」で選ぶ.
試験について 実施上のルール 配点 解答解説など 日時:2月3日(金)13:10~14:40 持込:自筆ノート1冊と,C言語の書籍1冊のみ可 「用紙1枚」は不可(カンニング防止のため). 本やノートへの挟み込み,糊付けも不可. 「ルーズリーフ」は,バインダに綴じており,試験中取り外さないなら可. 配点 出席:5点,レポート:10点×2,試験:75点 解答解説など 2月6日(月)ごろにWebで公開する.