如何在C a+中计算等比数列

pftdvrlh  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(163)

我正在写一个代码,计算类似于几何序列的东西。

我以为我做到了,但当我看着解决方案时,似乎我在做完全不同的事情。
这里有一个小的转折,X值在XminXmax的范围内,这意味着xmin〈= x〈= xmax,并且有一个Dx的步长。
下面是我的代码:

#include <stdio.h>
#include <math.h>

void main(){

    double xmin, xmax, dx, x, n = 1;
    long s = 0;

    printf("Input xmin, xmax, dx: ");
    scanf("%lf%lf%lf", &xmin, &xmax, &dx);

    printf("\n       x          s\n=============================");

    for(x = xmin; x <= xmax; x += dx){
        s += pow(x,n);
        n++;
        printf("\n%10.3lf%10.3ld", x, s);
    }
}

下面是它的输出示例:(从1到5,步长为1)

这是实际的解决方案,我完全不明白:

#include <stdio.h>

int main(){

    int n,i;
    double xmin, xmax, dx, x;

    printf("Input n: ");
    scanf("%d", &n);

    printf("Input xmin, xmax, dx: ");
    scanf("%lf%lf%lf", &xmin, &xmax, &dx);

    printf("\n       x          s\n=============================");

    for(x = xmin; x <= xmax; x += dx){
        double s = 0, p = 1;
        for(i = 1; i <= n; i++)
            s += (p *= x);
        printf("\n%10.3f%10.3f", x, s);
    }
    return 0;
}

下面是它的输出:(我把n随机地写成3,因为我不明白它是做什么的)

我的问题是,我在代码中做错了什么?为什么在 solution 中有另一个循环,其中有两个变量甚至在任何地方都没有使用?看起来我的代码输出没有错,但我甚至无法理解 solution 的输出。

uklbhaso

uklbhaso1#

您已经有了主循环,即“对于x的每个值,从xminxmax,使用dx作为步骤”。但是,您需要重新考虑算法是如何工作的。回头看看求和公式。您的答案应该是使用xi次幂之和来计算的。其中i是从1n的每个整数。因此,当n = 3时,对于x的每个值,您的输出应等于x^1 + x^2 + x^3。
1^1 + 1^2 + 1^3 = 1
2^1 + 2^2 + 2^3 =十四个
3^1 + 3^2 + 3^3 =三十九
4^1 + 4^2 + 4^3 = 84个
5^1 + 5^2 + 5^3 =一百五十五
第一个循环是对x的每个值重复该公式,但需要一个嵌套循环,因为使用的公式是求和(i = 1到n,x^i),而且不应该将上一个公式的结果带入新的公式。
让我来解释一下:稍微好一点。(总和)初始化为0,p初始化为1。每次循环时,p乘以x,然后与s相加。第一次循环时,pow(p, 1)与总和相加。第二次循环时,pow(p, 2)相加。第三次循环时,x = pow(p, 3)相加,如果n = 4x = 2相加,那么就是s = pow(2, 1) + pow(2, 2) + pow(2, 3) + pow(2, 4),或者s = 2 + 4 + 8 + 16,或者s = 30,这等于i从1到n的和。
我希望这对你有帮助,如果你想进一步解释,我很乐意给予你。

jobtbby3

jobtbby32#

在for循环中

for(x = xmin; x <= xmax; x += dx){
    s += pow(x,n);
    n++;
    printf("\n%10.3lf%10.3ld", x, s);
}

n的值在循环的每次迭代中递增

for(x = xmin; x <= xmax; x += dx){
    double s = 0, p = 1;
    for(i = 1; i <= n; i++)
        s += (p *= x);
    printf("\n%10.3f%10.3f", x, s);
}

对于给定的x值它是固定的。
另一个问题是,对于给定的x值,在循环的每次迭代中都没有重置变量s。

s += pow(x,n);

相反,您需要至少写为

s = pow(x,n);

尽管由于n递增,这在任何情况下都是不正确的。
实际上,第二个程序分别计算[xmin, xmax]范围内每个x的公式,而您的代码计算公式,而您的程序计算不同x值的整个公式。

相关问题