谁能帮我找出这个程序的错误 谢谢各位了 要求面积area和周长perimeter 怎么做请指点谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/21 19:15:13
谁能帮我找出这个程序的错误 谢谢各位了
悬赏分:15 - 离问题结束还有 14 天 12 小时
#include <stdio.h>
#include<math.h>
int main(void)
{
int a,b,c;
float area,perimeter,s;

printf("enter 3 sides of the triangle:");
scanf("%d,%d,%d",&a,&b,&c);

s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));

perimeter=a+b+c;

if ((a+c)>b)
{
printf("area=%.2f,perimeter=%.2f\n",area,perimeter);
}

else if((a+b)>c)
{
printf("area=%.2f,perimeter=%.2f\n",area,perimeter);
}

else if((b+c)>a)
{
printf("area=%.2f,perimeter=%.2f\n",area,perimeter);
}

else
{
printf("these sides do not correspond to a valid triangle!\n");
}
return 0;

}
提问者: lq517791509

其实我也不晓的
我猜是这样的
你在scanf("%d,%d,%d",&a,&b,&c); 这句后没经过判断就执行了area=sqrt(s*(s-a)*(s-b)*(s-c));
这样的话(s*(s-a)*(s-b)*(s-c)); 有可能为负数(比如abc分别为125),这样的话运行就错了
可以在scanf("%d,%d,%d",&a,&b,&c); 后面加些语句判断,保证三角形的任意两边之和大于第三边,三个判断的语句应为AND关系而不你在后面的IF语句里出现的那样,那样类似于OR关系了