【问题标题】:c primer plus chapter 6 ex12c 入门加第 6 章 ex12
【发布时间】:2016-09-27 10:26:28
【问题描述】:

everyone,c 入门加第 6 章 ex12:

**考虑这两个无限级数:

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", &times);
    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", &times);
    }
    return 0;
}

我的代码有什么问题?

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
  • 你需要描述至少直到它工作正常的限制或它是否工作

标签: c


【解决方案1】:

这里:

while ((d = b) % 2 == 1)
{ 
  c = 1.0;
  d++;
}

您将b 的值分配给d(通过d = b),然后检查该值是否模2 等于1。如果是这种情况,您将永远进入循环作为值b 永远不会改变。当然,您在循环中增加 d,但在检查中,您将其值重置为 b,从而导致无限循环。

关于您的练习,如果 b 是偶数,而 1 是 b 是奇数,则您尝试将 c 设置为 -1。这可以通过条件赋值轻松完成:

c = (b % 2 == 0) ? -1.0 : 1.0;

或者,正如您问题中的提示所暗示的那样,您可以在启动循环之前将c 初始化为1(或-1)并在内部执行c = -1.0 * c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多