for 文道場 (問題編)


目次

「その他」のページへ

はじめに

目次へ

「問題」編


「for 文の意味」編


次へ  前へ  解答へ

「for 文の意味: その 1」

for 文は、for 文内で実行する文が 1 つの場合は、

for ( [初期値] ; [条件] ; [増分式] )
  [実行文];
の形に書きます。 ここで、[初期値]、[条件]、[増分式]、[実行文] は適当な C の文です。 では、これをフローチャートにすると下のどれになるでしょうか。

[1] 条件、増分式、実行文の順のフローチャート  [2] 条件、実行文、増分式の順のフローチャート  [3] 増分式、条件、実行文の順のフローチャート  [4] 実行文、条件、増分式の順のフローチャート  [5] 増分式、実行文、条件の順のフローチャート  [6] 実行文、増分式、条件の順のフローチャート 

(03/08 2011; 04/20 2013 修正)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 2」

for 文は、for 文内で実行する文が 1 つの場合は、

for ( [初期値] ; [条件] ; [増分式] )
  [実行文];
複数ある場合は、
for ( [初期値] ; [条件] ; [増分式] ) {
    [実行文 1];
    [実行文 2];
    ....
}
のように書きます。 ここで、[初期値]、[条件]、[増分式]、[実行文] は適当な C の文です。

では、次は間違いでしょうか。

  1. 実行文が 1 つなのにカッコ { } でくくっている:
    for ( [初期値] ; [条件] ; [増分式] ) {
        [実行文];
    }
  2. 実行文が複数あるのにカッコ { } でくくっていない:
    for ( [初期値] ; [条件] ; [増分式] )
      [実行文 1];
      [実行文 2];
      [実行文 3];
  3. 改行を入れていない
    for ( [初期値] ; [条件] ; [増分式] ) [実行文];
  4. スペースも入れていない
    for([初期値];[条件];[増分式])[実行文];
  5. 変なところに改行を入れている
    for (
      [初期値] ;
      [条件] ;
      [増分式] )
        [実行文];
  6. for 文のカッコの中に [初期値]、[条件]、[増分式] を書いてない
    for ( ; ; ) [実行文];
  7. for 文のカッコの中に何も書いてない
    for ( ) [実行文];
  8. for 文のカッコを別なカッコにしている
    for { [初期値] ; [条件] ; [増分式] }
      [実行文];

(02/25 2011; 04/20 2013 修正)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 3」

次の文の内容を for 文を使わずに (他のループも使わずに) 書くとどうなるでしょうか。

int j;
for (j=1; j<=3; j=j+1)
  printf("[%d]\n", j);

(02/25 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 4」

次の文の内容を for 文を使わずに (他のループも使わずに) 書くとどうなるでしょうか。 また、for 文が終わった後では longname の値は何になっているでしょうか。

int longname;
for (longname=4; longname<7; longname++)
  printf("[%d]\n", longname);

(02/25 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 5」

次の文の内容を for 文を使わずに (他のループも使わずに) 書くとどうなるでしょうか。 また、for 文が終わった後では k の値は何になっているでしょうか。

(02/28 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 6」

次の for 文を [a] とします:

int k;
for (k=2; k<=8; k+=2) {
    printf("[%d]\n", k);
}
また、次の for 文を [b] とします:
int j;
(ア)
for ( ; j<=8; j=j+2) {
     (イ)
    printf("[%d]\n", j);
     (ウ)
}
(エ)
[a] と [b] の結果が同じになるようにするには、 (ア)-(エ) のいずれかの場所に式を 1 行入れれば済みます。 どこにどんな式を入れればいいでしょうか。

(02/28 2011; 04/20 2013 修正)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 7」

次の文の内容を for 文も n も使わずに (他のループも使わずに) 書くとどうなるでしょうか。

int n;
for (n=0; n<=4; n+=2) {
    printf("[%d]\n", n);
    printf("[%d]\n", n+1);
}

(03/10 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 8」

次の文の内容を for 文も x も使わずに (他のループも使わずに) 書くとどうなるでしょうか。

int x, y;
y = 0;
for (x=1; x<=4; x++)
  y = y+x;
  printf("[%d]\n", y);

(03/10 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 9」

次の文の内容を for 文も x も使わずに (他のループも使わずに) 書くとどうなるでしょうか。

int x, Total;
Total = 1;
for (x=5; x>0; x--)
  Total *= x;
printf("[%d]\n", Total);

(03/10 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 10」

for 文の「初期値」の部分、「増分式」の部分には、 「,」(カンマ演算子) を用いて複数の式を書くことができます。 では、次の for 文を使わずに (他のループも使わずに)、 ただし p, q, N は残して書くとどうなるでしょうか。

int p, q, N;
N = 0;
for (p=1, q=5; p<=5; p++, q--)
  N += p*q;
printf("[%d]\n", N);

(03/10 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 11」

次の for 文は初期値、増分式に複数の式が入っています:

int p, q, N;
N = 0;
for (p=1, q=5; p<=5; p++, q--)
  N += p*q;
printf("[%d]\n", N);
この for 文の初期値、増分式の q に関する式を for 文の初期値、増分式から出すには、 次の (ア) - (エ) のどこに、どのような q の式を書けばいいでしょうか。
int p, q, N;
N = 0;
(ア)
for (p=1; p<=5; p++) {
    (イ)
    N += p*q;
    (ウ)
}
(エ)
printf("[%d]\n", N);

(03/10 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 12」

次の for 文は、どのような j に対して実行されるかを答えなさい。

  1. int j;
    for (j=1; j<=10; j+=2)
       printf("j=%d\n", j);
  2. int j;
    for (j=3; 2*j<10; j++)
       printf("j=%d\n", j);
  3. int j;
    for (j=1; j%5 != 0; j++)
       printf("j=%d\n", j);
  4. int j;
    for (j=0; (j+4)%7 != 0; j+=2)
       printf("j=%d\n", j);
  5. int j;
    for (j=1; j<1; j+=2)
       printf("j=%d\n", j);

(03/14 2011)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 13」

次の for 文:

int j, a[10];
for (j=1; j<=10; j++)
   a[j - 1] = 2 * j + 1;
を、「for (k=0; k<10; k++)」の形の for 文に書き直しなさい。

(04/28 2013)
目次へ
次へ  前へ  解答へ

「for 文の意味: その 14」

次の for 文:

int j, a[10];
for (j=1; j<=10; j++)
   a[j - 1] = 2 * j + 1;
を、「for (m=10; m>0; m--)」の形の for 文に書き直しなさい。

(04/28 2013)
目次へ

「for 文にする」編


次へ  前へ  解答へ

「for 文にする: その 1」

次の繰り返しの実行文を for 文を使って書き直しなさい。

printf("3× %d = %d\n", 1, 3*1);
printf("3× %d = %d\n", 2, 3*2);
printf("3× %d = %d\n", 3, 3*3);
printf("3× %d = %d\n", 4, 3*4);
printf("3× %d = %d\n", 5, 3*5);

(03/14 2011)
目次へ
次へ  前へ  解答へ

「for 文にする: その 2」

次の繰り返しの実行文を for 文を使って書き直しなさい。

printf("5× %d = %d\n", 1, 5*1);
printf("5× %d = %d\n", 3, 5*3);
printf("5× %d = %d\n", 5, 5*5);
printf("5× %d = %d\n", 7, 5*7);
printf("5× %d = %d\n", 9, 5*9);

(03/14 2011)
目次へ
次へ  前へ  解答へ

「for 文にする: その 3」

次の x, y, z の値を計算する for 文をそれぞれ書きなさい (z は double で)。

x = 1 + 2 + 3 + ... + 100
y = 12 + 22 + 32 + ... + 1002
z = 1/1 + 1/3 + 1/5 + ... + 1/99

(04/28 2013)
目次へ
次へ  前へ  解答へ

「for 文にする: その 4」

a[0] = 1, a[1] = 2, a[2] = 3, a[3] = 4, ...
b[0] = 1, b[1] = 3, b[2] = 5, b[3] = 7, ...
のようになるように a[0] から a[49] までと b[0] から b[49] までの値をセットするような for 文を書きなさい。

(04/28 2013)
目次へ
次へ  前へ  解答へ

「for 文にする: その 5」

a[2] = 1, a[4] = 2, a[6] = 3, ..., a[100] = 50
のように値をセットするような for 文を書きなさい。

(04/28 2013)
目次へ
次へ  前へ  解答へ

「for 文にする: その 6」

配列 a を

a[0] = 100, a[1] = 98, a[2] = 96, a[3] = 94, ...
のようになるように a[0] から a[49] まで値をセットするような for 文を書きなさい。

(04/20 2013)
目次へ
次へ  前へ  解答へ

「for 文にする: その 7」

配列 a を

a[0] = 1, a[1] = -1, a[2] = 1, a[3] = -1, ...
のようになるように a[0] から a[49] まで値をセットするような for 文を書きなさい。

(04/20 2013)
目次へ
次へ  前へ  解答へ

「for 文にする: その 8」

配列 a を

a[0] = 0, a[1] = 1, a[2] = 0, a[3] = 1, ...
のようになるように a[0] から a[49] まで値をセットするような for 文を書きなさい。 また、逆に
b[0] = 1, b[1] = 0, b[2] = 1, b[3] = 0, ...
とする for 文も書きなさい。

(04/20 2013)
目次へ
次へ  前へ  解答へ

「for 文にする: その 9」

配列 a を

a[0] = 1, a[1] = 1, a[2] = 2, a[3] = 2, a[4] = 3, a[5] = 3, ...
のようになるように a[0] から a[49] まで値をセットするような for 文を書きなさい。

(04/20 2013; 04/26 2013 修正)
目次へ
次へ  前へ  解答へ

「for 文にする: その 10」

文字配列 a に、

a[0] = '0', a[1] = '1', ... a[9] = '9', a[10] = '\0'
のように設定する作業を for 文を使って行いなさい (ヒント: '3' = '0' + 3 となります)。

(04/26 2013)
目次へ
次へ  前へ  解答へ

「for 文にする: その 11」

配列 a[0] ~ a[49] に値が既に設定されているとして、 配列 b[0] ~ b[49] に a[ ] の値をひとつずらして、

b[0] = a[1], b[1] = a[2], b[2] = a[3], ..., b[48] = a[49], b[49] = a[0]
のように設定する作業を for 文で行いなさい。

(04/26 2013)
目次へ
「その他」のページへ
更新日: 04/28 2013
竹野茂治@新潟工科大学 (shige@iee.niit.ac.jp)