情報処理Ⅱ 2008年1月30日(水).

Slides:



Advertisements
Similar presentations
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
Advertisements

復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
情報処理Ⅱ 第1回 2006年10月6日(金).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
基礎プログラミングおよび演習 第9回
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
文字配列の課題1 解説 /* a */ #include <stdio.h> main( ) { int i;
C言語 配列 2016年 吉田研究室.
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
情報処理Ⅱ 2005年10月7日(金).
情報処理Ⅱ 2005年12月9日(金).
第8回 プログラミングⅡ 第8回
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
情報処理Ⅱ 第4回 2007年10月29日(月).
第10回 プログラミングⅡ 第10回
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 条件による繰り返し.
第7回 プログラミングⅡ 第7回
第11回 プログラミングⅡ 第11回
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
プログラミング基礎B 文字列の扱い.
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
情報処理Ⅱ 第14回 2006年1月23日(月).
情報処理Ⅱ 第2回:2003年10月14日(火).
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
C言語 はじめに 2016年 吉田研究室.
アルゴリズムとプログラミング (Algorithms and Programming)
ポインタとポインタを用いた関数定義.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
プログラミング入門 電卓を作ろう・パートI!!.
情報処理Ⅱ 2005年1月25日(火) レポート課題2の解説.
情報処理Ⅱ 2006年11月24日(金).
情報処理Ⅱ 第7回 2004年11月16日(火).
情報処理Ⅱ 2005年10月28日(金).
情報処理Ⅱ 2007年12月3日(月) その1.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
情報処理Ⅱ 2006年11月8日(金).
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
情報処理Ⅱ 2007年2月2日(金).
情報処理Ⅱ 第2回 2004年10月12日(火).
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月27日(金).
第5回 配列.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
Presentation transcript:

情報処理Ⅱ 2008年1月30日(水)

本日の内容 小テスト これからのプログラミング学習について おさらい問題の解説 試験について 様々なCの仕様,様々なコンパイラ 春休みに考えてみよう おさらい問題の解説 試験について

様々なCの仕様 K&R (-traditional) ANSI (-ansi),C89 (-std=c89) C99 (-ctd=c99) “The C Programming Language”, またはその本における仕様を指す. 著者, Brian W. Kernighanと Dennis M. Ritchieとの頭文字による. K&R (-traditional) int main(argc, argv) int argc; char *argv[]; { ANSI (-ansi),C89 (-std=c89) この授業で用いた仕様 C99 (-ctd=c99) 論理型(_Bool),複素数型,可変長配列,複合リテラルなど C言語の歴史: http://www.bohyoh.com/CandCPP/C/history.html 「man gcc」を実行しても,-ansiオプションしか出てこない. http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html#SEC6 -traditional 伝統的なCコンパイラが持ついくつかの特性をサポートするよう試みます。 http://libc.blog47.fc2.com/blog-entry-7.html -std=<standard> <standard>で指定した標準規格に従いま す。指定できる主な値は、"c89", "c99", "gnu89", "gnu99"です。文字通り、"c89"を指定すればANSI X3.159-1989に、"c99"を指定すればISO/IEC 9899:1999に従います。"gnu89"および"gnu99"は、それぞれ"c89"と"c99"にGNU拡張を加えたものです。このオプションが なければ、"gnu89"が選択されます。 この色は,演習室Cコンパイラ(GCC)のオプション

様々なコンパイラ GCC Borland C++Compiler インテル コンパイラー GNU Compiler Collection.フリーで,多くのアーキテクチャで使用可能.クロスコンパイルにも使われる. 「//」によるコメント,ブロック途中の変数宣言,関数定義の入れ子などは,GCC拡張あるいはGNU拡張と呼ばれる (-std=gnu89, -std=gnu99). Borland C++Compiler バージョン5.5は個人使用ならフリー.Windowsで手軽に使える. インテル コンパイラー ハイパフォーマンスを謳う商用コンパイラ C++Builder ダウンロード: http://www.codegear.com/jp/downloads/free/cppbuilder インテル® コンパイラー: http://www.intel.com/cd/software/products/ijkk/jpn/compilers/295842.htm

春休みに考えてみよう これは何? アドバイス アルゴリズム演習Ⅰの例年最初の課題 http://www.wakayama-u.ac.jp/~kato/algorithm_pre/ これは何? アルゴリズム演習Ⅰの例年最初の課題 構造体の定義,構造体の配列,ファイル読み出し,並べ替えといった技術要素を含む アドバイス プログラムを書く前に,問題をよく読み,データをよく見て,プログラムにする方法を考える. 隠されている課題に気づく(この問題では,構造体の活用). 並べ替えは,「最大の人口密度を持つ県」を求め,次にそれを除いて「最大の人口密度を持つ県」を求め,…を繰り返す.

試験の心構え しっかり準備をする. Webページでは,授業スライドだけでなく,復習問題にも 目を通しておく. 特に,「演算子」「配列とポインタの違い」「構造体」を理解しておく. Webページでは,授業スライドだけでなく,復習問題にも 目を通しておく. プログラムコードを見て,日本語で説明できるよう,訓練する. 何をするプログラムか? 何をする関数か? この行は,何をする処理か? 複数の解の候補がある問題は,「すべて」という指示がない限り,一つでよい.最善と思うものを選んで書く.

大問3の解説(1) 解答例 コメント 7行目と8行目の間に,int sum = 0; と書く. 変数宣言では,「どこで宣言するか」「型名」「初期化の必要性」に注意する. 「10行目と11行目の間」や「12行目と13行目の間」だと,25行目で参照できない. このsumについては初期化が必要である.変数の参照が,代入よりも先のときには,初期化しなければならない. 初期化が必要なときに忘れると減点. 初期化が不要なところに初期化をしても減点はしない. とすれば,試験対策として,初期化もするという戦略をとってもいい. (実際にプログラムを作る際には,初期化を必須とするか,変数ごとに決めるべき(必須としない)かは, コーディングスタイルの問題だと思う. 「どこで宣言するか」「型名」「初期化の必要性」に加えて,「修飾子(static, extern, constなど)」 「初期値(定数を与えるだけでいいか?定数はオブジェクト形式マクロにすべきではないか,など)」も 考えられるようになってほしい.

大問3の解説(2) 解答例 チェックデジットを除く各数字について,奇数番目(先頭の文字を1番目とする)ならそのまま足し,偶数番目なら3倍して足して,合計した値の1の位を10から引いたもの(ただし,10なら0にする)が,チェックデジットである. コメント 中核となる処理を,説明できるようにしよう. str[0]が文字列の先頭である点に注意.

大問3の解説(3) 解答例 コメント 「./isbn13 978427406337」を実行する.結果は 「978427063374」である. 「この入力には何を出力するか?」は試験に出さない.出力を見て,「どんな入力を与えたらその出力になるか」を考られるようにすること(未知のプログラムを実行するときにも重要). 「978427063374」は,『スーパーリファレンス編』のISBN13である.

大問3の解説(4) 解答例 これは,標準ライブラリ関数のprintfを用いて,文字列strと整数値dの値を連接して標準出力に書き出し,改行するものである.ライブラリ関数を用いるには適切なヘッダファイルを取り込む必要があり,printfについては,1行目の 「#include <stdio.h>」が該当する. コメント 「ライブラリ関数」については,それを使うためにインクルードすべき「ヘッダファイル」も合わせて理解する.

大問3の解説(5) 解答例 誤答例 コメント if (c >= '0' && c <= '9') { 問題文但し書きは,『スーパーリファレンス編』p.28による. ライブラリ関数を使うほうが,一般に,バグは起こりにくい. 関数が定義されているときに,「関数プロトタイプを記述しなさい」や「同じ意味の関数形式マクロを答えなさい」といった問題にも答えられるようにすること.

大問3の解説(6) 解答例 コメント +=, -, *, &, ? : カッコは演算子ではない.(関数呼び出しを除く.) 「? :」は,これで一つの演算子なので,間にカンマを入れない. 演算子の優先順位と結合の向き,暗黙の型変換(演算,代入時)を確認しておくこと.

大問2の解説(1)~(5) 解答例 コメント (1)オペランド / 被演算数 / 被演算子 (2)sizeof (3)左 / 前 (4)100 (5)-> コメント 「非演算数」は間違い(『Cプログラム入門以前』の記述は誤記と思われる). 「構造体オブジェクト.メンバ」と「構造体ポインタ->メンバ」の違いも確認しておく.

大問2の解説(6)~(10) 解答例 コメント (6)ループカウンタ / カウンタ変数 (7)i <= 7 / i < 8 (8)11,10,9,8,7,6,5 (9)i=10;i>=4;i-=2 (10)(8,8),(4,4),(2,0),(1,-4) コメント 『スーパーリファレンス編』p.256より.最後のみオリジナル. 実際には,もう一度更新した値で終わる.「2つずつ増加」の例で,forループを終えた時点でのiの値は,9ではなく11である.表は,forループで処理に使われる値(の変化)を書いている. 最後の例は,1/2が0になることを用いている.

大問2の解説(11)~(14) 解答例 コメント (11)交換 (12)値渡し (13)char *x, char *y (14)変数名の前に&をつける コメント 「関数の値の受け渡し」がテーマ.参照渡しをするときは,ポインタの知識も不可欠である. 「交換」「最大値」「(文字列)走査」など,定番の処理は名称とコードを覚える.

大問1の解答 (1) ② (2) ① (3) ② (4) ② (5) ② (6) ② (7) ① (8) ① (9) ① (10) ②

大問1の解説 (2)負の値で231個,0で1個,正の値で231-1個,合計232個. (5)α<<β は α・2β (6)ナル文字を忘れずに.配列に対する初期化の注意点(一つではない)も要確認. その他コメント 授業で見聞きしたことを思い出す. おさらい問題の問題文は,本番でも,表現を変えて出題するかもしれない.

試験について 実施上のルール 配点 解答解説など 日時・場所:2月4日(月)10:50~12:20 A103 持込:自筆ノート1冊のみ可 日時・場所:2月4日(月)10:50~12:20 A103 持込:自筆ノート1冊のみ可 「用紙1枚」は不可(カンニング防止のため). 挟み込み,糊付けも不可. 「ルーズリーフ」は,バインダに綴じており,試験中取り外さないなら可. 配点 レポート:10点×2,試験:80点 解答解説など 試験問題,おさらい問題と合わせて, できるだけすみやかにWebで公開する.