プログラミング入門II

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