三角形,C ++构造,计算角度的问题

时间:2018-11-06 16:50:26

标签: c++ triangle-count

我的作业有问题。

1)我应该用输入a,b和c编写函数SSS。我需要输出alpha,beta和gamma。

2)我应该用输入a,b和gamma编写函数SWS。而且我需要输出c,alpha和beta。

这是我的代码:

@media (max-width: 991px) {
    .navbar-brand{    
        position: absolute;
        margin-left: 68px;
    }
}

我只能在一个函数中返回一个参数。对于任务1,我有很多功能:alpha,beta,gamma。而且我不知道如何在一个函数中编写它。我只写了一个函数来查找任务2的c。

我是C ++的新手。如果您能帮助我,我会很高兴。:)

4 个答案:

答案 0 :(得分:2)

首先,如果包含cstdio,则不需要iostream,而您最好在C ++中这样做,因为cstdio只是迁移到C ++的C库。

对于您的问题,听起来好像您需要按值传递变量。您最喜欢的C ++书籍应该告诉您,在像您这样的情况下,您需要“返回”多个值。在这种情况下,您可以将指针(C样式)或更安全的引用传递给类似于指针的函数。

因此,您实际上将如下定义函数:

void SSS(double a, double b, double c, double & alpha, double & beta, double & gamma);

或者如@ Ripi2所述,将值包装在struct中并返回该类型的值:

/* Thanks to NathanOliver in the comments */
struct Values {
    double a;
    double b;
    double c;
};

Values SSS(double a, double b, double c) {
    Values values;
    /* Do stuff */
    return values;
}

答案 1 :(得分:2)

返回结构或使用提议的Triangle类是完美的解决方案,这是我通常使用的方法。

但是,在某些简单情况下,通过一个元组返回多个值会非常方便。
我在下面展示了一个简单的“工作”示例。
请注意,我通常会针对超过3个返回对象避免这种解决方案,以免造成混淆。

#include    <iostream>
#include    <tuple>
std::tuple<double, double, double> f(double x, double y){
    double a = x;
    double b = x+y;
    double c = x-y;
    return std::make_tuple(a, b, c);
}
int main() {
    double a, b, c;
    std::tie (a, b, c) = f (1.0, 2.0);
    std::cout << "a = " << a << "\n";
    std::cout << "b = " << b << "\n";
    std::cout << "c = " << c << "\n";
    return 0;
}

我希望代码能自我解释。
可以使用C ++ 17简化语法。我没有使用这些简化,因为我当前的编译器不兼容!
这种方法可以与结构一结合使用,因为可以通过一个元组返回多个结构。

编辑:我只是看到NathanOliver已经在评论中提到了元组的可能性...

答案 2 :(得分:1)

struct将是您要做的最简单的方法。您也可以创建一个类,但这可能是作业的一种过分解决方案(它们基本上是相同的,但请参阅我的评论主题以了解该问题)。

结构声明如下:

struct containerName
{
    int val_a;
    double val_b;
    //and so on : you put what ever you need
}

然后该结构基本上成为一种类型,可以像intdoublebool等那样使用。

Here's a nice readingstruct上以及如何使用

答案 3 :(得分:1)

是的,您只能从函数中返回一个对象。但是您可以让它返回一个复合对象,例如结构或类。传统上,您仅将结构体用于数据对象,因为这就是它们在C语言中的作用。

struct Triangle
{
    double a;
    double b;
    double c;
};

然后,您可以从函数中返回Triangle对象。并以这种方式访问​​其成员:

Triangle tri1;     // first, create an instance of the struct
tri1.a = 5.0f;      // assign a value to a member

优良作法是为数据类型选择有意义的名称(就像使用变量一样),并始终设计数据类型以使其代表名称。


为使代码更具表达力,您可以采用面向对象的方法进一步完善代码。您可以给数据类型Triangle成员函数计算其角度,以便可以“询问” Triangle的角度是什么。

(这时您也应该将其命名为类,因为它不再是纯数据结构,但这是一个约定。在C ++中,结构和类几乎相同。)

class Triangle
{
    public:
    // everything in this section can be accessed from outside

    // this is a constructor. It is a special function that lets you create a Triangle
    Triangle(double pa, double pb, double pc)
        : a(pa), b(pb), c(pc)   // initialize the members
    {}

    // getters for the private members (not needed but that way they can't directly be changed)
    double get_a() const
    {
        return a;
    }
    double get_b() const
    {
        return b;
    }
    double get_c() const
    {
        return c;
    }

    double alpha() const;
    double beta() const;
    double gamma() const;
    // should be const because they dont change anything about the object

    private:   
    // the default access for classes, everything in this section can only be accessed by member functions

    double a;
    double b;
    double c;
};

// member function definitions outside of class declaration
double Triangle::alpha() const
{
    // calculate and return alpha...
}
double Triangle::beta() const
{
    // calculate and return beta...
}
double Triangle::gamma() const
{
    // ...
}

您可以通过以下方式使用此类:

int main()
{
    // create a Triangle by calling the constructor
    Triangle tri1(5.0, 7.0, 8.0);
    std::cout << "Alpha: " << tri1.alpha() << std::endl;
    std::cout << "Beta: " << tri1.beta() << std::endl;
    std::cout << "Gamma: " << tri1.gamma() << std::endl;
    return 0;
};