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」が得られ続けます。何が起こっている?!float も試しましたが、それでも同じ出力が得られます。

また、ちょっとした質問ですが、本当に「return 0;」を追加する必要がありますか? メイン関数に?

もう 1 つの副次的な質問ですが、「using namespace std;」と書く必要がありますか? すべての関数の中に、または私が行ってきたように、すべての外側に書くことができます。

4

3 に答える 3

1

同様のエラーが発生するかどうかを確認するために、VS2008でいくつかの実験を試みました。円周率をフロートに変更すると、78.500002622604370が得られます。これは、問題とは異なりますが、同じではありません。しかし、円周率が2倍の場合、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に合格したほうがいいでしょう。double の C++ デフォルトでは指定子は必要ないため、3.14 で問題ありません。(float を指定するには 3.14f が必要です)。そうは言っても、私は 5 と 5.0 の両方を試し、コンパイラで両方とも 78.5 を得ました。

std 名前空間の使用方法は問題ありませんが、指摘したように、すべての標準名前空間がスコープに含まれます。教材でよく見かけます。そのまま使ったほうがいい using std::cout;

または、明示的に std::cout をすべての用途に追加します。ただし、コンパイルの観点からは、あなたが行った方法で「間違っている」ことは何もありません。

于 2013-03-11T00:39:25.713 に答える
1

あなたは何か間違ったことをしていると思います。GCC コンパイラで同じことを試したところ、78.5 になりました。どのコンパイラを使用していますか?

その他のご質問について

  1. プログラムの状態を main から返すことは常に良い考えです。通常、すべてが正常に機能する場合は EXIT_SUCCESS を返すことができ、そうでない場合は EXIT_FAILURE を返すことができます。

  2. いいえ、namespace std を使用して含める必要はありません。代わりに、標準の名前空間を汚染するのは悪い習慣です。非常に頻繁に使用する関数のみを含める必要があります。

C++ の詳細については、こちらを参照してください。このリンクを確認してください

お役に立てれば。

于 2013-03-11T00:11:16.893 に答える