错误在于你的变量p、s不应声明为int型
见代码注释部分
#include
#include
int main()
{
int a,b,c,dd,d,x,e;
float p,s;
scanf("%d %d %d",&a,&b,&c);
if(a>b&&c>a||a>c&&b>a)
d=a;
if(b>a&&c>b||b>c&&a>b)
d=b;
if(c>b&&a>c||c>a&&b>c)
d=c;
if(ax=a;
if(b
if(cx=c;
if(a>b&&a>c)
dd=a;
if(b>a&&b>c)
dd=b;
if(c>b&&c>a)
dd=c;
p=(float)(a+b+c)/2; //p声明为float型(若为int,则原应是实数的s被强制转化成int型)
s=sqrt(p*(p-a)*(p-b)*(p-c)); //s声明为float型(若为int,则原应是实数的s被强制转化成int型)
e=x+d;
if(e>dd)
printf("%.2f\n",s);
else
printf("No solution.");
return 0;
}
//实际上 你的a,b,c,dd,d,x,e都可以直接声明为float型
题目要求是实数所以要用double来存而不是int,因此scanf哪里%d不对a,b,c等资料形态自然也不对,写了个范例:
#include
#include
#include
double max(double a, double b) // 两数取最大
{
return a>b?a:b;
}
double max3( double a, double b, double c) // 三数取最大
{
return a>max(b,c)?a:max(b,c);
}
int main()
{
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c); //读入a,b,c三个实数
double m = max3(a,b,c); //取最大值
double p = (a+b+c)/2;
if(a+b+c-m>m) //判断能否成三角形,即短的两边和相加要大於最长边
printf("%.2f\n",sqrt(p*(p-a)*(p-b)*(p-c)));
else
printf("No solution.\n");
return 0;
}
判断三角形的条件,应该是任意两边长的和大于第三条边,即a+b>c&&b+c>a&&a+c>b,这样才对,写这个程序也不用这么麻烦好吧,判断是不是三角形之后直接求P然后直接求面积就行了。
#include
#include
int main(){
double a,b,c,p,s;
scanf("%lf %lf %lf",&a,&b,&c);
if((a+b)<=c||(a+c)<=b||(a+c)<=b){
printf("No solution\n");
return 0;
}
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.2lf",s);
return 0;
}
你的这个逻辑有问题,我来帮你吧