[ad_1]
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つの整数を除算することになり、それを行うと正しい結果は得られません。
[ad_2]
コメント