**考虑这两个无限系列:
1.0 + 1.0 / 2.0 + 1.0 / 3.0 + 1.0 / 4.0 + ...
1.0 - 1.0 / 2.0 + 1.0 / 3.0 - 1.0 / 4.0 + ...
编写一个程序,评估这两个系列的运行总数达到某个极限 条款数量。提示:-1次本身奇数次为-1,自身为-1次 偶数次是1.让用户以交互方式输入限制;让零或 负值终止输入。查看100个术语,1000个术语后的运行总计, 10,000个条款。这两个系列是否会收敛到某个值?**
#include <stdio.h>
int main(void)
{
int times, a, b, d;
float sum1, sum2, c;
printf("Enter the times: ");
scanf("%d", ×);
while (times > 0)
{
sum1 = 0;
sum2 = 0;
for (a = times; a >= 1; a--)
sum1 += 1.0 / (float)a;
printf("The sum1 is %f\n", sum1);
for (b = times; b >= 1; b--)
{
c = -1.0;
while ((d = b) % 2 == 1)
{
c = 1.0;
d++;
}
sum2 += (c / (float)b);
}
printf("The sum2 is %f\n", sum2);
printf("Enter the times again: ");
scanf("%d", ×);
}
return 0;
}
我的代码有什么问题?
答案 0 :(得分:1)
这里:
while ((d = b) % 2 == 1)
{
c = 1.0;
d++;
}
您将b
的值分配给d
(按d = b
),然后检查此模2的值是否等于1.如果是这样的话,你永远进入你的循环,因为b
的值永远不会改变。当然,您在循环中增加d
,但在检查中,您将其值重置为b
,从而导致无限循环。
关于您的练习,如果c
是偶数,则您尝试将-1
设置为b
,而将1设为b则为奇数。这可以通过条件赋值轻松完成:
c = (b % 2 == 0) ? -1.0 : 1.0;
或者,正如您的问题中提示的那样,您可以在循环之前将c
初始化为1
(或-1
)并在c = -1.0 * c
内进行1}} p>