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