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