C++ 三角形面积计算

来源:互联网 发布:mac已安装软件桌面 编辑:程序博客网 时间:2024/05/17 22:36

面向对象程序设计与C++实验作业报告#8

作业要求

8[D&SJX_B]设计、编写和调试面向对象C++程序,支持和实现基于三个平面坐标点的三角形面积计算功能。基本要求同作业题[D&SJX_A],但要求三角形类作为点类的友元类,故需改写三角形面积计算成员函数使其可直接访问其三个顶点的横纵坐标值

程序设计说明

点类设计

类名

point

备注

成员函数

point (int zx=0,int zy=0);//构造函数

构造函数

point (point &p);//拷贝构造函数

拷贝构造函数

~point();//析构函数

析构函数

void psetvalue (int zx,int zy);//设置函数

设置横纵坐标函数

int getx();//横坐标提取函数

横坐标提取函数

int gety();//纵坐标提取函数

纵坐标提取函数

friendclasstri;

友元类

成员变量

int mx,my;

横纵坐标

 

类名

tri

备注

成员函数

tri( point &zp1, point &zp2, point &zp3);//构造函数

构造函数

tri(int x1=0,int y1=0,int x2=0,int y2=0,int x3=0,int y3=0){}

构造函数

tri(tri &p);//拷贝构造函数

拷贝构造函数

~tri ();//析构函数

析构函数

void tsetvalue ( point &zp1, point &zp2, point &zp3);//设置函数

赋值函数

double area ();//面积计算函数

面积计算函数

成员变量

point marray[3];

点类的对象数组

 

关键函数设计说明

point (int zx=0,int zy=0);//构造函数构造函数,支持缺省赋值

point (point &p);//拷贝构造函数 用于拷贝构造函数

~point();//析构函数输出赋值的结构,便于观察调用顺序

void psetvalue (int zx,int zy);//设置函数 设置函数中的横纵坐标

int getx();//横坐标提取函数 将函数的横坐标返回

int gety();//纵坐标提取函数 将函数的纵坐标返回

tri(point&zp1,point&zp2,point&zp3);//构造函数 

tri(intx1=0,inty1=0,intx2=0,inty2=0,intx3=0,inty3=0)

{}

tri(tri&p);//拷贝构造函数

~tri();//析构函数 析构函数,显示调用顺序

voidtsetvalue(point&zp1,point&zp2,point&zp3);//设置函数 设置函数,将三个点类输入

doublearea();//面积计算函数 利用tarea=0.5*(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2);公式将三角形的面积计算出来

源程序

由声明头文件point.htri.h、实现源程序文件point.cpptri.cpp和运算例程main.cpp组成。

声明头文件point.h代码清单

#ifndef POINT

#definePOINT

classtri;

 

class

  point

{

  int mx,my;

public:

  point (int zx=0,int zy=0);//构造函数

  point (point &p);//拷贝构造函数

  ~point();//析构函数

  void psetvalue (int zx,int zy);//设置函数

  int getx();//横坐标提取函数

  int gety();//纵坐标提取函数

  friendclasstri;

 

};

 

 

#endif// !POINT

 

声明头文件tri.h代码清单

#ifndef TRI

#define TRI

#include"point.h"

classtri

{

  point marray[3];

public:

  tri( constpoint &zp1,constpoint &zp2,constpoint &zp3);//构造函数

  tri(intx1=0,inty1=0,intx2=0,inty2=0,intx3=0,inty3=0)

  {}

  tri(tri &p);//拷贝构造函数

  ~tri ();//析构函数

  void tsetvalue (constpoint &zp1,constpoint &zp2,constpoint &zp3);//设置函数

  double area ();//面积计算函数

};

#endif

实现源程序文件point.cpp代码清单

#include<iostream>

#include<cmath>

#include"point.h"

#include"tri.h"

usingnamespace std;

point::point(intzx,intzy)//构造函数

{

  mx=zx;

  my=zy;

}

 

point::point(point &p)//拷贝构造函数

{

  mx=p.mx;

  my=p.my;

}

 

point::~point()//析构函数

{

  cout<<mx<<","<<my<<endl;

}

voidpoint::psetvalue(intzx,intzy)//point赋值函数

{

  mx=zx;

  my=zy;

}

 

intpoint::getx()//横坐标提取函数 //在此次试验中没有作用

{

  return mx;

}

 

intpoint ::gety()//纵坐标提取函数 //在此次试验中没有作用

{

  return my;

}

实现源程序文件tri.cpp代码清单

#include<iostream>

#include<cmath>

#include"point.h"

#include"tri.h"

usingnamespace std;

 

tri::tri(constpoint &zp1,constpoint &zp2,constpoint &zp3)//构造函数

{

  marray[0]=zp1;

  marray[1]=zp2;

  marray[2]=zp3;

}

tri::tri(tri &p)//拷贝构造函数

{

  marray[0]=p.marray[0];

 

  marray[1]=p.marray[1];

  marray[2]=p.marray[2];

  

}

tri::~tri()//析构函数

{

  cout <<"析构函数 tri"<< endl;

}

 

voidtri::tsetvalue(constpoint &zp1,constpoint &zp2,constpoint &zp3)//设置赋值函数

{

  marray[0]=zp1;

  marray[1]=zp2;

  marray[2]=zp3;

}

 

doubletri ::area()//面积计算函数

{

  double tarea ;

  double x1,x2,x3,y1,y2,y3;

  x1=marray[0].mx;

  x2=marray[1].mx;

  x3=marray[2].mx;

  y1=marray[0].my;

  y2=marray[1].my;

  y3=marray[2].my;

 

  tarea=0.5*(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2);//此处可以将上述的marray[i].mx/my直接带入,但是为了简洁,不带入

  

  return fabs(tarea);//取绝对值

}

运算例程main.cpp代码清单

#include"point.h"

#include"tri.h"

#include<cmath>

#include<iostream>

#include<stdio.h>

 

usingnamespace std;

int main()

{

  int a,b;

  for(;1;)

  {

  cout<<"请输入第一个点的坐标"<<endl;

  cin>>a>>b;

  point zp1(a,b);

 

  cout<<"请输入第二个点的坐标"<<endl;

  cin>>a>>b;

  point zp2(a,b);

 

  cout<<"请输入第三个点的坐标"<<endl;

  cin>>a>>b;

  point zp3(a,b);

 

  tri mtri;

  mtri.tsetvalue(zp1,zp2,zp3);

  cout<<"the area is "<<mtri.area()<<endl;

  }

  system("pause");

  return 0;

}

程序测试报告

测试用例设计

  1. 输入三个点的坐标为(00)(01)(10),输出面积为0.5

  2. 输入三个点的坐标为(00)(02)(20),输出面积为2

  3. 输入三个点的坐标为(00)(03)(30),输出面积为4.5

    全部计算正确

自己程序运行结果截屏及说明

检查他人程序发现问题和学习心得

同学程序靓点:

思路清晰,简单易懂,在main函数中加入判断循环while,通过用户的输入,判断是否计算。

你所发现的同学程序问题:

可能有重复编译的情况,应该加上#ifndef……#define……#endif

作业完成及检查学习心得

知道了友元类的使用方法,明白了友元类的“好处”,是我们能直接进入数据中,但是正如老师所说的,这是与c++的思想相悖的,所以要尽量的少使用。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大姨妈来了肚子痛怎么办 一到晚上就腹泻怎么办 减肥晚上太饿了怎么办 半夜饿了没吃的怎么办 晚上11点饿了怎么办 孕妇睡前肚子饿怎么办 减肥的时候晚上饿了怎么办 晚上睡前总是饿怎么办 狗狗牙齿松动了怎么办 狗狗牙齿掉了怎么办 眼镜金属架断了怎么办 纯钛眼镜架断了怎么办 万次火柴没油了怎么办 火疖子破了流脓怎么办 火疖子没有脓头怎么办 孕妇长火疖子疼怎么办 手上长小水泡痒怎么办 脚上起水泡很痒怎么办 手指上有水泡痒怎么办 手指起小水泡痒怎么办 手过敏起小水泡怎么办 头皮上白色像癣怎么办 脸上长了火疖子怎么办 脸上长硬硬的包怎么办 下身体痒痒得不得了怎么办 头皮干痒头屑多怎么办 头发掉的露头皮怎么办 头上老是有结痂怎么办 婴儿头上的黄痂怎么办 头皮屑多又痒怎么办小偏方 皮肤瘙痒起红疙瘩怎么办 头又油又痒怎么办 头上反复长脓包怎么办 额头上长了粉刺怎么办 身上长红疙瘩很痒怎么办 脸上的痘痘变硬怎么办 痘痘变成硬疙瘩怎么办 痘痘变硬了怎么办知乎 痘痘里面是硬的怎么办 皮肤出油毛孔大怎么办 蹭无线网信号差怎么办