【解決方法】これを実行すると結果が false になるのはなぜですか? どこが間違っているのでしょうか?

プログラミングQA


C++
//Tinh tong Sn = 1/1*2 + 1/2*3 + 1/3*4 + ... + 1/n*(n+1)

#include<stdio.h>
int main()
{
	int n,i;
	float s = 0.0;
	do
	{
		printf("n=");
		scanf("%d", n);
	}
	while(n<=0);
	for(i = 1; i <= n; i++)
    {
        s = s + (1/(i*(i+1)));
    }
	printf("\nS(%d) = %f", n, s);
	return 0;
}

私が試したこと:

さまざまなコーディング方法を使用しようとしましたが、それでも間違った結果が得られます

解決策 1

あなたの変数以来 i int および定数です 1 が int の場合、式は (1/(i*(i+1))) 整数演算を使用して行われます。 したがって、式は常に 0 に評価されます。 定数を変更することで浮動小数点演算を強制できます 1 1.0。 したがって、あなたの表現は次のようになります (1.0 / ( i * (i + 1.0) ))

解決策 2

いくつかの小さな変更を加えましたが、結果は正しいようです。 計算ループは次のようになります。

C++
double s = 0;
for( int i = 1; i <= length; i++ )
{
    s += ( 1.0 / double( i * ( i + 1 ) ) );
}

変更点は次のとおりです。
1. 計算結果には double を使用します。
2. 分母を double にキャストします。
3. 分子には double を使用します。

あなたがやったことは2つの整数を除算することになり、それを行うと正しい結果は得られません。

コメント

タイトルとURLをコピーしました