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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
TT930

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

#1

投稿記事 by TT930 » 8年前

コード:

#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);の終わり毎に働くものなのでしょうか?

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#2

投稿記事 by usao » 8年前

コード:

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

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

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

TT930

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

#3

投稿記事 by TT930 » 8年前

for( ; ; )にそんな効果があるとは知りませんでした。これでだいたい理解することが出来ました。

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

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

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#4

投稿記事 by usao » 8年前



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

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

ではないでしょうか.

TT930

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

#5

投稿記事 by TT930 » 8年前

なるほど、やっぱりそうでしたか。

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

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

返信

“C言語何でも質問掲示板” へ戻る