「君が 泣くまで 殴るのをやめない!!」と 似たようなこと(本当か?) 第4章 繰り返し 1 条件を立てて、それを満たすなら true (真)、満 たさないなら false (偽)となる 条件を満たすか満たさないかで処理を変える、 条件分岐 if と switch 文 第4章 繰り返し 2 同じ処理を繰り返させる方法 条件の設定とループさせる記述 ループから抜ける方法 さらなる計算の記号(演算子) ループから強制的に抜ける方法 ひとつ前にやった true と false がここでも活躍するよ 第4章 繰り返し 3 たとえば、「オラ」という文字を 10 回表示さ せたいとき、今までだと ⇒な感じに書かなきゃいけ ない 100 回だともっとしんどい 同じことをさせたいなら、 繰り返し文が実に有効!! printf(“オラ”); printf(“オラ”); printf(“オラ”); printf(“オラ”); printf(“オラ”); printf(“オラ”); printf(“オラ”); printf(“オラ”); printf(“オラ”); printf(“オラ\n”); 第4章 繰り返し 4 処理の繰り返しをさせる文は 書き方例: while 文 while( num == 0 ){ printf(“オラ”); } 『()』内に条件を書き入れ、それを満たす限り (すなわち true )『{}』内の作業をさせ続ける 第4章 繰り返し 5 ちょっと実行(Ctrl + F5)してみよう #include <stdio.h> void main(){ int num = 0; while( num == 0 ){ printf(“オラ”); } } 実行してヤバイと思ったら×押してね 第4章 繰り返し 6 これはヤバイ・・・ このように while 文は条件を満たし続 ける限り無限に処理 をループし続ける ↑この間大抵のキー操作も受け付けない ループを抜けるにはどうにか『()』内の条件を 満たさない( false )ようにするしかない 第4章 繰り返し 7 さっきのプログラムを以下のように書き換えて 実行してみよう ここで『++』とは 『num = num + 1 ;』 と同じ処理だよ #include <stdio.h> void main(){ int num = 0; ちなみに『--』は 『num = num – 1 ;』 と同じ } while( num < 10 ){ printf(“オラ”); num++; } printf(“\n”); 第4章 繰り返し 8 ほっ(安堵) これは while 文の『{}』内にあった『 num++;』によって、 10回ループした後に『num』の値が 10 になっ てしまい、『num < 10』の条件をクリアできな くなってしまった。これでループから抜け出た ちなみに『printf(“\n”);』はこの位置だと、 while文を抜けた後に実行することになる 第4章 繰り返し 9 図にする と⇒かな? ループの 中に条件内 の変数を いじる記述 を加えて、 ループを脱 出する 第4章 繰り返し 10 以下の実行結果と同じようになるように、プロ グラムを書いてみよう(while 文使って) このプログラムは入力した数だけ『★』を表示 させるよ ヒント:変数を2個くらい作ってみて 変数:int num; とかのこと 第4章 繰り返し 11 #include <stdion.h> void main(){ int num1,num2 = 0; printf(“何個★を表示しますか? > ”); scanf(“%d”,&num1); while( num2 < num1 ){ printf(“★”); num2++; } printf(“\n”); } 上の『printf(“★”); num2++;』のように、改 行せず『;』で文をつないでもよい(全般的に) 第4章 繰り返し 12 きまぐれに別回答でも #include <stdio.h> void main(){ int num; printf(“何個★を表示しますか? > ”); scanf(“%d”,&num); while( num > 0){ printf(“★”); num--; } printf(“\n”); } 変数がひとつになって書く量が減ってます 第4章 繰り返し 13 条件を満たさないよう変数を変化させる以外に、 無理やりループ(反復)から脱出する方法がある break 文(switch でも見たはず) それが 使い方は『break;』と記述するだけ 使用例は次のスライド 第4章 繰り返し 14 では以下のプログラムを実行してみよう #include <stdio.h> void main(){ int num = 1; while( num == 1){ printf(“無駄”); break; } printf(“\nループから脱出しました\n”); } 第4章 繰り返し 15 実行結果⇒ while のループ から脱出完了 ちなみに switch 文では『{}』の中から脱出し ているようです switch( num ){ case 0: break; case 1: break; そのままだと下の『case』の処理 もやってしまうらしい } 第4章 繰り返し 16 さっき説明した『++』、『--』以外にも a += 3; ← a = a+3; b -= 8; ← b = b-8; c *= 4; ← c = c*4; d /= 5; ← d = d/5; 必ずあらかじめ変数(ここだとabcd)に値を入れ ておいてね(これを初期化という) 第4章 繰り返し 17 説明を省いていたけど、変数は宣言をした後、 必ず初めに何か値を入れておかないとまずい 例: int num = 0; int a; a = 3; さっきの計算だと ←↑これが初期化 やらないと実行時に エラーが出る a += 3; ← a = a + 3; 代入する数(右辺)にも『a』があり、これがNG 第4章 繰り返し 18 以下のように、数値を入力させ、その階乗を表 示するプログラムをつくってみよう ヒント:『{}』内には『ans *= i;』(ans と i は変数) 1ループごとに『i』の値が増えていく(どこまで?) 第4章 繰り返し 19 #include <stdio.h> void main(){ int num,i,ans; i = 1; ans = 1; printf(“数値を入力してください > ”); scanf(“%d”,&num); while( i <= num ){ ans *= i ; i++; } printf(“%d! = %d\n”, num, ans); } 第4章 繰り返し 『<=』 が地味に ポイント これで今 回はおし まい(解 散) 20 0を入力するまで、相手を殴るプログラムをつ くってみよう なんてしょうもない問題だろう 実行結果は以下の通り ヒント:if 文を使い、1回目 に0の時と、2回目以降に0 が入力されたときの表示を 分けてみる 第4章 繰り返し 21 もっといい記述方法がある気がしてならない #include <stdio.h> void main(){ int num; printf("0:殴らない それ以外:殴る\n"); printf("殴りますか? > "); scanf("%d",&num); if(!num) printf("(・ω・)フッ 大したことねえな\n"); while(num != 0){ printf(";;;;;、(>ω(:;(⊂=⊂≡ (・ω・ #)\n"); printf("まだ殴りますか? > "); scanf("%d",&num); if(!num) printf("(TωT)スイマセンでした\n"); } 第4章 繰り返し 22 ループをさせる文の続き 新たな繰り返し文の仕様 while 文とどう違うのか ゲームでは while より使う(はず)の for 文の登場 実際にやる内容はここにある限りじゃないかもしれません 第4章 繰り返し 23 テンプレ 第4章 繰り返し 24
© Copyright 2025 ExpyDoc