10個の変数の値が全て 0 であるか否かを確認するには?

int a[10]の全て(つまりa[0]〜a[9])が 全てが 0 であるか否かを確認するには?

案A

a[10] の中に"0以外"が何個あるか数える.
0個なら"a[10]は全てが0"であり,
1個以上なら"a[10]は全てが0"ではない.

例えば以下の様な例が考えられる.
count = 0;

for (i = 0; i < 10; i++) {
	if (a[i] != 0) {
		printf ("a[%d] is not 0.\n", i);
		count++;
	} else {
		printf ("a[%d] is 0.\n", i);
	}
}

printf ("num of non-0 is %d.\n", count);
if (count == 0) {
	printf ("all zero.\n");
} else {
	printf ("not all zero.\n");
}
		

案B

実は,1個でも 0 でない値が見つかったら,
そこで調査を終了して良い.

例えば以下の様な例が考えられる.
これで,十分なプログラムとも言える.
count = 0;

for (i = 0; i < 10; i++) {
	if (a[i] != 0) {
		printf ("a[%d] is not 0.\n", i);
		count++;
		break;
	} else {
		printf ("a[%d] is 0.\n", i);
	}
}

if (count == 0) {
	printf ("all zero.\n");
} else {
	printf ("not all zero.\n");
}
		

案C

"0以外"の数を数えるのは多少不自然かもしれない.
「1個でもあるか?」を考えれば良い.
「0以外が見つかったか?」を変数に保存しておく.

例えば以下の様な例が考えられる.
/* found が 0 なら,"0以外"が見つかっていないを意味し,
   found が 1 なら,"0以外"が見つかっていることを意味する. */
int found = 0;

for (i = 0; i < 10; i++) {
	if ( a[i] == 0 ) {
		printf ("a[%d] is 0.\n", i);
	} else {
		printf ("a[%d] is not 0.\n", i);
		/* 1個でも "0以外"が見つかったら,
		   found を 1 にする. */
		found = 1;
		break;
	}
}

if ( found == 0 ) {
	printf ("all zero.\n");
} else {
	printf ("not all zero.\n");
}
		
上記プログラムにおいて,最初は found は 0 である.
for文を用いて,a[0]〜a[9] を全て調査し,
1個でも"0以外"が見つかったら
つまり1個でも if (a[i] == 0) が成立したら
found は 1 になる.

全て調査して,1個も見つからなかったら
found は 初期値の 0 のまま for 文を終える.

a[10][20]の値が全て 0 であるか否かを確認するには?

例えば以下の様な例が考えられる.
/* found が 0 なら,"0以外"が見つかっていないを意味し,
   found が 1 なら,"0以外"が見つかっていることを意味する. */
int found = 0;

for (i = 0; i < 10; i++) {
	for (j = 0; j < 20; j++) {
		if ( a[i][j] == 0 ) {
			printf ("a[%d][%d] is 0.\n", i, j);
		} else {
			printf ("a[%d][%d] is not 0.\n", i, j);
			/* 1個でも "0以外"が見つかったら,
			   found を 1 にする. */
			found = 1;
			break;
		}
	}
}

if ( found == 0 ) {
	printf ("all zero.\n");
} else {
	printf ("not all zero.\n");
}