-8

次の式を出力するプログラムを作成する必要があります「1-2 + 3-4 + 5 + .... n。(奇数の合計と偶数の減算)私はこの正確なコードを書きました:

#include <stdio.h>
int main ()
{
    float c,n,i,s;
    c=getch ();
    printf ("\n Please write n:");
    scanf ("%f",&n);
    s=0.f;
    for (i=1;i<=n;i++)
    {
        s+=((2*i-1) -2*i );
    }
    printf("\n Sum =%.2f",s);
    getch ();
 }

コンパイルすると、エラーは表示されません。実行すると、数値を入力するたびに、たとえば 5 の結果が -5 になり、3 を入力すると -3 になります。何が間違っていますか?

編集: このような結果を得る必要があります: たとえば、6 を入力した場合、1-2+3-4+5-6 =-3 を実行する必要があります。4 を入れると、1-2+3-4=-2 をしなければなりません。

4

4 に答える 4

0

まず、計算s+=((2*i-1) -2*i );は数値のペアに対して正しく見えますが、ループfor (i=1;i<=n;i++)は数値を個別に処理しており、数値をペアで処理していません。

第二に、ユーザーがループのような数値を入力すると1234.5、ループは停止しません (他の人が述べたように、浮動小数点を使用する理由はまったくありません)。

第三に、ループはまったく必要ありません。が偶数の場合n、答えはであり、奇数の場合、答えは-n/2です。nn-(n-1)/2

于 2013-04-22T08:08:51.557 に答える
0

あなたの合計は間違っています:

s+=((2*i-1) -2*i );

を与え-1ます。

必要なもの:

s+=i*(2*(i%2) - 1);

すべての偶数には「-」、iすべての奇数には「+」が付けられますi

また、整数のみを扱っているため、使用する他のすべての変数と同様に、でiある必要があります。int

#include <stdio.h>
int main ()
{
    int s = 0, c= 0, n = 0, i = 1;
    c = getch();
    printf ("\n Please write n:");
    scanf ("%d",&n);
    for (i=1; i<=n; i++)
    {
        s+=i*(2*(i%2) - 1);
    }
    printf("\n Sum =%d",s);
    getch ();
 }

さらに簡単に、簡単な計算を使用して次のように取得できます。

if(n%2 == 0){
    s = -n/2;
}
else{
    s = n - n/2;
}
于 2013-04-22T07:57:09.417 に答える
0

なぜあなたは使うのfloatですか?int代わりに使用

#include <stdio.h>
int main ()
{
    int s = 0, c= 0, n = 0, i = 0;
    c=getch ();
    printf ("\n Please write n:");
    scanf ("%d",&n);
    for (i=1;i<=n;i++)
    {
        //s+=((2*i-1) -2*i );
        if( i%2 == 0)
           s -= i;
        else
           s += i; // a little more verbose, but should work        
    }
    printf("\n Sum =%d",s);
    getch ();
 }

整数の合計に使用floatし、ループのインデックスとして使用することはおfor勧めできません。

于 2013-04-22T07:57:57.400 に答える