平成28年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
V−2

C言語で、1から20までの数字を表示し、3で割り切れるときはFizz、5で割り切れる
ときはBuzz、両方で割り切れるときはFizzBuzzと表示するプログラムを実装したい。
次の空欄     に(ア)、(イ)、(ウ)を入れたプログラムの動作に関する記述のうち、
最も適切なものはどれか。

 #include <stdio.h>
 int main() {
  int i;
     
 }

(ア) for (i = 1; i <= 20; i++)
    printf("%d %s%s\n", i, i % 3 ? "" : "Fizz", i % 5 ? "" : Buzz");

(イ) char *fb[15] = {"FizzBuzz", "", "", "Fizz", "",
             "Buzz", "Fizz", "", "", "Fizz",
             "Buzz", "", "Fizz", "", ""};
   for (i = 1; i <=20; i++) printf("%d %s\n", i, fb[i % 15]);

(ウ) for (i = 1; i く= 20; i++) {
    printf("%d ", i);
    if (i % 3 == 0 && i % 5 == 0 ) printf("FizzBuzz\n");
    else if (i % 3 == 0) printf("Fizz\n");
    else if (i % 5 == 0) printf("Buzz\n");
    else printf("\n");
   }

 @ (ア) と (イ) と (ウ)、いずれを入れても正しく動作する。
 A (ア) 又は (イ) を入れたときのみ正しく動作する。
 B (ア) 又は (ウ) を入れたときのみ正しく動作する。
 C (イ) 又は (ウ) を入れたときのみ正しく動作する。
 D (ウ) を入れたときのみ正しく動作する。



【正解】 @
(ア)の i % 3 ? "" : "Fizz" は i を3で割った余りが真(すなわち≠0)なら
"" を出力し(すなわち何も出力しない)、偽(すなわち=0)なら"Fizz"を出力
するという構文。

(イ)は予め fb[0]〜[14]に Fizz, Bazz, FizzBazzをセットしておき、
i を15で割った余りによって、表示させるというアルゴリズム。

(ウ)は、i を 3や5で割った余りによって、表示内容を問題の意図を忠実に
アルゴリズムにしている。

EXCELのマクロのご相談なら ファーストマクロ 



V−1 目次 V−3
ファーストマクロ TOPページ