|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写程序,求1-3+5-7+...-99+101的值
我编写了两个程序,为什么结果不同呢,哪个应该正确?
程序1:结果为-51
#include <stdio.h>
int main(void)
{
int i,n,sum=0,sign=1;
for(i=1,n=1;i<=101;i=i+2)
{
sum=sum+n;
sign=-sign;
n=n+2;
n=sign*n;
}
printf("%d\n",sum);
return 0;
}
程序2:结果为51
#include <stdio.h>
int main(void)
{
int i,n,sum=0,sum1=0;
for(i=1;i<=101;i=i+4)
sum=sum+i;
for(i=3;i<=101;i=i+4)
sum1=sum1+i;
n=sum-sum1;
printf("%d\n",n);
return 0;
}
这两个程序分别表示了两种不同的方法来计算序列1-3+5-7+...-99+101的值,但它们存在编程逻辑上的不同。
首先,让我们分析第一个程序:
#include <stdio.h>
int main(void)
{
int i,n,sum=0,sign=1;
for(i=1,n=1;i<=101;i=i+2)
{
sum=sum+n;
sign=-sign;
n=n+2;
n=sign*n;
}
printf("%d\n",sum);
return 0;
}
这个程序试图交替地添加和减去奇数,但是它的执行顺序有些问题。在每个循环迭代中,首先把n加到sum上,然后改变sign的值,接着增加n的值,最后乘以sign。但是这个顺序意味着sign的改变会在n增加之后发生,所以实际上你是在把下一个奇数乘以当前的符号,而不是像你想的那样,把当前的奇数乘以当前的符号。这就是为什么第一个程序得到的结果是错误的。
第二个程序如下:
#include <stdio.h>
int main(void)
{
int i,n,sum=0,sum1=0;
for(i=1;i<=101;i=i+4)
sum=sum+i;
for(i=3;i<=101;i=i+4)
sum1=sum1+i;
n=sum-sum1;
printf("%d\n",n);
return 0;
}
这个程序首先计算所有需要加的数(1, 5, 9, ... 101),然后计算所有需要减的数(3, 7, 11, ... 99),然后做减法。这个方法准确地执行了题目要求的操作,所以得到的答案是正确的,序列1-3+5-7+...-99+101的结果应该是51。
因此,第二个程序是正确的。
|
|