【问题标题】:C program to sum the following series: S = 1 + (1+2) + (1+2+3)+...+(1+2+3+...+N)C程序求和以下系列: S = 1 + (1+2) + (1+2+3)+...+(1+2+3+...+N)
【发布时间】:2020-01-10 16:49:49
【问题描述】:

我正在使用嵌套的for 循环来解决给定的问题。

我有 4 个整数要声明:i(用于外部循环的初始化)、j(用于内部循环的初始化、s(用于显示系列的总和)和term(用于查找系列中的术语值)。到目前为止,我还可以。我没有得到的是分配 sterm 与值 0 的必要性。

另外,为什么是term = term +js = s+term

int i,j,n,s,term;
s= 0;
for(i=1; i<=n; i++) {
    term=0;
    for(j=1; j<=i; j++) {
        term = term +j;
    }
    s = s+term;
}

【问题讨论】:

  • 您能否详细说明您的问题?如果sterm 未设置为0,您认为会发生什么?您期望什么而不是后面的两个分配?
  • 直到这里(循环)都没有为变量赋值的要求。因此,我有这个问题。我对编程非常陌生。以及堆栈溢出。所以,如果我在使用网站时出现失误,请原谅。
  • 那你应该读一些 C 的入门书,一些可能的选择见this list。如果您有具体问题,请在此处提问。
  • “直到这里(循环)都没有为变量赋值的要求。”那不是真的。在读取变量之前,您总是必须为其赋值。对于您以前的所有主题/作业/教科书章节,这已经是正确的。但你可能没有注意到,因为它总是隐含地发生。如果您在初始化/写入变量之前读取过它,那么您很容易受到“未定义行为”(查找它)的影响,并且您不会喜欢它。 (严格来说,全局变量是一个例外。但是,使用它们是一个单独的不鼓励概念。)
  • 我从寻找两个整数之和的编程开始。其中“sum”是变量,并且程序是在没有赋值的情况下编写的。但正如您可能建议的那样,它可能已经隐式完成。我没有意识到这一点。你认为 sum 在这样一个程序中的价值是什么?

标签: c for-loop nested


【解决方案1】:

在一行中,

term = term +j;

如果你不将term初始化为零,默认值是垃圾存储在term中,所以

您期望 term = 0 + j,这将给出正确的值

但你实际上得到 G = G + j 其中 G 是垃圾。 同样, sum 也是垃圾,你永远不会得到正确的值

【讨论】:

    【解决方案2】:

    完全有可能在数学上简化它并获得更好的运行时间。

    S = \sum_{n=1}^N (\sum_{k=1}^n k)
    

    Wikipedia's explanation 中的\sum_{k=1}^n k = n(n+1)/2

    S = 1/2 \sum_{n=1}^N n^2 + 1/2 \sum_{n=1}^N n
      = 1/12 N(N+1)(2N+1) + 1/4 N(N+1)
      = 1/6 N(N+1)(N+2)
    

    简化,

    #include <stdio.h>
    
    static int s(const int n) {
        return n * (n + 1) * (n + 2) / 6;
    }
    
    int main(void) {
        printf("S(5) = %d\n", s(5));
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多