前回の授業の達成率

第1回レポートの講評
インデント(字下げ)の統一
自宅学習用コンパイラの入手方法
行列計算と for 文
演習12.3の計算結果
演習12.4の計算結果
インデント(字下げ)の統一

自分なりの字下げの数、やり方を決める




「不統一」はダメ
テキスト、資料: 2文字分、サンプル:4文字分
Tab を使う? → 印刷すると狂う場合はスペースで統一
波カッコ対{}の位置

テキスト ― すべて揃える、字下げは2段階
for (i = 0; i < n; i++)
{
printf("%d", a[i]);
}

資料 ― 関数ブロックだけは揃える、字下げは1段階
for (i = 0; i < n; i++) {
printf("%d", a[i]);
}
自宅学習用コンパイラの入手法

タダで始めるC/C++プログラミング


Visual C++ 2008 Express Edition


http://www.ooyashima.net/db/prog.htm
http://www.microsoft.com/japan/msdn/vstudio/express/
Boland C++ 5.5, Turbo C++ Explorer

http://www.codegear.com/jp/downloads/free/cppbuilder
行列計算と for 文

∑の計算と for 文
N
S

k2
k 1

s = 0;
for (k = 1; k <= N; k++) {
s += k * k;
}
行列の乗算と for 文
N
ci , j 
a
i,k
 bk , j
k 1
(i  1,2,..., N ; j  1,2,..., N )
c[i][j] = 0;
for (k = 0; k < N; k++) {
c[i][j] += a[i][k]*b[k][j];
}
演習12.3の計算結果
 12 14 16 


A  B   18 20 22
 24 26 28


  10  10  10


A  B    10  10  10
  10  10  10


 90 96 102


A  B   216 231 246
 342 366 390


演習12.4の計算結果
 2 3 1  x    1

   
 3 1 2  y    7 
 1 2 3  z   6 

   
 x  1 
   
 y     2
z  3 
   
ポインタとは何か

配列の先頭=ポインタ定数
ポインタ
メモリ空間における目印

ポインタ変数
ポインタ'定数'
固定された目印=「ランドマーク」
配列名はポインタ定数

ポインタ'変数'
動かせる目印=「本のしおり」
使いたいときに定義しておく
int *p;
メモリ空間
pはポインタで、pの位置の中味(*p)がint型であるような物.
ポインタを1つ増すごとに sizeof(int)(= 4バイト)進む.
実体はなく、常に何か(配列や文字列)の代理人として働く.
ポインタの正体

ポインタの正体はメモリのアドレス
int a;
int *p;
→ 変数: a, アドレス: &a
→ 変数: *p, アドレス: p
→ 変数(配列の要素): a[0]
アドレス: &a[0] = a
int a[2][1];→ 変数(配列の要素): a[0][0]
アドレス: &a[0][0]=a[0]=a
&a[1][0]=a[1]
int a[1];
ポインタ配列とは

ポインタの配列
例えば、2次元配列の1列目(各行の先頭)のアドレス
だけを集めて配列にすると便利なことがある
int a[2][2];
int *p[2];
定義しただけでは実体はない
p[0] = a[0]; p[1] = a[1];
としておくと、2次元配列を関数に引き渡すときに
サイズを指定しなくて済む