gpt4 book ai didi

c - 为什么变量赋值的位置如此重要? [C]

转载 作者:行者123 更新时间:2023-11-30 15:03:31 25 4
gpt4 key购买 nike

在尝试解决 Kochan - C 书编程(前 4 个循环章节)的练习时,问题是写出前 10 个阶乘数。我尝试用嵌套循环来解决它,但结果完全是垃圾。我查找了一下,发现了一个与我的非常相似的解决方案,但我注意到变量的位置不同。

以前的解决方案:

/*This program calculates the first 10 factorials*/

#include <stdio.h>

int main(void){
int n,i;
unsigned long int fact=1;
printf(" n\t\t n!\n");
printf("---\t\t--------\n");
for(n=1; n<=10; n++){
for(i = 1; i<=n; i++){
fact*=i;
}
printf("%2d\t\t%7ld\n",n,fact);
}

return 0;
}

输出:

./factorial 
n n!
--- --------
1 1
2 2
3 12
4 288
5 34560
6 24883200
7 857276416
8 -511705088
9 1073741824
10 0

固定解决方案:

/*This program calculates the first 10 factorials*/

#include <stdio.h>

int main(void){
int n,i;
printf(" n\t\t n!\n");
printf("---\t\t--------\n");
for(n=1; n<=10; n++){
unsigned long int fact=1;
for(i = 1; i<=n; i++){
fact*=i;
}
printf("%2d\t\t%7ld\n",n,fact);
}

return 0;
}

输出:

./factorial 
n n!
--- --------
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800

请注意,唯一的区别是变量事实在第二个解决方案中是局部的,而在前一个解决方案中是全局的。

所以我想问题现在已经澄清了,为什么仅仅改变地方似乎就能解决问题?为什么会出现将变量放在首位的问题?提前致谢!

最佳答案

因为在 n 的每次迭代期间,变量都设置为 1。您可以像第一个代码中一样声明它,如果您在迭代 n 的循环开始时将其设置为 1,它应该给您结果相同。

关于c - 为什么变量赋值的位置如此重要? [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710108/

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