PowerPoint プレゼンテーション - Multi Media Club

「君が
泣くまで 殴るのをやめない!!」と
似たようなこと(本当か?)
第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