From 85f5091c69a3bc433a569540b0cda53c1d1345ee Mon Sep 17 00:00:00 2001 From: j8takagi Date: Mon, 10 Jan 2011 23:58:00 +0900 Subject: [PATCH] =?utf8?q?=E3=82=B5=E3=83=B3=E3=83=97=E3=83=AB=E3=81=AE?= =?utf8?q?=E4=B8=89=E8=A7=92=E5=BD=A2=E5=88=A4=E5=AE=9A=E3=83=97=E3=83=AD?= =?utf8?q?=E3=82=B0=E3=83=A9=E3=83=A0=E3=81=A7=E3=80=81=E3=83=90=E3=82=B0?= =?utf8?q?=E3=82=92=E5=90=AB=E3=82=80=E3=83=97=E3=83=AD=E3=82=B0=E3=83=A9?= =?utf8?q?=E3=83=A0=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- sample/triangle/Makefile | 11 +++---- sample/triangle/triangle_bug.c | 60 ++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 sample/triangle/triangle_bug.c 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; +} -- 2.18.0