このような問題は、漏れのないように出来る限り入念にいろいろなケースを考えて、それに対応するif文を書いていく必要がある。

ifの順序も関係するので、そこも良く考える必要がある。

C初級セミナー

解答例

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char **argv){
  char *MSG_NT="Not a Triangle";          // 三角形でない
  char *MSG_ET="an Equilateral Triangle"; // 正三角形
  char *MSG_IT="an Isosceles Triangle";   // 二等辺三角形
  char *MSG_RT="a Right Triangle";        // 直角三角形
  char *MSG_ST="a Scaene Triangle";       // 不等辺三角形
  int err=0;
  double a,b,c;
  err|=(sscanf(argv[1],"%lf",&a)!=1);
  err|=(sscanf(argv[2],"%lf",&b)!=1);
  err|=(sscanf(argv[3],"%lf",&c)!=1);
  if(err)
    printf(MSG_NT);
  else if(a<=0 || b<=0 || c<=0)
    printf(MSG_NT);
  else if((a+b<=c)||
          (b+c<=a)||
          (c+a<=b))
    printf(MSG_NT);
  else if(a==b && b==c)
    printf(MSG_ET);
  else if(a==b || b==c || c==a)
    printf(MSG_IT);
  else if((a*a+b*b==c*c)||
          (b*b+c*c==a*a)||
          (c*c+a*a==b*b))
    printf(MSG_RT);
  else
    printf(MSG_ST);
}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS