Top >C言語 練習問題集

5. 繰り返し処理

練習問題 5 - 1

SPAMという単語を 10 回表示するプログラムを作成しなさい


int i;

for( i = 0 ; i < 10 ; i++ )
    printf( "SPAM " );
※  for( i = 1 ; i <= 10 ; i++ )
としても 10 回の繰り返しになりますが、配列との関係で例のように記述する方が一般的といえるでしょう
※  for( i = 0 ; i <= 9 ; i++ )
のような記述では、10 回の繰り返しであることが、若干、分りにくくなります

練習問題 5 - 2

九九、三の段( 3 ~ 27 の 3 の倍数)を表示するプログラムを作成しなさい


int i;

for( i = 1 ; i <= 9 ; i++ )
    printf( "%d ", 3 * i );

練習問題 5 - 3

2 の 1 乗から 8 乗までを計算し表示するプログラムを作成しなさい


int x = 1;
int i;

for( i = 1 ; i <= 8 ; i++ )
{
    x *= 2;
    printf( "2の%d乗=%d\n", i, x );
}

練習問題 5 - 4

7 の階乗を計算し、表示するプログラムを作成しなさい


int x = 1;
int i;

for( i = 2 ; i <= 7 ; i++ )
    x *= i;

printf( "%d", x );

練習問題 5 - 5

整数を 10 回入力し、平均値を求めるプログラムを作成しなさい


int sum = 0;
int value;
int i;

for( i = 0 ; i < 10 ; i++ )
{
    scanf( "%d", &value );
    sum += value;
}

printf( "平均は%d", sum / 10 );

変数 value は、次の位置で宣言してもかまいません

int sum = 0;
int i;

for( i = 0 ; i < 10 ; i++ )
{
    int value;    // ←forに続くブロックの先頭

    scanf( "%d", &value );
    sum += value;
}

printf( "平均は%d", sum / 10 );

練習問題 5 - 6

整数、0 か 1 を 10 回入力するこれを対戦成績と考え、0 を負け、1 を勝ちとして、勝ちの総数、負けの総数を表示するプログラムを作成しなさい


int wins = 0;
int result;
int i;

for( i = 0 ; i < 10 ; i++ )
{
    scanf( "%d", &result );

    if( result == 1 )
        wins++;
}

printf( "勝ち%d回、負け%d回", wins, 10 - wins );

練習問題 5 - 7

次のプログラムを作成しなさい

  • 巨人、阪神戦で毎回の得点を入力する(1 回 ~ 9 回)
  • 入力が終わったら、それぞれの得点とどちらが勝ったか、引き分けかを表示する

int    giants = 0;
int    tigers = 0;
int    game;

for( game = 1 ; game <= 9 ; game++ )
{
    int score;

    printf( "%d回表、巨人の得点は?", game );
    scanf( "%d", &score );
    giants += score;

    printf( "%d回裏、阪神の得点は?", game );
    scanf( "%d", &score );
    tigers += score;
}

printf( "巨人:%d点, 阪神:%d点\n", giants, tigers );

if( giants > tigers )
    printf( "巨人の勝ち" );
else if( giants < tigers )
    printf( "阪神の勝ち" );
else
    printf( "引き分け" );

練習問題 5 - 8

自然数(正の整数)を 10 回入力し、最大値を求めるプログラムを作成しなさい


int max_value = 0;
int value;
int i;

for( i = 0 ; i < 10 ; i++ )
{
    scanf( "%d", &value );

    if( value > max_value )
        max_value = value;
}

printf( "最大値=%d", max_value );

練習問題 5 - 9

整数を 10 回入力し、最大値と最小値を求めるプログラムを作成しなさい


int max_value;
int min_value;
int value;
int i;

for( i = 0 ; i < 10 ; i++ )
{
    scanf( "%d", &value );

    if( i == 0 )
    {
        max_value = value;
        min_value = value;
    }
    else
    {
        if( value > max_value )
            max_value = value;

        if( value < min_value )
            min_value = value;
    }
}

printf( "最大値=%d 最小値=%d", max_value, min_value );
別の解答例
int max_value;
int min_value;
int value;
int i;

for( i = 0 ; i < 10 ; i++ )
{
    scanf( "%d", &value );

    if( i == 0 || value > max_value )
        max_value = value;

    if( i == 0 || value < min_value )
        min_value = value;
}

printf( "最大値=%d 最小値=%d", max_value, min_value );

練習問題 5 - 10

個数を示す数値を入力し、その個数分だけ*を表示するプログラムを作成しなさい


int count;
int i;

scanf( "%d", &count );

for( i = 0 ; i < count ; i++ )
    printf( "*" );
while文を使用した解答例
int count;

scanf( "%d", &count );

while( count > 0 )
{
    printf( "*" );
    count--;
}

練習問題 5 - 11

個数を示す数値を入力し、その個数分だけ 0 ~ 9 の数字を表示するプログラムを作成しなさい数字は 0 , 1 , 2 , 3 , , の順に表示し、9 の次は 0 に戻るものとします


int count;
int i;
int out = 0;

scanf( "%d", &count );

for( i = 0 ; i < count ; i++ )
{
    printf( "%d", out++ );

    if( out > 9 )
        out = 0;
}
別の解答例
int count;
int i;

scanf( "%d", &count );

for( i = 0 ; i < count ; i++ )
    printf( "%d", i % 10 );

練習問題 5 - 12

10000 より小さい 3 の累乗( 3, 9, 27, , , )をすべて表示するプログラムを作成しなさい


int pow = 3;

while( pow < 10000 )
{
    printf( "%d ", pow );

    pow *= 3;
}

練習問題 5 - 13

数値を繰り返し入力し、合計が 100 を超えたら入力を止めて合計を表示するプログラムを作成しなさい


int sum = 0;
int value;

while( sum <= 100 )
{
    scanf( "%d", &value );

    sum += value;
}

printf( "合計は%d", sum );

練習問題 5 - 14

ストライク・カウントを数えるプログラムを作成しなさい

  • 1球ごとにストライクかボールかを入力する
  • 3ストライクまたは4ボールになったら入力を止め、ストライクとボールのカウントを表示する

int     judge;
int     strike = 0;
int     ball = 0;

while( strike < 3 && ball < 4 )
{
    printf( "ストライク=1 or ボール=2 ?" );
    scanf( "%d", &judge );

    if( judge == 1 )
        strike++;
    else if( judge == 2 )
        ball++;
}

printf( "%dボール,%dストライク", ball, strike );

練習問題 5 - 15

前の問題に次の修正を加えなさい

  • 1球ごとにストライク、ボール、ファウルの何れかを入力する(残念ながらヒットにはなりません)
  • ファウルの場合、2ストライクまではストライクにカウントするが、3ストライクにはならない
  • 3ストライクまたは4ボールになったら入力を止め、ストライクとボールのカウントを表示する

int     judge;
int     strike = 0;
int     ball = 0;

while( strike < 3 && ball < 4 )
{
    printf( "ストライク=1 or ボール=2 or ファウル=3?" );
    scanf( "%d", &judge );

    if( judge == 1 )
        strike++;
    else if( judge == 2 )
        ball++;
    else if( judge == 3 && strike < 2 )
        strike++;
}

printf( "%dボール,%dストライク", ball, strike );

練習問題 5 - 16

入力された数が素数かどうかを判定するプログラムを作成しなさい


int value;
int i;

scanf( "%d", &value );

for( i = 2 ; i <= ( value / 2 ) ; i++ )
{
    if( ( value % i ) == 0 )
        break;
}

if( i > ( value / 2 ) )
    printf( "%dは素数です", value );
else
    printf( "%dは素数ではありません", value );

練習問題 5 - 17

2 以上の数値を入力し、素因数分解した結果を表示しなさい


int     n, x;

scanf("%d", &n );

for( x = 2 ; n > 1 ; x++ )
{
    while( ( n % x ) == 0 )
    {
        printf( "%d ", x );
        n /= x;
    }
}

練習問題 5 - 18

九九表(一の段~九の段)を表示するプログラムを作成しなさい


int p, q;

for( p = 1 ; p <= 9 ; p++ )
{
    for( q = 1 ; q <= 9 ; q++ )
        printf( " %2d", p * q );

    printf( "\n" );
}

練習問題 5 - 19

数値を繰り返して入力し、0 が入力されたら入力を止め、それまでの合計を表示するプログラムを作成しなさい


int sum = 0;

for( ; ; )
{
    int value;

    scanf( "%d", &value );

    if( value == 0 )
        break;

    sum += value;
}

printf( "合計は%d", sum );

練習問題 5 - 20

数値を繰り返して入力し、0 が入力されたら入力を止め、平均値を表示するプログラムを作成しなさい


int sum = 0;
int count = 0;

for( ; ; )
{
    int value;

    scanf( "%d", &value );

    if( value == 0 )
        break;

    sum += value;
    count++;
}

printf( "平均は%d", sum / count );
※ sum / count のような計算には注意問題の条件から count は 0 では無いが、0 の可能性がある場合には割り算を実行してはならない

練習問題 5 - 21

サイズを示す数値を入力し、何等かの文字で例のような三角形を表示するプログラムを作成しなさい


int size;
int i, j;

scanf( "%d", &size );

for( i = 0 ; i < size ; i++ )
{
    for( j = 0 ; j <= i ; j++ )
        printf( "$" );

    printf( "\n" );
}

練習問題 5 - 22

サイズを示す数値を入力し、何等かの文字で、そのサイズの×印を表示するプログラムを作成しなさい


int size;
int i, j;

scanf( "%d", &size );

for( i = 0 ; i < size ; i++ )
{
    for( j = 0 ; j < size ; j++ )
    {
        if( i == j || ( size - i - 1 ) == j )
            printf( "X" );
        else
            printf( " " );
    }

    printf( "\n" );
}

練習問題 5 - 23

フィボナッチ数列を表示するプログラムを作成しなさい

最初の2つの項を 0、1 とし、1000 まで( 1000 以下の項)を表示するものとします


int     n1 = 0;
int     n2 = 1;
int     n3 = n1 + n2;

while( n1 <= 1000 )
{
    printf( "%d,", n1 );

    n1 = n2;
    n2 = n3;
    n3 = n1 + n2;
}
PAPER BOWL
NEZEN