第六周 任务四

﹏ヽ暗。殇╰゛Y 2022-06-13 06:43 589阅读 0赞
  1. /*
  2. 实验内容:设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
  3. * 程序的版权和版本声明部分
  4. * Copyright (c) 2011, 烟台大学计算机学院学生
  5. * All rights reserved.
  6. * 文件名称: 三角形类
  7. * 作 者: 薛广晨
  8. * 完成日期: 2012 年 3 月 25 日
  9. * 版 本号: x1.0
  10. * 对任务及求解方法的描述部分
  11. * 输入描述:输入三角形的三个顶点
  12. * 程序头部的注释结束(此处也删除了斜杠)
  13. */
  14. /*【任务4】设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
  15. 提示:(1)这个问题需要用到两个类,顶点类参照任务3中的CPoint类;(2)三角形类参考下面CTriangle类的声明;(3)充分利用CPoint类中已有的代码实现;(4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。*/
  16. #include<iostream>
  17. #include"cmath"
  18. #define OK 1e-7
  19. using namespace std;
  20. class CPoint
  21. {
  22. private:
  23. float x; // 横坐标
  24. float y; // 纵坐标
  25. public:
  26. CPoint(double xx = 0,double yy = 0) : x(xx), y(yy){};
  27. float Distance(CPoint p) const; // 两点之间的距离(一点是当前点,另一点为参数p)
  28. void input(); //以x,y 形式输入坐标点
  29. };
  30. class CTriangle
  31. {
  32. public:
  33. CTriangle(CPoint &X, CPoint &Y, CPoint &Z) : A(X), B(Y), C(Z){} //给出三点的构造函数
  34. void setTriangle(CPoint &X, CPoint &Y, CPoint &Z);//
  35. float perimeter(void);//计算三角形的周长
  36. float area(void);//计算并返回三角形的面积
  37. bool isRightTriangle(); //是否为直角三角形
  38. bool isIsoscelesTriangle(); //是否为等腰三角形
  39. private:
  40. CPoint A, B, C; //三顶点
  41. float a, b, c;//三条边
  42. };
  43. void main()
  44. {
  45. CPoint p1, p2, p3;
  46. p1.input();
  47. p2.input();
  48. p3.input();
  49. CTriangle c(p1, p2, p3);
  50. c.setTriangle(p1, p2, p3);
  51. cout << "三角形的周长是:" << c.perimeter() << endl;
  52. cout << "三角形的面积是" << c.area() << endl;
  53. cout << (c.isRightTriangle()?"是":"不是") << "直角三角形" <<endl;
  54. cout << (c.isIsoscelesTriangle()?"是":"不是") << "等腰三角形" <<endl;
  55. system("pause");
  56. }
  57. void CTriangle :: setTriangle(CPoint &X, CPoint &Y, CPoint &Z)
  58. {
  59. a = X.Distance(Y);
  60. b = Y.Distance(Z);
  61. c = X.Distance(Z);
  62. if(abs(a + b - c) > OK && abs(a + c - b) > OK && abs(b + c - a) > OK)
  63. {
  64. A = X;
  65. B = Y;
  66. C = Z;
  67. }
  68. else
  69. {
  70. cout << "不能构成三角形,退出!" << endl;
  71. exit(1);
  72. }
  73. }
  74. float CTriangle :: perimeter(void)
  75. {
  76. return (a + b + c);
  77. }
  78. float CTriangle :: area(void)
  79. {
  80. float p;
  81. p = (a + b + c) / 2;
  82. return sqrt( p * (p - a) * (p - b) * (p - c) );
  83. }
  84. bool CTriangle :: isRightTriangle() //是否为直角三角形
  85. {
  86. if(abs(a * a + b * b - c * c) < OK || abs(a * a + c * c - b * b) < OK || abs(c * c + b * b - a * a) < OK)
  87. {
  88. return true;
  89. }
  90. else
  91. {
  92. return false;
  93. }
  94. }
  95. bool CTriangle :: isIsoscelesTriangle() //是否为等腰三角形
  96. {
  97. if(abs(a - b) < OK || abs(a - c) < OK || abs(b - c) < OK)
  98. {
  99. return true;
  100. }
  101. else
  102. {
  103. return false;
  104. }
  105. }
  106. void CPoint :: input() //以x,y 形式输入坐标点
  107. {
  108. char c1, c2, c3;
  109. cout << "请输入坐标(形式 (x,y))";
  110. while(1)
  111. {
  112. cin >> c1 >> x >> c2 >> y >> c3;
  113. if(c1 != '(' || c2 != ',' || c3 != ')')
  114. {
  115. cout << "格式错误,请重新输入(形式 (x,y))";
  116. }
  117. else
  118. break;
  119. }
  120. }
  121. float CPoint :: Distance(CPoint p) const // 两点之间的距离(一点是当前点,另一点为参数p)
  122. {
  123. float d;
  124. d = sqrt((p.x - x) * (p.x - x) + (p.y - y) * (p.y - y));
  125. return d;
  126. }

1332935735_2829.JPG
上机感言:(a * a + b * b == c * c || a * a + c * c == b * b || c * c + b * b == a * a)中的==写成=了,任务顺利完成,感觉很好

发表评论

表情:
评论列表 (有 0 条评论,589人围观)

还没有评论,来说两句吧...

相关阅读

    相关 任务

    /【任务5】将任务4的解决用一个项目多个文件的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优

    相关 任务

    //【任务1】下面的程序存在编译错误。有两种方法可以修改,请给出这两种修改方案,在报告中说明你倾向于用哪一种?为什么?处理此类问题的原则是什么? /实验目的:

    相关 任务

    / 实验内容:设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。 程序的版权和版本声明部分

    相关 任务

    /实验目的:设计平面坐标点类 实验内容:设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等 程序的版权和版本声明部分

    相关 任务

    /实验目的:练习使用指针 实验内容:程序填空:按要求将缺少的代码填进去 程序的版权和版本声明部分 Copyright (c)