STEP 1.2

<問題 >1桁の正の整数 (1〜9) の乱数を10個、配列に格納し、表示せよ。
その配列に、7があれば「7があったよ」と(繰り返し)出力する。7 が1 つもなかったときは「7がなかったよ」と出力する。

<実行結果>
(たとえば)
s[0] = 5
s[1] = 9
s[2] = 1
s[3] = 9
s[4] = 7
s[5] = 7
s[6] = 9
s[7] = 8
s[8] = 3
s[9] = 7
s[4]に7があったよ
s[5]に7があったよ
s[9]に7があったよ

(こちらも)
s[0] = 4
s[1] = 8
s[2] = 2
s[3] = 5
s[4] = 2
s[5] = 4
s[6] = 8
s[7] = 2
s[8] = 5
s[9] = 5
7はひとつもなかったよ

<ヒント> フラグと呼ばれる変数の使いかた。 よくわかるC p38



解答例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* Nを10 */
#define N 10

int main (void) {
    int a[N];
    int i;
    int flag = 0; /* 旗は下りている。「まだ、見つかっていない」。False (偽、成り立たない) */
                  /* 旗 7があったら1にする。0 false, 1 True */
                  /* よくわかるC p38。あちらはflag を立てて(=1)、下す (=0) */ /* C3 変数が、プログラムが表現している手続きの中で、どのような役割をしているか */

    srand((unsigned int)time(NULL));

    /* 乱数 */
    for (i = 0; i < N; i++)
        a[i]= rand()%9 + 1;

    /* 表示 */
    for (i = 0; i < N; i++) 
        printf("a[%d] = %d \n", i, a[i]);

    /* 7があるかどうかのチェック flag 変数に注意 */ /* C4 ひと固まりのプログラム(ブロック)や関数が表現している手続きの概要 */
    for (i = 0 ;  i < N ; i++)
        if (a[i] == 7) {
            printf("a[%d]に7があったよ\n",i);
            flag = 1;          /* 旗を立てよう */ /* C2 定数が、どんな情報を表現しているか */
        }

     /* 旗が下がったままなら.. 条件文は? */
    if (flag == 0) 
        printf ("7がなかったよ\n");

    return 0;        

}