1

这是我的程序:

 #include "stdafx.h"
 #include <iostream>

 using namespace std;

 double areaofcircle(double r)
 {
 return 3.14 * r * r;
 }

 int main()
 {
 cout << areaofcircle(5);
 }

我应该得到“78.5”的输出,但我一直得到“78.512”。到底是怎么回事?!我也试过浮动,但我仍然得到相同的输出。

也只是一个附带问题,我真的需要添加“return 0;”吗?主要功能?

还有一个问题,我需要写“使用命名空间std;”吗?在每个函数内部,或者我可以在所有内容之外编写它,就像我一直在做的那样。

4

3 回答 3

1

我认为你做错了什么。我在 GCC 编译器上尝试了同样的方法,我得到了 78.5。您使用的是哪个编译器?

关于你的其他问题

  1. 从 main 返回程序的状态总是一个好主意。通常,如果一切正常,您可以返回 EXIT_SUCCESS,否则您可以返回 EXIT_FAILURE。

  2. 不,没有必要包含 using namespace std。相反,污染标准命名空间是不好的做法。您应该只包括那些您经常使用的功能。

阅读有关 C++ 的更多信息。检查此链接

希望这可以帮助。

于 2013-03-11T00:11:16.893 回答
1

在 VS 2008 上尝试了一些实验,看看我是否会得到类似的错误。通过将 pi 更改为浮点数,我确实得到了 78.500002622604370,这与您的问题不同但又不同。但是当 pi 是双倍时,我确实得到 78.5。

我建议您让我们知道您正在使用哪个编译器和版本,然后可能有人可以提供帮助。

#include "stdafx.h"
#include <iostream>
const double pi = 3.14;


 double areaofcircle(double r)
 {
    return pi * r * r;
 }

int _tmain(int argc, _TCHAR* argv[])
{
    double temp = areaofcircle(5);
    std::cout << temp;
    return 0;
}
于 2013-03-11T00:37:27.420 回答
1

您正在传递整数 (5) 的文字,因此需要在某处进行隐式转换才能将其转换为双精度。你最好通过 5.0。双精度的 C++ 默认值不需要说明符,因此您的 3.14 很好。(指定浮点数需要 3.14f)。也就是说,我尝试了 5 和 5.0,并且在我的编译器上都得到了 78.5。

您使用 std 命名空间的方式很好,但正如所指出的那样,它确实将所有标准命名空间纳入范围。我在教材中经常看到这一点。最好只使用 using std::cout;

或者只是明确地将 std::cout 添加到所有用途中。但是,从编译的角度来看,您执行此操作的方式没有任何“错误”。

于 2013-03-11T00:39:25.713 回答