编写一个程序计算“三角形、正方形、圆形"三种图形的面积,求:a)抽象出一个基类base b)在其中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个程序计算“三角形、正方形、圆形"三种图形的面积,求:a)抽象出一个基类base b)在其中相关的知识,希望对你有一定的参考价值。
编写一个程序计算“三角形、正方形、圆形"三种图形的面积,求:a)抽象出一个基类base b)在其中说明一个虚函数来球面积; c)利用派生类定义“三角形,正方形、圆形"d)缩写主函数并测试
参考技术A 用C++写的,代码如下:#include <string>
#include <vector>
#include <iostream>
#include <math.h>
using namespace std;
//存放一个点
struct Point
Point ():
x(0.0),
y(0.0)
Point(double _x, double _y):
x(_x),
y(_y)
//计算两个点之间的距离
double distance(Point point)
return sqrt((point.x - x) * (point.x - x) + (point.y - y) * (point.y - y));
double x;
double y;
;
//基类
class Base
public:
virtual double getArea() = 0;
//设置点的集合
void setPoint(const vector<Point>& pointSet)
m_pointSet = pointSet;
protected:
vector<Point> m_pointSet;
;
//三角形
class Triangle : public Base
public:
//根据三个点的坐标计算面积
virtual double getArea()
if (m_pointSet.size() < 3)
return 0.0;
//海伦公式
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
Point pointC = *(m_pointSet.begin() + 2);
double a = pointB.distance(pointC);
double b = pointA.distance(pointC);
double c = pointB.distance(pointA);
double p = (a + b + c) / 2.0;
return sqrt(p * (p-a) * (p-b) * (p-c));
;
//正方形
class Rectangle : public Base
public:
//根据两个点的坐标计算正方形边长,然后计算面积
virtual double getArea()
if (m_pointSet.size() < 2)
return 0.0;
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
double edgeLength = pointA.distance(pointB);
return edgeLength * edgeLength;
;
//圆
class Circle : public Base
public:
//根据两个点的坐标计算圆的半径,然后计算面积
virtual double getArea()
if (m_pointSet.size() < 2)
return 0.0;
Point pointA = m_pointSet.front();
Point pointB = *(m_pointSet.begin() + 1);
double length = pointA.distance(pointB);
return 3.141592653 * length * length;
;
int main()
vector<Point> point;
point.push_back(Point(0, 0));
point.push_back(Point(0, 50));
//圆,放入圆心和圆上的一个点
Circle circle;
circle.setPoint(point);
double area = circle.getArea();
cout << "Circle : "<< area << endl;
//正方形,放入相邻的两个点
Rectangle rectangle;
rectangle.setPoint(point);
area = rectangle.getArea();
cout << "Rectangle : "<< area << endl;
point.push_back(Point(50, 50));
//三角形,放入三个顶点
Triangle triangle;
triangle.setPoint(point);
area = triangle.getArea();
cout << "Triangle : "<< area << endl;
return 0;
用c语言编写一个简单计算器程序
输入格式未data1 op data2. data1和data2为参加运算两个数,op为预算符号只能取+、-、*、/ 求助谢谢。。。用swich语句和if。。。还未学循环
#include<stdio.h>//计算器
voidmenu()//自定义的菜单界面
{
printf("--------------------\n");
printf("请输入你的选择\n");
printf("1.+\n");
printf("2.-\n");
printf("3.*\n");
printf("4./\n");
printf("--------------------\n");
}
intmain()
{
inti=0;
intj=0;
intnum=0;//计算结果存放在nun
intselect=0;//选择的选项存放在select
do//do-while先执行再判断循环条件,即可实现重复计算功能
{
menu();//打印出菜单界面
scanf("%d",&select);//输入你的选项
printf("请输入计算值:");
scanf("%d%d",&i,&j);//输入要计算的数值
switch(select)
{
case1:
printf("%d+%d=%d\n",i,j,num=i+j);//实现加法功能
break;
case2:
printf("%d-%d=%d\n",i,j,num=i-j);//实现减法功能
break;
case3:
printf("%d*%d=%d\n",i,j,num=i*j);//实现乘法功能
break;
case4:
printf("%d-%d=%d\n",i,j,num=i/j);//实现除法功能
break;
default:
printf("输入有误重新选择");
break;
}
}while(select);
return0;
}
运行结果:
扩展资料:
return表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。
return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。
参考技术A #include <stdio.h>main()
char ch;
int num1,num2;
printf("\t运算器功能菜单\t\n");
printf("----------------------------------\n");
printf("\t1:加法\t\n");
printf("\t2:减法\t\n");
printf("\t3:乘法\t\n");
printf("\t4:除法\t\n");
printf("\t0:退出运算器\t\n");
printf("----------------------------------\n");
printf("\t选择运算(1-4,0):");
//输入数据
ch = getchar();
printf("\n");
printf("----------------------------------\n");
printf("\t输入运算数:\n");
printf("\t第一个数:");
scanf("%d",&num1);
printf("\t第二个数:");
scanf("%d",&num2);
printf("----------------------------------\n");
printf("\t运算结果:");
if(ch=='1')
printf("%d + %d = %d",num1,num2,num1+num2);
else if(ch=='2')
printf("%d - %d = %d",num1,num2,num1-num2);
else if(ch=='3')
printf("%d * %d = %d",num1,num2,num1*num2);
else if(ch=='4')
printf("%d / %d = %d",num1,num2,1.0*num1/num2);
else if(ch=='0')
printf("结束");
printf("\n");
printf("----------------------------------\n");
参考技术B double a,b;
char c;
scanf("%lf%c%lf",&a,&c,&b);
switch(c)
case '+':printf("%g%c%g=%g",a,c,b,a+b);break;
case '-':printf("%g%c%g=%g",a,c,b,a-b);break;
case '*':printf("%g%c%g=%g",a,c,b,a*b);break;
case '/':b?printf("%g%c%g=%g",a,c,b,a/b):puts("error");break;
default:printf("error");break;
追问
怎么排除除数为0的情况??
追答case '/':b?printf("%g%c%g=%g",a,c,b,a/b):puts("error");这不写了吗?除数为零,输出error
追问谢谢。。。刚没看仔细
本回答被提问者采纳以上是关于编写一个程序计算“三角形、正方形、圆形"三种图形的面积,求:a)抽象出一个基类base b)在其中的主要内容,如果未能解决你的问题,请参考以下文章
C++,,,课堂作业求助,,,编写一个程序,,计算自己的生日距离今天多少天,,是星期几
使用javafx技术编写一个计算器的程序,在计算器的界面上能进行加减乘除的操作