给出直角坐标系三个点判断能否构成三角形并求出三角形的周长和面积----PTA实验C++

一、题目描述

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

输入格式:

输入在一行中顺序给出六个[−100,100]范围内的数字,即三个点的坐标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

二、写代码前置知识 

1、直角坐标系中已知三个点求三角形各边的长度

2、余弦定理运用求cosine值,将consine转成sine,再利用面积求解公式求三角形面积

具体求解步骤如下图

C++进行四则运算要包含头文件<cmath>----此头文件包含了一系列的数学运算函数,这个题目要用到的如下

sqrt(x):对x进行开平方根运算

pow(x,a):对x进行a次方运算

fabs(x):对x取绝对值(这里是double类型用fabs,若是整型用abs)

三、C++实现

#include<iostream>
#include<cmath>//!!要包含四则运算的头文件
#include<iomanip>//<iomanip>头文件包含了输入输出格式化的各种函数如下面要用到的setprecision(2)
using namespace std;
double getTriArea(double, double, double);//要调用的函数在main()函数下面,对其进行一个声明
int main() {

    double x1, x2, x3, y1, y2, y3;
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
//求三角形三条边a,b,c的长度
    double a = sqrt(pow(fabs(x3 - x2), 2) + pow(fabs(y3 - y2), 2));
    double b = sqrt(pow(fabs(x3 - x1), 2) + pow(fabs(y3 - y1), 2));
    double c = sqrt(pow(fabs(x2 - x1), 2) + pow(fabs(y2 - y1), 2));
    if (a + b > c && b + c > a && a + c > b) {
//周长直接三条边相加即可
        cout << fixed << setprecision(2) << "L = " << a + b + c << ",";
        float area = getTriArea(a, b, c);
//这里的cout<<fixed<<setprecision(2)<<x;的作用是使变量值统一保留到小数点后两位
        cout << fixed << setprecision(2) << " A = " << area << endl;
    }
    else {
        cout << "Impossible";
    }

}
double getTriArea(double a, double b, double c) {
//正弦 sine  余弦 cosine  利用余弦定理和求三角形面积公式0.5 * a * b * sine
    double cosine = (pow(a, 2) + pow(b, 2) - pow(c, 2)) / (2 * a * b);
    double sine = sqrt(1 - pow(cosine, 2));
    double aria = 0.5 * a * b * sine;
    return aria;
}

我第一次写的时候用的是float类型存储,在提交的时候显示输入为实数的时候答案错误,后把所有float全部改成double提交测试成功(应该是PTA的格式bug)

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值