目次

 

 

 

 

 

 

Top >C言語入門 とりあえずのC言語

5. 繰り返し処理:用例

繰り返し処理:用例
用例 5.1

 1000 より小さい 13 の倍数を全て表示するプログラムです

 

 以下は、while文を使用した例です

#include <stdio.h>

main( )
{
    int     n = 13;

    while( n < 1000 ){
        printf( "%d ", n );
        n += 13;
    }
}
  • int型の変数nを宣言し、初期値を13とします
  • while文の繰り返し条件は、nが1000より小さいです
  • nの値を表示し、nに13を加える処理を繰り返します
  • nが1000以上になると、繰り返し条件が偽(False)となり、繰り返しを終了します

 

 以下は、for 文を使用した例です

#include <stdio.h>

main( )
{
    int     n;

    for( n = 13 ; n < 1000 ; n += 13 )
        printf( "%d ", n );
}

 for 文では次のように処理が実行されます

  1. 式 n = 13 が実行されます
  2. 式 n < 1000 が評価され、真(True)であれば、for()に続く文が実行されます
  3. 式 n += 13 が実行されます
  4. 再び、式 n < 1000 が評価され、偽(False)になるまで、繰り返されます
用例 5.2

 最初に学生数を入力します(1 人以上とします)

 次に、学生数だけ試験の点数を入力し、最後に平均点を表示します

#include <stdio.h>

main( )
{
    int     count;    // 学生数のための変数です
    int     total;    // 得点合計のための変数です
    int     i;

    printf( "学生数を入力してください(1以上)\n" );
    scanf( "%d", &count );

    for( i = 0, total = 0 ; i < count ; i++ ){
        int     point;    // 得点を入力するための変数です

        // 得点を入力し、合計に加えます
        printf( "学生%dの得点を入力してください\n", i + 1 );
        scanf( "%d", &point );
        total += point;
    }

    // 平均点を計算し表示します
    printf( "平均点は%d点です。\n", total / count );
}
  • for文を使用し、学生数だけ繰り返しを実行します
  • 変数 i は、繰り返しの回数を数えるために使用します
  • 変数pointに得点を入力し、変数totalに加えます
  • 最後に平均点を計算し表示します小数点以下は切り捨てられます
  • 学生数として 0 を入力しないよう、注意してください平均点の計算で 0 による除算が実行されてしまいます
用例 5.3

 何月であるかを入力し、その月の日数を表示します

 正しい数値が入力されるまで、繰り返して入力を促します

#include <stdio.h>

main( )
{
    int     month;

    do{
        printf( "何月ですか?\n" );
        scanf( "%d", &month );
    }while( ! ( 1 <= month && month <= 12 ) );

    if( month == 2 )
        printf( "28日または29日です\n" );
    else if( month == 4 || month == 6 || month == 9 || month == 11 )
        printf( "30日です\n" );
    else
        printf( "31日です\n" );
}
  • do~while文を使用していますwhile文と異なり、繰り返す文を実行してから繰り返し条件を評価します
  • whileの条件式に注意してください1月~12月ではない間、繰り返しを行います
    書き方を変えれば、month < 1 || month > 12 と、なります
  • while()の後にはセミコロン;が必要ですから注意してください
用例 5.4

 1 月 1 日から経過した日数( 1 ~ 365 )を入力し、その日が何月であるかを調べるプログラムです

 日数が 1 日の場合に 1 月 1 日とし、うるう年ではないものとします

#include <stdio.h>

main( )
{
    int     days;
    int     m;
    int     end;

    printf( "何日目ですか?\n" );
    scanf( "%d", &days );

    for( m = 1, end = 0 ; m <= 12 ; m++ ){
        if( m == 2 )
            end += 28;
        else if( m == 4 || m == 6 || m == 9 || m == 11 )
            end += 30;
        else
            end += 31;

        if( days <= end ){
            printf( "%d月です\n", m );
            break;        // 繰り返しから抜けます
        }
    }
}
  • 1月から各月の日数を加算し、入力された日数を超えた月が該当する月です
  • 該当する月が見つかったら、break文で繰り返しを終了します
  • 365より大きい日数が入力された場合には、何も表示しません
用例 5.5

 10 人分の試験の点数( 0 ~ 100 )を入力し、平均点を表示するプログラムです

 ただし、不合格である 60 点未満は、平均に加えません

#include <stdio.h>

main( )
{
    int     count = 0;    // 60点を上回った学生数
    int     total = 0;    // 得点合計
    int     i;

    for( i = 0 ; i < 10 ; i++ ){
        int     point;    // 得点を入力するための変数です

        // 得点を入力します
        printf( "学生%dの得点を入力してください\n", i + 1 );
        scanf( "%d", &point );

        if( point < 60 )    // 60点未満は無視します
            continue;

        // 合計に加えます
        total += point;
        count++;
    }

    if( count > 0 ){    // 0で除算しないため
        printf( "合格者の平均点は%d点です。\n", total / count );
    }
}
  • 入力された得点が60点未満の場合、continue文によって次の繰り返しに移行します
  • 60点以上の学生が0人の場合を考慮しています
PAPER BOWL
NEZEN