我正在写一个代码,计算类似于几何序列的东西。
我以为我做到了,但当我看着解决方案时,似乎我在做完全不同的事情。
这里有一个小的转折,X值在Xmin到Xmax的范围内,这意味着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 的输出。
2条答案
按热度按时间uklbhaso1#
您已经有了主循环,即“对于
x
的每个值,从xmin
到xmax
,使用dx
作为步骤”。但是,您需要重新考虑算法是如何工作的。回头看看求和公式。您的答案应该是使用x
的i
次幂之和来计算的。其中i
是从1
到n
的每个整数。因此,当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 = 4
和x = 2
相加,那么就是s = pow(2, 1) + pow(2, 2) + pow(2, 3) + pow(2, 4)
,或者s = 2 + 4 + 8 + 16
,或者s = 30
,这等于i从1到n的和。我希望这对你有帮助,如果你想进一步解释,我很乐意给予你。
jobtbby32#
在for循环中
n
的值在循环的每次迭代中递增对于给定的
x
值它是固定的。另一个问题是,对于给定的
x
值,在循环的每次迭代中都没有重置变量s。相反,您需要至少写为
尽管由于
n
递增,这在任何情况下都是不正确的。实际上,第二个程序分别计算
[xmin, xmax]
范围内每个x
的公式,而您的代码计算公式,而您的程序计算不同x值的整个公式。