連載
バグ検出ドリル(4)プログラミングの素質を試すのに最適!? FizzBuzz問題に挑戦:山浦恒央の“くみこみ”な話(104)(2/3 ページ)
「バグ検出ドリル」の第4回で出題するのは、プログラミングの素質を試すのに最適といわれる伝説の「FizzBuzz問題」。問題文から、どこにバグがありそうか見つけ出してみよう!
3.今回の問題
今回は、そのFizzBuzz問題を取り上げます。実装したソースコードにバグを埋め込んであります。FizzBuzz問題が本当に都市伝説なのか自分でチェックしつつ、デバッグ能力を鍛えていただければ幸いです。仕様から出力結果を予想し、どこにバグがあるか推察してください。
5分考えても分からない場合、「プログラミングの素養があれば5分以内でFizzBuzz問題がコーディングできるはず」という「根拠はないが漠然とした説得力の漂う見解」は、占星術のお告げと同じレベルであると考え、効率的かつ実践的にバグを見つけるため、自分の環境で実行するといいでしょう。
ソースコードを見てバグを検出できなければ、力まかせに実行することも有効です。いろいろな方向に弾を撃ちましょう。実行すると、整合性に欠ける部分が見つかるはずです。なお、本シリーズのプログラムは、全て「Visual Studio2010」のコンソールアプリケーションで実行を確認したものを使用しています。
「FizzBuzz」問題の仕様
以下の条件に従い、1〜100までの数をコンソールに表示せよ
- 3の倍数の場合は、「1〜100」でなく「Fizz」と表示する
- 5の倍数の場合は、「1〜100」でなく「Buzz」と表示する
- 3と5の倍数の場合は、「1〜100」でなく「FizzBuzz」と表示する
#include <stdio.h> int main(void) { int i; for (i = 1; i <= 100; i++) { if ( ((i % 3) == 0) && ((i % 5) == 0)){ printf("FizzBuzz\n"); } else if ((i % 3) == 0) { printf("Buzz\n"); } else if ((i % 5) == 0) { printf("Fizz\n"); } else { printf("%d\n",i); } } }
リスト1 ソースコード(C言語)
Copyright © ITmedia, Inc. All Rights Reserved.