PTA 习题3-5 三角形判断 (15分)

本文介绍了一种算法,用于判断平面上任意三个点是否能构成三角形,并计算其周长和面积。通过输入三个点的坐标,利用距离公式和海伦公式,文章提供了两种实现方式的代码示例。

给定平面上任意三个点的坐标(x​1​​ ,y​1​​ )、(x​2​​ ,y​2​​ )、(x​3​​ ,y​3​​ ),检验它们能否构成三角形。

输入格式:

输入在一行中顺序给出六个[100,100]范围内的数字,即三个点的坐标x​1​​、y​1​​、x​2​​、y​2​​、x​3​​、y​3​​。

输出格式:

若这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(){
    double x[3]={0},y[3]={0};
    double a=0.0,b=0.0,c=0.0,p=0.0;
    int i;
    double L,A;
    for(i=0;i<3;i++){
        scanf("%lf",&x[i]);
        scanf("%lf",&y[i]);
    }
    a=sqrt(pow(x[0]-x[1],2)+pow(y[0]-y[1],2));//求三边
    b=sqrt(pow(x[1]-x[2],2)+pow(y[1]-y[2],2));
    c=sqrt(pow(x[2]-x[0],2)+pow(y[2]-y[0],2));
    L = a+b+c;
    p= 1.0*L/2;
    A=sqrt(1.0*p*(p-a)*(p-b)*(p-c)); //海拉公式

    if(a+b<=c || a+c<=b || c+b<=a ){   //判断是否为三角形
        printf("Impossible\n");
    }else{
		L*=1.0;
	    printf("L = %.2f, A = %.2f\n",L,A);
	}	

    return 0;
}
//方法二 常量
#include <stdio.h>
#include <math.h>
int main(){
 	double x1,y1,x2,y2,x3,y3;
    double a=0.0,b=0.0,c=0.0,p=0.0;
    int i;
    double L,A;

 	scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);//求三边
	a=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
    b=sqrt(pow(x2-x3,2)+pow(y2-y3,2));
    c=sqrt(pow(x3-x1,2)+pow(y3-y1,2));
    L = a+b+c;
    p= 1.0*L/2;
    A=sqrt(1.0*p*(p-a)*(p-b)*(p-c));//海拉公式

    if(a+b<=c || a+c<=b || c+b<=a ){   //判断是否构成三角形 
        printf("Impossible\n");
    }else{
		L*=1.0;
	    printf("L = %.2f, A = %.2f\n",L,A);
	}	

    return 0;
}

<think>好的,我现在需要帮助用户寻找关于用Java编写计算三角形周长的PTA习题或选择题。首先,用户提到可能与PTA平台相关,并且参考了之前的引用内容,特别是引用[1]和引用[2],这两个引用提到了Java和C++中计算周长和面积的方法。因此,我应该结合这些信息来生成相关问题。 首先,我需要确认用户的需求。用户想要的是练习题或选择题,涉及Java编程,特别是计算三角形周长,可能与PTA平台上的题目类似。根据引用[1],其中有一个关于编写getPerimeter和getArea方法的例子,虽然题目是关于其他形状的,但可以借鉴来设计三角形的问题。引用[2]中的C++例子同样涉及周长和面积的计算,但需要转换为Java语法。 接下来,我需要考虑如何设计这些题目。选择题通常测试语法知识、逻辑错误或方法实现。而编程题可能需要用户编写完整的类或方法。例如,可以设计一个Triangle类,要求用户实现计算周长的方法,同时处理输入验证,比如三边是否满足三角形不等式定理。 对于选择题,可以围绕常见的错误点,比如三边是否合法、公式是否正确、数据类型的处理等。例如,选项可能包含未验证三角形合法性的情况,或者周长计算错误的情况。 另外,用户可能需要考虑测试用例的设计,比如输入无效值时的处理,这可以作为编程题的一部,要求用户添加异常处理或条件判断。 需要确保题目符合PTA平台的风格,通常PTA题目会有输入输出样例,明确的类和方法定义。因此,在生成编程题时,应该给出类结构和方法签名的具体要求,以及测试用例的示例。 同时,要参考引用[1]中的示例,比如使用toString方法自动生成,可能在题目中要求覆盖toString方法,以输出三角形的信息。但根据用户当前的需求,可能更关注周长的计算,因此可以简化其他部。 最后,要验证生成的题目是否符合Java语法,是否涵盖了常见的错误点,以及是否能够有效测试用户的能力。例如,是否处理了三边为正数、是否满足三角形条件等。</think># Java计算三角形周长的PTA习题 以下是根据PTA题型设计的Java编程题及选择题,包含三角形周长计算的核心考点: --- ### **编程题:三角形类实现** **题目描述** 实现`Triangle`类,要求: 1. 包含三个私有整型属性`a,b,c`表示三边长度 2. 构造方法`public Triangle(int a, int b, int c)`需验证三边合法性(任意两边之和大于第三边) 3. 方法`public int getPerimeter()`返回周长(非法三角形返回-1) 4. 方法`public boolean isValid()`判断是否为合法三角形 **输入样例** ```java Triangle t = new Triangle(3,4,5); System.out.println(t.getPerimeter()); // 应输出12 ``` **参考答案框架** ```java public class Triangle { private int a, b, c; public Triangle(int a, int b, int c) { // 此处补充构造方法逻辑 } public boolean isValid() { // 验证三角形合法性 } public int getPerimeter() { // 返回周长或-1 } } ``` --- ### **选择题** **1. 以下哪个代码片段能正确计算三角形周长?** A. ```java public int getPerimeter() { return a + b + c; } ``` B. ```java public int getPerimeter() { if (a + b > c) return a + b + c; else return -1; } ``` C. ```java public int getPerimeter() { if (isValid()) return a * b * c; else return -1; } ``` D. ```java public int getPerimeter() { return (a + b + c) / 2; } ``` **正确答案**:A **解析**:B选项仅验证了部条件,C选项错误使用乘法,D计算的是半周长[^1]。 --- **2. 构造方法中验证三角形合法性的正确逻辑是?** A. `if (a + b > c)` B. `if (a + b > c || a + c > b || b + c > a)` C. `if (a + b > c && a + c > b && b + c > a)` D. 不需要验证 **正确答案**:C **解析**:三角形必须满足所有两边之和大于第三边[^2]。 --- ### **扩展练习建议** 1. 在`toString`方法中添加输出三边信息的功能(参考Eclipse自动生成格式) 2. 添加异常处理机制,当三边非法时抛出`IllegalArgumentException` 3. 实现面积计算方法(需使用海伦公式) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值