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