From: j8takagi Date: Mon, 10 Jan 2011 14:58:00 +0000 (+0900) Subject: サンプルの三角形判定プログラムで、バグを含むプログラムを追加 X-Git-Tag: 0.2p3~34 X-Git-Url: https://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=85f5091c69a3bc433a569540b0cda53c1d1345ee;p=autotest_mk.git サンプルの三角形判定プログラムで、バグを含むプログラムを追加 --- diff --git a/sample/triangle/Makefile b/sample/triangle/Makefile index c863de4..2d84396 100644 --- a/sample/triangle/Makefile +++ b/sample/triangle/Makefile @@ -1,15 +1,12 @@ CC = gcc -.PHONY: all check clean +.PHONY: normal bug check clean -all: triangle - -triangle: triangle.c +normal: clean $(CC) -o triangle triangle.c -check: - @$(MAKE) -sC test +bug: clean + $(CC) -o triangle triangle_bug.c clean: rm -f triangle - $(MAKE) -sC test clean diff --git a/sample/triangle/triangle_bug.c b/sample/triangle/triangle_bug.c new file mode 100644 index 0000000..f4afd0d --- /dev/null +++ b/sample/triangle/triangle_bug.c @@ -0,0 +1,60 @@ +/********************************************************************** +triangle_bug.c +引数として指定された3つの整数が三角形の3辺を表すものとし、 +次のうちどれであるかをきめるメッセージを印字する。 + 不等辺三角形(scalene triangle) + 二等辺三角形(isosceles triangle) + 正三角形(equilateral triangle) +ただし、バグを含む。 + +Glenford J Myers『ソフトウェア・テストの技法』(近代科学社、1980) +http://www.amazon.co.jp/dp/4764900599 +第1章「自己診断テスト」に記載された「自己診断テスト」の仕様を実装 +**********************************************************************/ + +#include +#include + +int main(int argc, char *argv[]) +{ + int l[3], i; + char *check; + + /* 引数が3以外の場合は、エラー終了 */ + if(argc != 4) { + if(argc < 4) { + fprintf(stderr, "too few argument.\n"); + } + else if(argc > 4) { + fprintf(stderr, "too many argument.\n"); + } + return -1; + } + /* 引数が0以上の整数かチェック。0以上の整数以外の場合はエラー終了 */ + for(i = 0; i < 3; i++) { + l[i] = strtol(argv[i+1], &check, 10); + if(*check != '\0' || l[i] < 0) { + fprintf(stderr, "%s: invalid argument.\n", argv[i+1]); + return -1; + } + } + /* 3辺の長さが等しい場合は、正三角形 */ + if(l[0] == l[1] && l[1] == l[2] && l[2] == l[0]) { + puts("equilateral triangle"); + } else { + /* 三角不等式により、三角形になるかを判定 */ + if(l[0] + l[1] <= l[2] || l[1] + l[2] <= l[0] || l[2] + l[0] <= l[1]) { + puts("not triangle"); + return -1; + } + /* 2辺の長さが等しい場合は、二等辺三角形 */ + if (l[0] == l[1] || l[1] == l[2] || l[2] == l[0]) { + puts("isosceles triangle"); + } + /* それ以外の場合は、不等辺三角形 */ + else { + puts("futohen sankakukei"); + } + } + return 0; +}