基本制御文(While7)★


では、入力と繰り返しを組み合わせたプログラムを考えてみます。

とりあえず、指定した回数だけ何かを行うプログラムを作って見ましょう。


まずは、指定した個数の「*」を表示するプログラムです。

実際に考えてもらう前に少し説明をします。

例えば、「*」を5つ表示するプログラムを考えてみます。

<sample program 034-01>

#include <stdio.h>

int main( void )
{
    printf( "*****\n" );

    return 0;
}

<実行結果 VC++ Express Edition>

*****
続行するには何かキーを押してください・・・

前回と同じく、これで5つ表示できます。

が、100個表示するとか1000個とかになると「*」を打つのも大変です。

やはり、繰り返しを使った方が簡単になります。

キーボードから入力した数値分だけ「*」を表示するプログラム、
実行結果を書いておきますので、繰り返しを使って実際に作ってみてください。

<実行結果1 VC++ Express Edition>

*を表示する個数を入力してください:5
*****
続行するには何かキーを押してください・・・

<実行結果2 VC++ Express Edition>

*を表示する個数を入力してください:10
**********
続行するには何かキーを押してください・・・









































解答例です。


<sample program 034-02>

#include <stdio.h>

int main( void )
{
    int counter;
    int input;

    counter = 0;

    printf( "*を表示する個数を入力してください:" );

    scanf( "%d", &input );

    while( counter < input ) {
        printf( "*" );
        counter = counter + 1;
    }

    printf( "\n" );

    return 0;
}

<実行結果 VC++ Express Edition>

*を表示する個数を入力してください:5
*****
続行するには何かキーを押してください・・・

while文の繰り返し条件を見てください。

カウンタを使って繰り返し回数を決定する時に、5回の繰り返しであれば

<sample program 034-03>

#include <stdio.h>

int main( void )
{
    int counter;

    counter = 0;

    while( counter < 5 ) {

        counter = counter + 1;
    }

    return 0;
}

と設定します。 また、10回であれば、

<sample program 034-04>

#include <stdio.h>

int main( void )
{
    int counter;

    counter = 0;

    while( counter < 10 ) {

        counter = counter + 1;
    }

    return 0;
}

と設定します。

つまり、繰り返し条件のところに書いてある数だけ繰り返しが行われるという仕組みです。

今回は、入力した数値(変数inputの中身)分だけ繰り返せば良いのです。


また、次の方法でも実現できます。


<sample program 034-05>

#include <stdio.h>

int main( void )
{
    int counter;

    printf( "*を表示する個数を入力してください:" );

    scanf( "%d", &counter );

    while( counter > 0 ) {
        printf( "*" );
        counter = counter - 1;
    }

    printf( "\n" );

    return 0;
}

<実行結果 VC++ Express Edition>

*を表示する個数を入力してください:5
*****
続行するには何かキーを押してください・・・

カウンタに直接回数を入力し、0になるまで減らすことで回数を数えています。

いわゆるカウントダウン方式です。

counterが0になったら終了するので、次のように書くこともできます。


<sample program 034-06>

#include <stdio.h>

int main( void )
{
    int counter;

    printf( "*を表示する個数を入力してください:" );

    scanf( "%d", &counter );

    while( counter ) {
        printf( "*" );
        counter = counter - 1;
    }

    printf( "\n" );

    return 0;
}

<実行結果 VC++ Express Edition>

*を表示する個数を入力してください:5
*****
続行するには何かキーを押してください・・・

whileの繰り返し条件はif文の条件と同じですから、0で成り立たなくなります。

入力した数値から1ずつ減らして行き、0になった時点で終了します。


さて、ここでカウンタで使われてる、

counter = counter + 1; (変数counterの中身を1増やす)

counter = counter - 1; (変数counterの中身を1減らす)

といった部分について新しい書き方を説明しておきます。


これは次のように書き換えることが出来ます。

counter += 1; (変数counterの中身を1増やす)

counter -= 1; (変数counterの中身を1減らす)

この書き方であれば、counterという変数名を2回書かなくてもよくなります。

1の部分を2に変えれば2ずつ増えたり、減ったりします。

また、「*=」や「/=」という書き方もあります。

どれも、演算を行った後で代入するという意味です。


さらに、1増やしたり、1減らしたりするためだけの書き方もあります。

counter++;(変数counterの中身を1増やす)

counter--;(変数counterの中身を1減らす)

++をインクリメント演算子、--をデクリメント演算子と言います。

この演算子は次のように使うこともできます。

++counter;(変数counterの中身を1増やす)

--counter;(変数counterの中身を1減らす)

前に付けるか、後ろに付けるかで少々意味が変わってくるのですが、
細かい話を除けば、1増やしたり、1減らしたりする専用の演算子です。

細かい話が知りたい方は「インクリメント、デクリメント」を読んでください。


とりあえず、使ってみてから・・・という方は先へ進みましょう。

<sample program 034-02>をインクリメント演算子を使って、
<sample program 034-05>をデクリメント演算子を使って書き換えてみましょう。


<sample program 034-07>

#include <stdio.h>

int main( void )
{
    int counter;
    int input;

    counter = 0;

    printf( "*を表示する個数を入力してください:" );

    scanf( "%d", &input );

    while( counter < input ) {
        printf( "*" );
        counter++;           /* インクリメント */
    }

    printf( "\n" );

    return 0;
}

<実行結果 VC++ Express Edition>

*を表示する個数を入力してください:5
*****
続行するには何かキーを押してください・・・

<sample program 034-08>

#include <stdio.h>

int main( void )
{
    int counter;

    printf( "*を表示する個数を入力してください:" );

    scanf( "%d", &counter );

    while( counter > 0 ) {
        printf( "*" );
        counter--;           /* デクリメント */
    }

    printf( "\n" );

    return 0;
}

<実行結果 VC++ Express Edition>

*を表示する個数を入力してください:5
*****
続行するには何かキーを押してください・・・

次回から、1だけ増やす場合や1だけ減らす場合はインクリメント、デクリメント演算子を使いましょう。


次へ

戻る

目次へ