バグ検出ドリル(8)電卓プログラムのような小さなプログラムにもバグがいる山浦恒央の“くみこみ”な話(108)(3/4 ページ)

» 2018年07月18日 10時00分 公開

4.今回の問題

 学生が作る、「カレーのレシピ」程度の数十行程度のプログラムでも、バグなしで作ろうとすると簡単ではありません。バグは、いろいろな場所にこっそり、あるいは、堂々と潜んでいます。どんなプログラムでも、バグを的確に見つける能力は非常に重要です。

 今回は、学生が5分で記述できる電卓プログラムを問題としました。どこにバグがあるか考えてみてください。

問題文:リスト4は、電卓プログラムの仕様である。リスト5は、仕様を基にプログラムを記述したものである。下記の資料から、どのようなバグがあるか推察せよ。

1.概要

 コンソールから、数値を入力し、加減乗除するプログラムである。

2. 詳細

 コンソールから、整数型の数値in1、in2を入力し、加減乗除する。

2.1 数値の入力

 コンソールから、2つの整数型の数値in1、in2を入力する。

2.2 演算モードの入力

 コンソールから、どんな演算をするか、下記の整数型の数値で演算モードを入力する。

  • 1:加算、2:減算、3:乗算、4:除算

2.3 加減乗算

 演算モードに従って、下記を実施し、結果を整数型でコンソールに出力する。

  • (1)演算モード=1の場合は、下記を実施する
    result = a + b
  • (2)演算モード=2の場合は、下記を実施する
    result = a - b
  • (3)演算モード=3の場合は、下記を実施する
    result = a * b
  • (4)演算モード=4の場合は、下記を実施する
    result = a / b

3. 制限事項

  • (1)演算モードの入力は、1〜4以外入力しないものとする
  • (2)数値の入力は、int型が取りうる範囲とする
リスト4 電卓プログラムの仕様
#include <stdio.h>
main()
{
	int in1, in2;
	int mode;
	int result = 0;
	printf("2つの数値を入力してください\n");
	scanf("%d %d",&in1, &in2);
	printf("演算モードの選択 1: 加算, 2: 減算, 3: 乗算, 4: 除算\n");
	scanf("%d",&mode);
	switch(mode){
	case 1:
		result = in1 + in2;
		break;
	case 2:
		result = in1 - in2;
		break;
	case 3:
		result = in1 * in2;
		break;
	case 4:
		result = in1 / in2;
		break;
	default:
		break;
	}
	printf("result = %d\n", result);
}
リスト5 電卓プログラム

Copyright © ITmedia, Inc. All Rights Reserved.