おさらい!for構文

おさらい!for構文
ややこしさは天下一品
使いやすさも天下一品
まずは基本
書けるようになろう!
おさらい!for構文
2
for文の前にwhile文の話
while 文は覚えているかな?
►いわゆる for じゃない方のループ構文だったよね
►while はループするための最低限の仕組み
while (
続ける条件
処理
}
) {
ここが TRUE なら
ループが続く
►これが while 文の基本形だね
(単純すぎて基本もクソもないけど)
おさらい!for構文
3
while文で数をカウント
じゃあ while 文で数をカウントしてみよう
(例えば配列を使う時はそうするよね?)
►とりあえず簡単に 0 から 9 まで表示しよう
int i = 0;
while ( i < 10 ) {
printf("%d\n", i);
i++;
}
►この辺は簡単だね
おさらい!for構文
0
1
2
3
4
5
6
7
8
9
続行するには何かキー
4
while文で数をカウント
じゃあ while 文で数をカウントしてみよう
(例えば配列を使う時はそうするよね?)
►とりあえず簡単に 0 から 9 まで表示しよう
int 準備
i = 0;
while ( i続ける条件
< 10 ) {
処理
printf("%d\n",
i);
カウンタ更新
i++;
}
準備
続ける条件
処理
カウンタ更新
続ける条件
►抽象化するとこんな感じになるね
おさらい!for構文
処理
5
while文で数をカウント
じゃあ while 文で数をカウントしてみよう
(例えば配列を使う時はそうするよね?)
►とりあえず簡単に 0 から 9 まで表示しよう
int i = 0;
回数 ) {
while ( i < 10
処理
printf("%d\n",
i);
i++;
}
0 から
回数
回だけ繰り返す
►特にカウントのときはこんな感じだね
おさらい!for構文
6
while文の欠点
while 文でもループは作れるけど・・・
►ただのカウントなのにゴチャゴチャしている
►よく使うんだから簡単にならないかなぁ
ゴチャゴチャしているので・・・
►ちゃんと読まないと分からない
良いコードというのは・・・
►パッと見だけで分かるモノ
いわゆる 読まなくても分かる コード
おさらい!for構文
7
そこでfor文
まずは基本形をマスターしよう!
(ややこしいから基本が大切だね!)
►さっきの while 文を for 文で書いてみよう
for (int i = 0; i < 10 ;
printf("%d\n", i);
}
i++
) {
►こんな感じになるよね
(場所が変わるだけなので難しく考え過ぎないこと)
おさらい!for構文
8
そこでfor文
まずは基本形をマスターしよう!
(ややこしいから基本が大切だね!)
►さっきの while 文を for 文で書いてみよう
for (int 準備
i = 0; i続ける条件
< 10 ;
処理
printf("%d\n",
i);
}
i++
カウンタ更新
) {
準備
続ける条件
処理
カウンタ更新
►さっきのように抽象化するとこんな感じ
続ける条件
処理
おさらい!for構文
9
そこでfor文
まずは基本形をマスターしよう!
(ややこしいから基本が大切だね!)
►さっきの while 文を for 文で書いてみよう
回数 ;
for (int i = 0; i < 10
処理
printf("%d\n",
i);
}
0 から
i++
回数
) {
回だけ繰り返す
►特にカウントのときはこんな感じだね
これが for 文の基本形だよ
おさらい!for構文
10
基本形の注意点
初期値は
0 にすること
※ 1 にすると回数が減ってしまう
※配列は 0 から始まるので不等号で調整しない
回数 ;
for (int i = 0; i < 10
処理
printf("%d\n",
i);
}
比較演算子は
i++
) {
< にすること
※ <= にすると回数が増えてしまう
※配列は 0 から始まるので初期値で調整しない
おさらい!for構文
11
基本形に慣れると
コードが人間の言葉に見えるようになってくる
►熟練するというのはそういうことの積み重ねだね!
(※断じて幻覚じゃないよ!幻覚はまた別のだよ!)
回数 ;回繰り返す
for (int i = 0; 0から
i < 10
i++
) {
処理
printf("%d\n",
i);
}
►最初はこの形にトコトン慣れよう
おさらい!for構文
12
適材適所
どこで使うの?
どっちを使うの?
おさらい!for構文
13
forとwhileの使い分け
ここまでで使い方は分かったかな?
►たくさん書いて身に付けよう!
while と for は、式の配置が違うだけ
►じゃあ片方要らない?
より見やすくするために
使い分けよう!
おさらい!for構文
14
forを使う場面
回数や数値が重要
かつ
数値の変化が単調
な場面
例えば・・・
►n人の成績データの出力(配列の添字が1ずつ増える)
►10万回同じ処理を実行して時間を測る
おさらい!for構文
15
whileを使う場面
回数や数値が重要でない
あるいは
条件が複雑
な場面
例えば・・・
►ファイルの終わりまで読み込む(長さが分からない)
►ループ終了の条件が3個くらいある(まとめると複雑)
おさらい!for構文
16
スラスラ書くために
コードを組み立てる戦略
おさらい!for構文
17
実際の問題例
現実に遭遇する問題を例に考えよう
問題
整数配列 と その長さ を与えると、
配列内の整数の平均値 を返す関数を作れ
みんなも考えながら聞いてね
おさらい!for構文
18
まずは関数の枠組みを作る
関数の枠組みを作ると
►引数などの前提条件がハッキリする
►最終的にどうしたいのかハッキリする
今回は・・・
►整数配列 と その長さ が引数
►平均値 が戻り値
double average(int array[], int length) {
//
// こんな感じになるね
この中身に集中できる
//
}
おさらい!for構文
19
いきなり頭から書かない
どういう流れで答えまで行くのか考える
なんとかして合計を求める
とりあえず total という
変数にしようかな
配列の長さで割る
これが答えだー!
double average(int array[], int length) {
int total;
//
// なんとかする部分
平均を求める問題が
//
合計を求める問題に
return (double)total / length;
変わった!
}
おさらい!for構文
20
問題を単純化する
前のページでやったことも単純化だね
配列の内容の合計を出したい
すべての要素に
アクセスすれば良いね
添字の数字を順に増やしたい
これってループ?
ここでは配列の全要素にアクセスしたいので
►回数や数値が重要(length 回アクセスする)
►数値の変化が単純(1つずつアクセスする)
15ページ
でやった
ここでは for 文を使うと良さそう!
おさらい!for構文
21
最後まで抜け目なく
for 文の基本形を覚えているかな?
(忘れちゃった人は 10ページ あたりを復習しよう)
double average(int array[], int length) {
int total = 0;
// 合計を求める
for (int i = 0; i < length; i++) {
total += array[i];
}
// 合計を長さで割って返す
return (double)total / length;
}
よく見ると total の初期値を設定している
►その変数自身との計算をする時は気を付けよう
おさらい!for構文
22
おつかれさま
これで for 文のおさらい講習はおしまい!
最後まで聞いてくれてありがとう!
おさらい!for構文
23