5.
繰り返し処理:用例
繰り返し処理:用例
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 文では次のように処理が実行されます。
- 式 n = 13 が実行されます。
- 式 n < 1000 が評価され、真(True)であれば、for()に続く文が実行されます。
- 式 n += 13 が実行されます。
- 再び、式 n < 1000 が評価され、偽(False)になるまで、繰り返されます。
最初に学生数を入力します。(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 による除算が実行されてしまいます。
何月であるかを入力し、その月の日数を表示します。
正しい数値が入力されるまで、繰り返して入力を促します。
#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()の後にはセミコロン‘;’が必要ですから注意してください。
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より大きい日数が入力された場合には、何も表示しません。
10 人分の試験の点数( 0 ~ 100 )を入力し、平均点を表示するプログラムです。
ただし、不合格である 60 点未満は、平均に加えません。
#include <stdio.h>
main( )
{
int count = 0;
int total = 0;
int i;
for( i = 0 ; i < 10 ; i++ ){
int point;
printf( "学生%dの得点を入力してください\n", i + 1 );
scanf( "%d", &point );
if( point < 60 )
continue;
total += point;
count++;
}
if( count > 0 ){
printf( "合格者の平均点は%d点です。\n", total / count );
}
}
- 入力された得点が60点未満の場合、continue文によって次の繰り返しに移行します。
- 60点以上の学生が0人の場合を考慮しています。