作者在 2011-09-07 22:04:00 发布以下内容
编写程序,求下面级数前n项中偶数项的和ES。在求和过程中,以第一个绝对值大于9999的项为末项,计算并输出和数ES。(其中^表示幂运算)
题目出自:http://bbs.bccn.net/viewthread.php?tid=349405&pid=2005275&page=1#pid2005275
1!-2!+3!-4!+……+(-1)^(n-1)*n!+ ……
题目出自:http://bbs.bccn.net/viewthread.php?tid=349405&pid=2005275&page=1#pid2005275
1!-2!+3!-4!+……+(-1)^(n-1)*n!+ ……
#include<stdio.h>
void main()
{
int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM
while(temp<-9999||temp>9999)
{
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
n++;
temp*=n;
}
SUM=OS+ES;
printf("n=%d,temp=%d\n",n,temp);
printf("奇数项和等于\t%d\n",OS);
printf("偶数项和等于\t%d\n",ES);
printf("奇偶数项和等于\t%d\n",SUM);
}
void main()
{
int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM
while(temp<-9999||temp>9999)
{
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
n++;
temp*=n;
}
SUM=OS+ES;
printf("n=%d,temp=%d\n",n,temp);
printf("奇数项和等于\t%d\n",OS);
printf("偶数项和等于\t%d\n",ES);
printf("奇偶数项和等于\t%d\n",SUM);
}
上述代码没有编译及运行错误。但是结果是:
n=1,temp=1
奇数项和等于 0
偶数项和等于 0
奇偶数项和等于 0
奇数项和等于 0
偶数项和等于 0
奇偶数项和等于 0
显然不是我们所要求的结果。
修改了一下:
#include<stdio.h>
void main()
{
int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM
while(temp>=-9999||temp<=9999)
{
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
n++;
temp*=n;
}
SUM=OS+ES;
printf("n=%d,temp=%d\n",n,temp);
printf("奇数项和等于\t%d\n",OS);
printf("偶数项和等于\t%d\n",ES);
printf("奇偶数项和等于\t%d\n",SUM);
}
void main()
{
int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM
while(temp>=-9999||temp<=9999)
{
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
n++;
temp*=n;
}
SUM=OS+ES;
printf("n=%d,temp=%d\n",n,temp);
printf("奇数项和等于\t%d\n",OS);
printf("偶数项和等于\t%d\n",ES);
printf("奇偶数项和等于\t%d\n",SUM);
}
但是上述代码没有结果输出,准确的说是在进行死循环。
问题出在while(temp>=-9999||temp<=9999)且while语句中没有中断while语句的语句。
再次修改:
#include<stdio.h>
void main()
{
int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM
while(temp>=-9999&&temp<=9999)
{
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
n++;
temp*=n;
}
SUM=OS+ES;
printf("n=%d,temp=%d\n",n,temp);
printf("奇数项和等于\t%d\n",OS);
printf("偶数项和等于\t%d\n",ES);
printf("奇偶数项和等于\t%d\n",SUM);
}
void main()
{
int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM
while(temp>=-9999&&temp<=9999)
{
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
n++;
temp*=n;
}
SUM=OS+ES;
printf("n=%d,temp=%d\n",n,temp);
printf("奇数项和等于\t%d\n",OS);
printf("偶数项和等于\t%d\n",ES);
printf("奇偶数项和等于\t%d\n",SUM);
}
输出:
n=8,temp=40320
奇数项和等于 5167
偶数项和等于 -746
奇偶数项和等于 4421
奇数项和等于 5167
偶数项和等于 -746
奇偶数项和等于 4421
经好友提醒,我发现原来的代码错了。
修改如下:
#include<stdio.h>
void main()
{
int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM
while(temp<=9999)
{
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
n++;
temp*=n;
}
////////////////////////////////////
////////增加对末项进行操作//////////
////////////////////////////////////
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
////////////////////////////////////
////////////////////////////////////
SUM=OS+ES;
printf("n=%d,temp=%d\n",n,temp);
printf("奇数项和等于\t%d\n",OS);
printf("偶数项和等于\t%d\n",ES);
printf("奇偶数项和等于\t%d\n",SUM);
}
void main()
{
int OS=0,ES=0,SUM=0,n=1,temp=1;//奇数项和:OS,偶数项和:ES,奇偶数项和:SUM
while(temp<=9999)
{
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
n++;
temp*=n;
}
////////////////////////////////////
////////增加对末项进行操作//////////
////////////////////////////////////
if(n%2!=0)
{
OS+=temp;
}
else
{
ES-=temp;
}
////////////////////////////////////
////////////////////////////////////
SUM=OS+ES;
printf("n=%d,temp=%d\n",n,temp);
printf("奇数项和等于\t%d\n",OS);
printf("偶数项和等于\t%d\n",ES);
printf("奇偶数项和等于\t%d\n",SUM);
}
输出:
n=8,temp=40320
奇数项和等于 5167
偶数项和等于 -41066
奇偶数项和等于 -35899
奇数项和等于 5167
偶数项和等于 -41066
奇偶数项和等于 -35899
特别谢谢edwardflee 指出我的错误。