第6回 繰り返し (5/26)


前回の演習の答え

1.自然数nを入力し,偶数か奇数か判定する

まず,問題が与えられたら,プログラムの実行手順を考えよう

1. 自然数を入力する

2. 偶数か奇数か判定する

となる.2の内容を詳細に検討しよう.偶数か奇数かを判定するには入力した値を2で割ったあまりで判断してやればよい.

2.1 入力された値を2でわったときのあまりが

2.1T 0のとき 「偶数です」
2.1F 1のとき 「奇数です」

これを,プログラムにしてみよう.


解答例:

#include <stdio.h>

void main()
{
    int n;

    printf("自然数を入力してください"); scanf("%d", &n);

    if(n%2 == 0)
        printf("%dは偶数です\n", n);
    else
        printf("%dは奇数です\n", n);
}

2.テストの点数(0点から100点の整数)を入力し,その値によって,優,良,可,不可を表示する.

点数
成績
80点以上
60点以上80点未満
50点以上60点未満
50点未満
不可

これも,プログラミングにかかる前に,手順を確認しておこう.

1. テストの点数を入力する

2.1 テストの点数が
2.1A 80点以上 「優」
2.1B 60点以上 「良」
2.1C 50点以上 「可」
2.1D それ以外 「不可」


解答例:

#include <stdio.h>

void main()
{
    int n;

    printf("テストの点数を入力してください"); scanf("%d", &n);

    if(n >= 80)
        printf("優\n");
    else if(n >= 60)
        printf("良\n");
    else if(n >= 50)
        printf("可\n");
    else
        printf("不可\n");
}

間違えやすいポイント

× if(a%2 = 0) 等

× if(60 <= n < 80) 等

どこが間違っているかわかりますか?


コンピュータは同じ処理を何度も繰り返し実行するのが得意です.今週から,繰り返しについて学習します.

たとえば,「1から100の和を求めるプログラムを作れ」という課題が与えられたら,どうやってプログラムを組むか考えてみよう.

sum = 1+2+3+4+...+100;

とすれば,とりあえず答えは出るものの,100が10000になったらプログラムを入力するのが大変なことになってしまう.

そこで,より一般的にnまでの和とするにはどうしたらよいだろう?

この計算を電卓でやる手順を書いてみよう.

最初に初期化を行って,後はデータ入力と前の値への加算を繰り返していることがわかる.

これを手順としてまとめると,

1 合計をもとめる変数を,クリヤーする

2 以下を100回繰り返す

  2-1 データを入力する
  2-2 入力したデータをこれまでの合計に加算する

ここで,今どの計算を行っているのかを覚えておくために,カウンタという考え方を導入しよう.つまり,

1 合計をもとめる変数を,クリヤーする

2 繰り返しの回数(カウンタ)を,0にする

3 カウンタの値が100を超えるまで,以下を繰り返す

  2-1 合計にカウンタの値を加算する
  2-2 カウンタの値に1加える


処理を指定回数だけ繰り返す手順を表すには,for文を用います.

上記の手順で,合計をもとめる変数を sum,カウンタを i とすると,

#include <stdio.h>

void main()
{
    int i, sum;

    sum = 0;

    for(i=0; i<=100; i++){
        sum += i;                      /* sum = sum + i; と同じ */
    }

    printf("1から100までの合計は%dです", sum);
}

となります.ここで,i++ は,i の値を 1 増やすことを表し,i = i + 1 と同じです.


一般に書き表すと,

for(式1;式2;式3) 文1

式1 初期値設定 カウンタの初期値を設定する
式2 反復条件 繰り返しを続ける条件を書く この条件式がの間は繰り返す
式3 付加実行式 繰り返しを行う都度に実行したいことを書く
文1 実行文 繰り返し実行する文


演習

1. 1からキーボードから入力した値までの和を求めるプログラム

2. 先週作成した成績判定プログラムは一度実行すると終了してしまう.for文を使って100点より大きい数字が入力されるまで,成績判定を繰り返す様プログラムを作成する