我必须编写一个程序,打印下面的表达式“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。等等!
答案 0 :(得分: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;
}
答案 1 :(得分: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
- 循环的索引不是一种好习惯。
答案 2 :(得分:0)
首先,您的计算s+=((2*i-1) -2*i );
看起来适合数字对,但您的循环for (i=1;i<=n;i++)
是单独执行数字而不是成对执行数字。
其次,如果用户输入类似1234.5
的数字,循环将永远不会停止(正如其他人所提到的那样,根本没有理由使用浮点数。)
第三,你根本不需要循环。如果n
为偶数,则答案为-n/2
,如果n
为奇数,则答案为n-(n-1)/2
。
答案 3 :(得分: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的总和