• 締切済み

二重ループのあるプログラム(C言語)

#include <stdio.h> int main(void) { int i, j, c, c2; c = 0; for(i = 100; i < 1000; i++) { c2 = 0; for(j = 1; j <= i; j++) { if (i % j == 0) c2++; } if (c2 % 2 == 1) c++; } printf("%d個です。\n", c); return 0; } というプログラムがあるのですが、2重ループ部分のそれぞれのループに対応して、 2つの関数として独立させるとどのようになりますか? また、2つの関数のいずれにおいても、ループを用いずに再帰呼び出しを用いるとどうなりますか?

みんなの回答

回答No.4

#3さん、もうひとつの回答フォローありがとうございます m(_ _)m for() の分岐に忠実に、また sub(), div() 関数の引数定義から intのローカル変数も必要ないかと...。 追加少々訂正: #include <stdio.h> /* プロトタイプ宣言 */ int sub(int, int); int div(int, int, int); int main(void) { /* 引数:i=100, c=0 */ printf("%d個です。\n", sub(100, 0)); return 0; } /* for(i = 100; i < 1000; i++) */ int sub(int i, int c) { if (i < 1000) { if (div(i, 1, 0) % 2 == 1) c++; return sub(++i, c); } else return c; } /* for(j = 1; j <= i; j++) */ int div(int i, int j, int c2) { if (j <= i) { if (i % j == 0) c2++; return div(i, ++j, c2); } else return c2; }

回答No.3

再帰を勉強するのであれば、戻り値も再利用出来ることを覚えましょう。 少々訂正。 ------ #include <stdio.h> /* プロトタイプ宣言 */ int sub(int, int); int div(int, int, int); /*---------*/ int main(void) {  int c = 0;  c = sub(100, c);  printf("%d個です。\n", c);  return 0; } /*---------*/ int sub(int i, int c) {  int c2 = 0;  if (i >= 1000) return c;  c2 = div(i, 1, c2);  if (c2 % 2 == 1) c++;  return sub(++i, c); } /*---------*/ int div(int i, int j, int c2) {  if (j > i) return c2;  if (i % j == 0) c2++;  return div(i, ++j, c2); }

回答No.2

/* Recurcive virsion by Mac OSX * file name: xyz.c * compile: gcc xyz.c * execution: ./a.out */ #include <stdio.h> /* プロトタイプ宣言 */ void sub(int, int *); void div(int, int, int *); int main(void) { int c; c = 0; sub(100, &c); printf("%d個です。\n", c); return 0; } /* for(i = 100; i < 1000; i++) */ void sub(int i, int *c) { int c2; if (i < 1000) { c2 = 0; div(i, 1, &c2); if (c2 % 2 == 1) (*c)++; sub(++i, c); } } /* for(j = 1; j <= i; j++) */ void div(int i, int j, int *c2) { if (j <= i) { if (i % j == 0) (*c2)++; div(i, ++j, c2); } }

回答No.1

>2つの関数として独立させるとどのようになりますか? 「関数化できないから、作ってほしい」って解釈でいいのかな? とりあえず >2重ループ部分のそれぞれのループに対応して、 の「対応」の意味があいまいなんだけど。

関連するQ&A