プログラミング入門 II 2010年後期
プログラミング入門 II 担 当 教 員 : 上村 技術スタッフ: 月川、北本、細島 ティーチング・アシスタント(TA): 阿部、遠藤、川上、川田、染谷 高橋、宮崎、宮地、和田 レポート:必須2回、任意2回の計4回 コースナビ: C言語入門編 達成度60%以上 出席: 2/3以上 20分以内の遅刻は0.5回 20分以上の遅刻は入室は認めるが、出席は0回 100%なら任意レポート満点 10回分以上
単位修得の要件: 出席:2/3以上 レポート:必須2回(10点) コースナビ:C言語入門編 達成度60%以上 「期末試験(80点) + レポート(20点)」で60点以上 10回分以上 注意! レポートのファイルは保存しておくこと 成績評価法: 上記要件を満足した者について 期末試験80点+レポート合計20点=100点満点 のうち 90点以上:秀、80点以上:優、70点以上:良、60点以上:可
講義予定(前半): 回 月 日 内 容 (予定) レポート 1 10月1日 講義の概要・コースナビの説明 前期の復習(演算子、制御文) 2 月 日 内 容 (予定) レポート 1 10月1日 講義の概要・コースナビの説明 前期の復習(演算子、制御文) 2 10月8日 第6章 配 列 ~配列の応用~ 3 10月15日 第9章 ポインタ ~ポインタの理解~ 4 10月22日 第1回レポート(必須) ~配列とポインタ~ (10/29提出) 5 10月29日 第10章 関 数 第11章 関数について 6 11月5日 第10章 関 数 ~関数とポインタ~ 第11章 関数について ~関数引数~ 7 11月12日 第10章 関 数 ~関数と配列、関数と2次元配列~ 第12章 関数と配列 8 11月19日 第2回レポート(任意) ~関数の再帰呼び出し~ (11/26提出)
講義予定(後半): 各自のコースナビ「C言語入門編」の進度を毎週、発表予定。 積極的に自習を進めて下さい。 12月10日 は休講 2月4日 回 月 日 内 容 (予定) レポート 9 11月26日 第13章 文字の取り扱い方 10 12月3日 第15章 文字列処理 11 12月17日 第14章 ファイル操作 第3回レポート(必須) (1/21提出) 12 12月24日 第16章 構造体 ~構造体とその配列~ 13 1月21日 第4回レポート(任意) ~関数と構造体~ (2/4提出) 14 1月28日 第17章 その他の制御文 第18章 マクロ 15 2月4日 ゲームの作成 16 2月11日 期末テスト 12月10日 は休講 2月4日 は補講 各自のコースナビ「C言語入門編」の進度を毎週、発表予定。 積極的に自習を進めて下さい。
コマンドプロンプトを用いた プログラミング コマンドプロンプトの起動と終了 最初に覚えるコマンド プログラムの編集 プログラムのコンパイルと実行 今日のポイント コマンドプロンプトでプログラミング
この授業では、基本的にこのフォルダ内にプログラムを作ることを前提とする。 プログラミング入門Ⅱの準備 マイ ドキュメント(Z:\ または 'fs\home\students'のt1029XX)に新しいフォルダを作る。 nyumon2 と名前をつける。 プログラム例のソースファイルは ex で始める。ピリオドは _ に直す。 プログラム例 5.5.1 → ex5_5_1.c この授業では、基本的にこのフォルダ内にプログラムを作ることを前提とする。
コマンドプロンプトの起動と終了 起動(マウス) 終了(キーボード) 終了(マウス) 練習:実際にコマンドプロンプトを起動して終了せよ。 [スタート] を<クリック> [すべてのプログラム(P)] [Microsoft Visual Studio 2005] [Visual C++コマンドプロンプト] を<クリック> コマンドプロンプトはCUI(Character-based User Interface)でコマンドを実行 終了(キーボード) 「exit」 と入力して <Enter> 終了(マウス) 右上の [x] ボタンを<クリック> x 練習:実際にコマンドプロンプトを起動して終了せよ。
コマンドプロンプトのショートカットを デスクトップに作成 [スタート]を<クリック> [すべてのプログラム(P)] [Microsoft Visual Studio 2005] [Visual C++コマンドプロンプト] を [送る(N)] [デスクトップ (ショートカットを作成)] を<クリック> <右クリック>
「作業フォルダ」の設定 デスクトップの「Visual C++コマンドプロンプト」の ショートカットを [ショートカット] タブを選択 [プロパティ(R)] を<クリック> 「Visual C++コマンドプロンプトのプロパティ」 ウィンドウ [ショートカット] タブを選択 [作業フォルダ(S):] 欄に起動時のデフォルトパス名として「Z:\nyumon2」を記入 [ OK ] ボタンを<クリック> <右クリック> 一番下
最初に覚えるコマンド notepad devenv (development environment) dir (directory) メモ帳によるテキストファイル編集 devenv (development environment) Visual Studioのエディタによるソースファイル編集 dir (directory) ディレクトリ(フォルダ)内のファイル一覧表示 cl (compile & link) コンパイルとリンクによる .exe ファイル作成
ファイル名だけで devenv が立ち上がる プログラムの作成・編集 コマンドプロンプトでメモ帳を起動 Z:\nyumon2>notepad hello.c /* hello world program */ #include <stdio.h> int main() { printf("Hello world!\n"); return 0; } すでにソースファイルがある場合は、 ファイル名だけで devenv が立ち上がる Z:\nyumon2>hello.c
プログラムのコンパイルと実行 CLコマンド(compile and link) 実行ファイル確認 実行 Z:\nyumon2>cl hello.c 実行ファイル確認 Z:\nyumon2>dir 実行 Z:\nyumon2>hello Z:\nyumon2 のディレクトリ 2010/10/01 13:30 <DIR> . 2010/10/01 13:30 <DIR> .. 2010/10/01 13:40 109 hello.c 2010/10/01 13:45 610 hello.obj 2010/10/01 13:45 53,248 hello.exe さらに詳しく知りたい人は以下を参照のこと http://www.ced.is.utsunomiya-u.ac.jp/lecture/2010/common/vs2005/ command_prompt.php
PADと構造化プログラミング PADとは 処理の方向:上から下へ 判断・選択、繰返し:右へネスト(入れ子) 3種の繰返し 定義、引用 Problem Analysis Diagram 構造化フローチャートの一種 処理の方向:上から下へ 箱を縦線で連接→ブロック 判断・選択、繰返し:右へネスト(入れ子) 3種の繰返し 前判定(while)、後判定(do-while)、問題向き(for) 定義、引用 goto 文のないプログラミング
PADの例 処理1 処理2-1 定義 = 繰返し(for)2 処理2-2-1 判断2-2 処理2-2-2 処理3 ネストレベル1 ネストレベル2 処理2-1 定義 = 繰返し(for)2 処理2-2-1 判断2-2 処理2-2-2 処理3
PADの制御構造(1) 連接(複合文, ブロック) 文 判断(if 文) 文1 条件 文2 { 文; } if (条件) 文1; 文; } 文 条件 文1 文2 if (条件) 文1; else 文2;
PADの制御構造(2) 選択(if 文,switch 文) 文1 条件1 文2 条件2 文3 文1 文2 文3 if (条件1) 文1; else if (条件2) 文2; else 文3; switch(式) { case 定数1: 文1; break; case 定数2: 文2; break; default: 文3; } 式=定数1 式=定数2 文1 文2 文3
PADの制御構造(3) 繰返し(while 文) while (条件) { 文; : } 文 条件 : 文
PADの制御構造(4) 繰返し(for 文) for (変数=初期値;変数<=終値;変数++) { 文; } 変数=初期値,…,終値 文; } 変数=初期値,…,終値 文
2項演算子(付録A.3) 優先順位 代入(=, +=, -=, *=, /=, %=,…) 論理(||, &&) ビット(|, ^, &) 関係、等値(==, !=, >=, >, <=, <) ビットシフト(>>, <<) 算術(+, -, *, /, %) 剰余 優先順位
単項演算子(付録A.3) 優先順位 キャスト((int), (float), (double), …) 論理(!) ビット(~) 符号(+, -) ポインタ(&, *) sizeof 前置インクリメント(++)、デクリメント(--) 後置インクリメント(++)、デクリメント(--) 優先順位
よくやるミス (bug1.c) #include <stdio.h> int main() { int a=2010, b=1992; printf("%d は %d と比べて", a, b); if (a = b) printf("等しい.\n"); else if (a > b) printf("大きい.\n"); else printf("小さい.\n"); return 0; } 何がおかしい?
自動型変換 定数 代入演算 算術演算 10 10L 10U 10. 0.5L .5F 小数点なし: 整数定数 小数点あり: 実数定数 接尾語で型指定可 定数 小数点なし: 整数定数 小数点あり: 実数定数 代入演算 実数型←整数: 精度が落ちる可能性 整数型←実数: 小数の切捨て、オーバーフロー 算術演算 両方とも整数: 整数演算 一方が実数: 実数演算 10 10L 10U 10. 0.5L .5F 5 / 3 = 1, 5 % 3 = 2 5. / 3 = 1.6666666...
本日のパズル 次のプログラムは何を出力するか? main() { int x; x = - 3 + 4 * 5 - 6; printf("%d\n",x); x = 3 + 4 % 5 - 6; printf("%d\n",x); x = - 3 * 4 % - 6 / 5; printf("%d\n",x); x = ( 7 + 6 ) % 5 / 2; printf("%d\n",x); }