プログラミングⅡ 第2回
今日の内容 前回の課題説明 制御文 for文 while文 do while文
前回の課題 10月2日の課題(No.1 – No.3) pdfファイル
前回の課題 課題No.1 整数値15から37を引いた値を計算して「15から37を引いた値はー22です.」と表示するプログラムを作れ。
前回の課題 課題No.2 x,yをキーボードから入力し,以下の式を計算・表示するプログラムを作成せよ(演算の優先順位に注意
前回の課題 課題No.3 テストの点数をキーボードから入力させて,その値が 100点以下80点以上ならば,「素晴らしい」, 100点以下80点以上ならば,「素晴らしい」, 79点以下70点以上ならば,「Goodです」, 69点以下60点以上ならば,「OKです」 60点未満ならば,「がんばりましょう」 と判定・表示するプログラムを作成せよ.
繰り返し制御 ある処理を繰り返し行う 開始 開始 処理1 処理1 処理2 処理2 処理3 処理3 終了 終了 n回 繰り返す ある条件の間,繰り返す 処理3 処理3 終了 終了
繰り返し制御の方法 for文を使う方法 while文を使う方法 do-while文を使う方法
for文 希望する回数だけ処理を繰り返し行う for (初期設定式; 継続条件式; 再設定式) { 文1; 文2; … } (例) for ( i = 0; i < 10; i++ ) { 文; }
for文 for (初期設定式; 継続条件式; 再設定式) 初期設定式:最初のみ実行される式 継続条件式:繰り返し行うための条件式 (この条件式が真の間は繰り返す) 再設定式:一回のループ終了時に実行される式
for文 for ( i = 初期値; i < iの上限値; iの増加量) 初期値:変数iの初期値
for文 for ( i = 0; i < 3; i++ ) { 文A; } 文B; 0→ i i < 3 文A 次行に書いてもOK for ( i = 0; i < 3; i++ ) { 文A; } 文B; 0→ i FALSE 3回繰り返す i < 3 TRUE 文A iを1増やす i + 1→ i 文B
for文のプログラム int i; printf(“--- for文開始\n”); for (i = 0; i < 10; i++) { printf(“iの値は%d\n”,i); } printf(“--- for文終了\n”); --- for文開始 iの値は0 iの値は1 iの値は2 … iの値は9 --- for文終了 iの値は10
for文のプログラム int i; printf(“--- for文開始\n”); for (i = 0; i <= 10; i++) { print(“iの値は%d\n”,i); } printf(“--- for文終了\n”); printf(“iの値は%d\n”,i); ループが1回増える(11回) --- for文開始 iの値は0 iの値は2 … iの値は8 iの値は9 iの値は10 --- for文終了 iの値は11
for文のプログラム int i; printf(“--- for文開始\n”); for (i = 0; i < 10; i+=2) { print(“iの値は%d\n”,i); } printf(“--- for文終了\n”); printf(“iの値は%d\n”,i); iは2ずつ増えている --- for文開始 iの値は0 iの値は2 iの値は4 … iの値は8 --- for文終了 iの値は10
for文のプログラム int i; printf(“--- for文開始\n”); for (i = 3; i < 10; i+=2) { print(“iの値は%d\n”,i); } printf(“--- for文終了\n”); printf(“iの値は%d\n”,i); iの初期値は3になった iは2ずつ増えている 最終的にiは11 --- for文開始 iの値は3 iの値は5 iの値は7 iの値は9 --- for文終了 iの値は11
for文のプログラム int i; printf(“--- for文開始\n”); for (i = 10; i > 0; i--) { print(“iの値は%d\n”,i); } printf(“--- for文終了\n”); printf(“iの値は%d\n”,i); iの初期値は10 iは1ずつ減少 最終的にiは0 --- for文開始 iの値は10 iの値は9 … iの値は1 --- for文終了 iの値は0
1から10までの和を求めよう 開始 0 → sum 1→ i i <= 10 sum + i → sum i + 1→ i 終了 10回繰り返す FALSE i <= 10 sumにiを加える TRUE sum + i → sum iを1増やす i + 1→ i 終了
1から10までの和を求めてみよう int i; int sum; sum = 0; for ( i = 1; i <= 10; i++ ) { sum = sum + i; printf(“ i = %d sum = %d\n”,i,sum); } printf(“1から10までの和は%dです\n”,sum); sumとiの和を,sumに代入 sum += i;
1から10までの奇数だけの和を求めてみよう int i; int sum; sum = 0; for ( i = 1; i <= 10; i+=2 ) { sum += i; printf(“ i = %d sum = %d\n”,i,sum); } printf(“1から10までの奇数の和は%dです\n”,sum);
1から10までの奇数だけの和を求めてみよう int i; int sum; sum = 0; for ( i = 1; i <= 10; i++ ) { if ( i % 2 == 1 ) sum = sum + i; printf(“ i = %d sum = %d\n”,i,sum); } printf(“1から10までの奇数の和は%dです\n”,sum);
多重ループ 九九の表を表示するプログラムを作りたい
1の段 for ( i = 1; i <= 9; i++) { printf(“%d ”, i); }
2の段 for ( i = 1; i <= 9; i++) { printf(“%d ”, i*2); }
1から3までの段をまとめて表示 問題3: 『 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27』 と表示するプログラムを作りなさい.
多重ループ ×3 int i; for (i = 1; i <= 9; i++) { printf(“%d “, i*?); } int i; for (i = 1; i <=9; i++) { printf(“%d “, i); } printf(“\n”); printf(“%d “, i*2); printf(“%d “, i*3); int i; for (i = 1; i <= 9; i++) { printf(“%d “, i*?); } printf(“\n”); ×3 まとめる! 「?」は1回目は1,2回目は2,3回目は3、という具合に変化すれば良い
多重ループ for (j = 1; j <= 3; j++) { for (i = 1; i <= 9; i++) { printf(“%d “, i*?); } printf(“\n”); i*j); }
多重ループ for (j = 1; j <= 9; j++) { for (i = 1; i <= 9; i++) { printf(“%2d “, i*j); } printf(“\n”); }
多重ループ for (… ) { for (…) { 文; }
while文のプログラム while (継続条件式) { 文1; 文2; … } 継続条件式が真(0以外) ⇒ 文1,文2,…を繰り返す 継続条件式が真(0以外) ⇒ 文1,文2,…を繰り返す 継続条件式が偽にならないと,ループから抜け出せない
while文のプログラム int n; n = 1; while (n < 10) { printf(“好きな数を入力してください”); scanf(“%d”,&n); printf(“入力値は%d\n”,n); } printf(“やっとwhile文を抜けましたね\n”);
while文のプログラム(無限ループ) TRUE while (1) { printf(“好きな数を入力してください”); scanf(“%d”,&n); printf(“入力値は%d\n”,n); } printf(“やっとwhile文を抜けましたね\n”); 無限ループ (いつまで経っても抜けられないループ)
while文のプログラム(break) 無限ループ while (1) { printf(“好きな数を入力してください”); scanf(“%d”,&n); printf(“入力値は%d\n”,n); if ( n == 1192 ) break; } printf(“やっとwhile文を抜けましたね\n”); ループを強制的に抜ける
while文のプログラム(break) while (1) { printf(“暗証番号は?”); scanf(“%d”,&n); if ( n == 1192 ) break; else printf(“暗証番号が間違っています\n”); } printf(“暗証番号を確認しました\n”);
繰り返し制御(1からnまでの和) 開始 0 → sum 1→ i i <= n sum + i → sum i + 1→ i 終了 FALSE i <= n sumにiを加える TRUE sum + i → sum iを1増やす i + 1→ i 終了
繰り返し制御(1からnまでの和) for文を使う方法 sum = 0; for ( i=1; i <= n; i++ ) { n回繰り返す (for文実行条件) for文を使う方法 sum = 0; for ( i=1; i <= n; i++ ) { sum += i; // sum = sum + iでも同じ } 初期値 増加量
繰り返し制御(1からnまでの和) while文を使う方法 sum = 0; i = 1; while ( i <= n ) { sum += i; // sum = sum + iでも同じ i++; } 初期値 n回繰り返す (while文実行条件) 増加量
繰り返し制御(1からnまでの和) for文を使う方法 for (式1;式2;式3) { 文; } while文を使う方法 式1; 文; 式3;
繰り返し制御(1からnまでの和) 開始 開始 0 → sum 0 → sum 1→ i i <= n sum + i → sum 合計 i : 1, 1, n FALSE i <= n sum + i → sum TRUE sum + i → sum 合計 i + 1→ i 終了 終了
繰り返し制御(1からnまでの和) 合計 i : 1, 1, n 開始 0 → sum ループ端 sum + i → sum 終了 合計 増加量 0 → sum ループ端 合計 i : 1, 1, n 合計 i : 1, 1, n sum + i → sum 変数名 n回繰り返す 合計 初期値 終了
繰り返し(do-while文) int main() { int i, n; int sum = 0; printf(“n = “); scanf(“%d”,&n); 負の値が入力されたときは,繰り返す nに負の値を入力されると,計算できない nに正の値が入力されるまで,入力状態とする
繰り返し(do-while文) 入力部分のフローチャート nを入力 n <=0 FALSE TRUE
nの値によっては,while文に入らないこともある! 繰り返し(do-while文) int main() { int i, n; int sum = 0; while ( n <= 0 ) { printf(“n = “); scanf(“%d”,&n); } nの値によっては,while文に入らないこともある! while文 ⇒ ループの最初に条件判定が行われる
繰り返し(do-while文) int main() { int i, n; int sum = 0; while ( n <= 0 ) { printf(“n = “); scanf(“%d”,&n); } do { printf(“n = “); scanf(“%d”,&n); } while (n <= 0); while文 ⇒ ループの最初に条件判定が行われる do-while文 ⇒ ループの最後に条件判定が行われる