ページ 11

for文中のcontinueにおける処理に関して教えてください。

Posted: 2017年6月13日(火) 10:56
by TT930

コード:

#include	<stdio.h>

void main(void)
{
	int	i;

	for(i = 0; ; i++)
	{
		if(i % 2 == 0)	// i を 2 で割った余りが 0 なら
		{
			printf("i = %d もーいいかい?¥n", i);
			continue;	// for 文の中で、この後の処理を飛ばす
		}

		if(i % 7 == 0)	// i を 7 で割った余りが 0 なら
		{
			printf("i = %d もーいいよ!!¥n", i);
			break;	// for 文から抜ける
		}

		printf("i = %d まぁだだよ!¥n", i);
	}
}
実行結果
i = 0 もーいいかい?
i = 1 まぁだだよ!
i = 2 もーいいかい?
i = 3 まぁだだよ!
i = 4 もーいいかい?
i = 5 まぁだだよ!
i = 6 もーいいかい?
i = 7 もーいいよ!!

このプログラムは、

なぜ、i = 6のあと i = 7 もーいいよ!!の処理が行われるのでしょうか?

また、for文中のcontinueの効果がどうなっているのか解説してください。なぜ、printf("i = %d まぁだだよ!¥n", i);は実行されるのでしょうか?

また、i++は、if(i % 2 == 0)、if(i % 7 == 0)、printf("i = %d まぁだだよ!¥n", i);の終わり毎に働くものなのでしょうか?

Re: for文中のcontinueにおける処理に関して教えてください。

Posted: 2017年6月13日(火) 11:21
by usao

コード:

for( 処理A; 条件B; 処理C )
{
  処理D
}
と書いた時の動きは

(1)処理A
(2)条件Bを判断.条件を満たさないなら終了
(3)処理D
(4)処理C
(5) 手順(2)へ

という形.
(3)の処理D内でのcontinueの効果は「(4)へ」.

Re: for文中のcontinueにおける処理に関して教えてください。

Posted: 2017年6月13日(火) 17:55
by TT930
for( ; ; )にそんな効果があるとは知りませんでした。これでだいたい理解することが出来ました。

もう一つ聞きたいのですが。i = 1の時はどの様な計算で、2つのif文が否定されて、printf("i = %d まぁだだよ¥n" , i);の実行につながるのでしょうか

1÷2はdouble型を利用していないので答えが0.5とはならず、計算できないから余りは, 無し != 0 という事なのでしょうか?

Re: for文中のcontinueにおける処理に関して教えてください。

Posted: 2017年6月13日(火) 18:05
by usao


整数の計算における「余り」ですから,

1÷2 → 商0,余り1
1÷7 → 商0,余り1

ではないでしょうか.

Re: for文中のcontinueにおける処理に関して教えてください。

Posted: 2017年6月13日(火) 19:23
by TT930
なるほど、やっぱりそうでしたか。

理解できました。ありがとうございました。

また機会があればよろしくお願いします。