連載
» 2018年03月15日 10時00分 公開

山浦恒央の“くみこみ”な話(104):バグ検出ドリル(4)プログラミングの素質を試すのに最適!? FizzBuzz問題に挑戦 (2/3)

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

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.