-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 );

-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

你为什么要使用floatint改为使用

#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 回答
0
#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++) //problem is here instead of n you use n/2 it will work
    for (i=1;i<=(n/2);i++)
    {
        s+=((2*i-1) -2*i );
    }
    printf("\n Sum =%.2f",s);
    getch ();
 }

因为您的循环一次执行 2 个术语,所以直到 n 它将计算 n*2 的总和

于 2013-04-22T08:12:25.177 回答
0

首先,您的计算s+=((2*i-1) -2*i );看起来适合成对的数字,但您的循环for (i=1;i<=n;i++)是单独计算数字而不是成对计算数字。

其次,如果用户输入一个数字,比如1234.5循环将永远不会停止(正如其他人所提到的,根本没有理由使用浮点数)。

第三,您根本不需要循环。如果n是偶数,那么答案是-n/2,如果n是奇数,答案是n-(n-1)/2

于 2013-04-22T08:08:51.557 回答