gpt4 book ai didi

c - 在 C 中加起来 1/2 + 2/3 +...+ 18/19 + 19/20

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:37 25 4
gpt4 key购买 nike

几乎我正在尝试在 C 中执行 1/2 + 2/3 +...+ 18/19 + 19/20,这是我的代码:

版本 1:

int main(){
double i,j,sum;

for(i=1,j=2,sum=0; i<=19 && j<=20; i++, j++)
sum+=i/j;
printf("%f\n",sum);

return 0;
}

版本 1 输出:16.402260

版本 2:

int main(){
double i,j,sum;

for(i=1,j=2,sum=0; i<=19 && j<=20; sum+=i/j, i++, j++)
printf("%f\n",sum);

return 0;
}

版本 2 输出:

0.000000
0.500000
1.166667
1.916667
2.716667
3.550000
4.407143
5.282143
6.171032
7.071032
7.980123
8.896789
9.819866
10.748438
11.681771
12.619271
13.560447
14.504892
15.452260

版本 3:

int main(){
double i,j,sum;

for(i=1,j=2,sum=0; i<=19 && j<=20; sum+=i/j, i++, j++)
;
printf("%f\n",sum);

return 0;
}

版本 3 输出:

16.402260

我很困惑为什么版本 1 和版本 3 可以工作而版本 2 不能工作,因为版本 2 和版本 3 非常相似,除了版本 3 的 for 循环包含空主体而版本 2 没有。

最佳答案

这是由于编译器翻译 for 循环的方式:

 for (i=1, j=2, sum=0; i <= 19 && j <= 20; i++, j++) { /* code */ }

 for (/* init */; /* condition */; /* increment*/) { /* code */ }

...被执行为...

i=1, j=2, sum = 0; /* init */
while (i <= 19 && j <= 20) { /* condition */
/* code */

i++, j++; /* increment */
}

因此在版本二中,printf 中的sum 还没有最新值:

i=1, j=2, sum = 0; /* init */
while (i <= 19 && j <= 20) { /* condition */
/* code */

sum += i/j, i++, j++; /* increment */
}

... 因为 sum 是增量的一部分。

干杯!

关于c - 在 C 中加起来 1/2 + 2/3 +...+ 18/19 + 19/20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16615506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com