1 /**********************************************************************
3 引数として指定された3つの整数が三角形の3辺を表すものとし、
4 次のうちどれであるかをきめるメッセージを印字する。
5 不等辺三角形(scalene triangle)
6 二等辺三角形(isosceles triangle)
7 正三角形(equilateral triangle)
9 Glenford J Myers『ソフトウェア・テストの技法』(近代科学社、1980)
10 http://www.amazon.co.jp/dp/4764900599
11 第1章「自己診断テスト」に記載された「自己診断テスト」の仕様を実装
12 **********************************************************************/
17 int main(int argc, char *argv[])
22 /* 引数が3以外の場合は、エラー終了 */
25 fprintf(stderr, "too few argument.\n");
28 fprintf(stderr, "too many argument.\n");
32 /* 引数が自然数かチェック。自然数以外の場合はエラー終了 */
33 for(i = 0; i < 3; i++) {
34 l[i] = strtol(argv[i+1], &check, 10);
35 if(*check != '\0' || l[i] <= 0) {
36 fprintf(stderr, "%s: invalid argument.\n", argv[i+1]);
40 /* 三角不等式により、三角形になるかを判定 */
41 if(l[0] + l[1] <= l[2] || l[1] + l[2] <= l[0] || l[2] + l[0] <= l[1]) {
45 /* 3辺の長さが等しい場合は、正三角形 */
46 if(l[0] == l[1] && l[1] == l[2] && l[2] == l[0]) {
47 puts("equilateral triangle");
49 /* 2辺の長さが等しい場合は、二等辺三角形 */
50 else if (l[0] == l[1] || l[1] == l[2] || l[2] == l[0]) {
51 puts("isosceles triangle");
55 puts("scalene triangle");