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で割った余りによって、表示内容を問題の意図を忠実にアルゴリズムにしている。
V−1 | 目次 | V−3 |