A017:三角形種類
三角形種類
輸入為三角形三邊長(正整數) a b c,輸出三角形類型(英文)
isosceles triangle(等腰三角形)
not a triangle(不成三角形)
regular triangle(正三角形)
rectangular triangle(直角三角形)
obtuse triangle(鈍角三角形)
acute triangle(銳角三角形)
isosceles righttriangle(等腰直角三角形)
Input
1 1 5
Output
not a triangle
Notes:
1.先將三角三個邊長做排序:
2.判別不成三角形,若邊長無法構成三角形,則程式結束:
//situation:not a triangle
if(side1+side2<=side3){
printf("not a triangle");
return 0;
}
3.先判別正三角形或等腰三角形,若為等腰三角形,則程式結束,不需要辨別是鈍角或銳角
//situation:regular or isosceles
if((side1==side2) && (side2==side3)){
printf("regular triangle");
return 0;
}else if((side1==side2) || (side2==side3)){
printf("isosceles triangle");
return 0;
}
4.判別鈍角、銳角、直角三角形
int test_side_square(int *a,int *b,int *c){
int value,a2=(*a)*(*a),b2=(*b)*(*b),c2=(*c)*(*c);;
//value=0, means: rectangular triangle(直角三角形)
//value=1, means: obtuse triangle(鈍角三角形)
//value=-1,means: acute triangle(銳角三角形)
(c2==(a2+b2))?(value=0):(c2>(a2+b2))?(value=1):(value=-1);
return value;
}
5.若為直角三角形,則需要進一步辦別是否具有等腰性質:
//situation:obtuse or acute;rectangular or isosceles righttriangle,
result=test_side_square(&side1,&side2,&side3);
if(result!=0){
(result<0)?printf("acute triangle"):printf("obtuse triangle");
}else{
(side1==side2)?printf("isosceles righttriangle"):printf("rectangular triangle");
}
Code:
#include <stdio.h>
void swap(int *a,int *b){
if(*a>*b){
*a^=*b;
*b^=*a;
*a^=*b;
}
}
int test_side_square(int *a,int *b,int *c){
int value,a2=(*a)*(*a),b2=(*b)*(*b),c2=(*c)*(*c);;
//value=0, means: rectangular triangle(直角三角形)
//value=1, means: obtuse triangle(鈍角三角形)
//value=-1,means: acute triangle(銳角三角形)
(c2==(a2+b2))?(value=0):(c2>(a2+b2))?(value=1):(value=-1);
return value;
}
int main(void){
int side1,side2,side3,result;
scanf("%d %d %d",&side1,&side2,&side3);
//printf("%d %d %d",side1,side2,side3);
//sort the length of side
swap(&side1,&side2);
swap(&side2,&side3);
swap(&side1,&side2);
//situation:not a triangle
if(side1+side2<=side3){
printf("not a triangle");
return 0;
}
//situation:regular or isosceles
if((side1==side2) && (side2==side3)){
printf("regular triangle");
return 0;
}else if((side1==side2) || (side2==side3)){
printf("isosceles triangle");
return 0;
}
//situation:obtuse or acute;rectangular or isosceles righttriangle,
result=test_side_square(&side1,&side2,&side3);
if(result!=0){
(result<0)?printf("acute triangle"):printf("obtuse triangle");
}else{
(side1==side2)?printf("isosceles righttriangle"):printf("rectangular triangle");
}
return 0;
}
以整數為邊長的三角形,不可能是等腰直角三角形。
回覆刪除