C++程序例题问题疑惑,求大神解答,不胜感激

21,计算并且输出10以内(包括10)的所有自然数的阶乘值。#include<stdio.h>intmain(){intn,k,s;for(n=1;n<=10;n=n+1... 21,计算并且输出10以内(包括10)的所有自然数的阶乘值。

#include<stdio.h>
intmain()
{
int n,k,s;
for(n=1;n<=10;n=n+1)
{ s=1;
for(k=1;k<=n;k=k+1)
s=s*k;
printf("%6d!=%d\n",n,s);
}
return 0;
}

(注:以上为正确答案,)问题:
如果把s=1放到外循环for(n=1;n<=10;n=n+1)的前面可以吗?为什么啊??
改变后程序如下:
#include<stdio.h>
intmain()
{
int n,k,s;
s=1;
for(n=1;n<=10;n=n+1)
{
for(k=1;k<=n;k=k+1)
s=s*k;
printf("%6d!=%d\n",n,s);
}
return 0;
}

只想求解详细原因解释,十分感谢,不胜感激
展开
 我来答
百度网友72165e1
2013-05-07 · TA获得超过2170个赞
知道大有可为答主
回答量:1369
采纳率:100%
帮助的人:419万
展开全部
这个程序是求一组数字的阶乘,对于每个数的阶乘,其计算过程是这样的:
首先,给存放结果的变量s一个初始值1,s=1
第二,给控制变量k赋初值1,准备进行n阶计算
第三,判断控制变量k<=n?是则进入下步,不是则跳至第六步
第四,让s保存其与控制变量k的乘积,这样,第一次s=1,k=1,第二次k=2,s=1*2=2
第三次k=3,s=2*3,......一直到n,这样s里就存了从1到n有乘积。
第五,控制变量正加1,即k=k+1,转到第三步。
第六,输出计算阶乘的结果。
可以看出,对每个数的阶乘,首先要令s有一个初始值,如果按你所说,将s的赋值操作放在外循环,那么就无法使每次计算一个新的数阶乘时让s有一个初始值1.
事实上下面那处程序就是错在这里。由于在计算第一个数的阶乘之后,s即将保存上一个数的阶乘的结果,作为始值参与到下一个数的阶乘计算中来。
你看,
正确: 错误:
1!=1 1!=1
2!=2 2!=2
3!=6 3!12 (因为初值为2,所以计算成2*1*2*3=12)
4!=24 4!=288(因为初值为12,所以计算为12*1*2*3*4=288
百度网友28b4182
2013-05-07 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1835万
展开全部
不行的

//如果放外面的话就会把上一次结果给统计进来了,所以就不对。
intmain()
{
int n,k,s;
for(n=1;n<=10;n=n+1)
{
s=1;//赋初值
for(k=1;k<=n;k=k+1)//计算i的阶乘
s=s*k;
printf("%6d!=%d\n",n,s);
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pengguismile
2013-05-07 · TA获得超过687个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:123万
展开全部
正确答案每次都for循环都将S置1,而你的S保留的是上次循环的结果,
第一次循环:n=1,k=1,s=1,result=1
第二次循环:n=2,第一次子循环s=1=s(1)*k(1);二次子循环:s=2=s(1)*k(2);
第三次循环:n=3,第一次子循环s=2=s(2)*k(1);二次:s=4=s(2)*k(2);三次:s=12=s(4)*k(3);
第四次循环:这次S的初始值是12哦,有兴趣自己推算吧!
.....
括号里是该变量的值。
明白了吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友999406769
2013-05-07 · 超过38用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:103万
展开全部
肯定不行啊。你s移到外面之后,算下一个数的阶乘的时候,s的初值是上一个数的阶乘的值了。比如你输出的3!=12了,为什么?就是因为s的初值这时变成2的阶乘的值2了,多乘了这个。
你算某个数比如n,当然是从1开始乘1*2*3*...n。而s移到外面之后相当于从上一次算的s的结果开始乘了,相当于n!=s*1*2**..n,这个结果怎么会对呢。所以在进入第二重循环之前s都要重新赋值为1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式