给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形 5

输入格式:输入在一行中顺序给出6个[-100,100]范围内的数字,即3个点的坐标x1,y1,x2,y2,x3,y3。输出格式:若这3个点不能构成三角形,则在一行中输出“... 输入格式:

输入在一行中顺序给出6个[-100, 100]范围内的数字,即3个点的坐标x1, y1, x2, y2, x3, y3。

输出格式:

若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。
输入样例1:4 5 6 9 7 8

输出样例1:L = 10.13, A = 3.00

输入样例2:4 6 8 12 12 18

输出样例2:Impossible

我的过程:
#include <stdio.h>
#include <math.h>
int main()
{
float arr[6];//放x1,y1,x2,y2,x3,y3
int i;
float bc1,bc2,bc3;//边长
float zhouc,mianji,bzc;//周长、面积、半周长
double t1,pow1,pow2,t;//用于计算边长的变量
for(i=0;i<=5;i++)
{
scanf("%f",&arr[i]);
if(arr[i]<-100||arr[i]>100)return 0;
}

t=arr[0]-arr[2];
pow1=pow(t,2);
t=arr[1]-arr[3];
pow2=pow(t,2);
t1=pow1+pow2;
bc1=sqrt(t1);

t=arr[0]-arr[4];
pow1=pow(t,2);
t=arr[1]-arr[5];
pow2=pow(t,2);
t1=pow1+pow2;
bc2=sqrt(t1);

t=arr[4]-arr[2];
pow1=pow(t,2);
t=arr[5]-arr[3];
pow2=pow(t,2);
t1=pow1+pow2;
bc3=sqrt(t1);

if(bc1<=0||bc2<=0||bc3<=0)//边长小于等于0,不能构成三角形
{
printf("Impossible");
return 0;
}
if (( arr[2]-arr[0]!=0&&arr[4]-arr[2]!=0&&((arr[3]-arr[1])/(arr[2]-arr[0])==(arr[5]-arr[3])/(arr[4]-arr[2])) )
||( arr[1]-arr[3]==0&&arr[5]-arr[3]==0 ) )//三点在一条斜线上(包括竖直线)斜率相等、或三点在一条水平线上,都不能构成三角形
{printf("Impossible");
return 0;
}
//两边和大于第三边,两边差小于第三边
if(bc1+bc2>bc3 &&bc1+bc3>bc2 &&bc3+bc2>bc1 &&
fabs(bc1-bc2)<bc3 && fabs(bc1-bc3)<bc2 && fabs(bc3-bc2)<bc1 )
{
zhouc=bc1+bc2+bc3;
bzc=zhouc/2;
mianji=sqrt(bzc*(bzc-bc1)*(bzc-bc2)*(bzc-bc3));
printf("L = %.2f, A = %.2f",zhouc,mianji);
}
else printf("Impossible");
return 0;
}

为什么没有全对?我少了什么条件了?
展开
 我来答
匿名用户
2014-09-25
展开全部
#include<stdio.h>
#include<math.h>

int main()
{ double a,b,c,d,e,f;
scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f );
double AB,BC,AC,ab,bc,ac;
ab=(a-c)*(a-c)+(b-d)*(b-d);
bc=(c-e)*(c-e)+(d-f)*(d-f);
ac=(a-e)*(a-e)+(b-f)*(b-f);
AB=sqrt(ab);
BC=sqrt(bc);
AC=sqrt(ac);
if((AB<BC+AC)&&(BC<AB+AC)&&(AC<AB+BC))
{
double l=AB+BC+AC;
double P = l / 2;
double s = sqrt(P*(P-AB)*(P-BC)*(P-AC));
printf("L = %.2f, A = %.2f",l,s); }
else
{printf ("Impossible");
}
return 0;
}

大概是你判断太多了,上面这个是一个可以通过的程序
zhanglibinbaby
2019-03-19
知道答主
回答量:1
采纳率:0%
帮助的人:762
展开全部
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main(){
double x[3],y[3];
double l[3],p,s;
int b=0;
for(int i=0;i<3;i++){
cin>>x[i]>>y[i];
}
for(int i=0;i<2;i++){
for(int j=i+1;j<3;j++)
{
l[b]=sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
b++;}
}
if(l[0]+l[1]>l[2]&&l[0]+l[2]>l[1]&&l[1]+l[2]>l[0]){
p=(l[0]+l[1]+l[2])/2;
s=sqrt(p*(p-l[0])*(p-l[1])*(p-l[2]));
cout<<setiosflags(ios::fixed)<<setprecision(2);
cout<<"L = "<<p*2<<", A = "<<s<<endl;
}
else{cout<<"Impossible"<<endl;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千风瑛绿
2017-10-20
知道答主
回答量:68
采纳率:50%
帮助的人:5.6万
展开全部
#include<stdio.h>
#include<math.h>

int main()
{ double a,b,c,d,e,f;
scanf("%lf %lf %lf %lf %lf %lf",&a,&b,&c,&d,&e,&f );
double AB,BC,AC,ab,bc,ac;
ab=(a-c)*(a-c)+(b-d)*(b-d);
bc=(c-e)*(c-e)+(d-f)*(d-f);
ac=(a-e)*(a-e)+(b-f)*(b-f);
AB=sqrt(ab);
BC=sqrt(bc);
AC=sqrt(ac);
if((AB<BC+AC)&&(BC<AB+AC)&&(AC<AB+BC))
{
double l=AB+BC+AC;
double P = l / 2;
double s = sqrt(P*(P-AB)*(P-BC)*(P-AC));
printf("L = %.2f, A = %.2f",l,s); }
else
{printf ("Impossible");
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式