C语言小问题:题目:求1!+2!+3!......+5!的和 为什么改变一个"{"的位置会产生不同的值

#include<stdio.h>intmain(){inta,b=0,i,j;for(i=1;i<=5;i++){a=1;for(j=1;j<=i;j++)a=a*j;... #include<stdio.h>
int main()
{
int a,b=0,i,j;
for (i=1;i<=5;i++)
{a=1;
for (j=1;j<=i;j++)
a=a*j;

b=a+b;}
printf("%d",b);
return 0;
}
这样做是正确的,输出153

但如果改变a=1前的{,变成:
#include<stdio.h>
int main()
{
int a,b=0,i,j;
for (i=1;i<=5;i++)
a=1;
{for (j=1;j<=i;j++)
a=a*j;

b=a+b;}
printf("%d",b);
return 0;
}
就会输出720。我对循环结构的嵌套不太熟悉,希望得到详细解释,谢谢!
展开
 我来答
光棍誓言
2011-10-15 · TA获得超过477个赞
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:174万
展开全部
#include<stdio.h>
int main()
{
int a,b=0,i,j;
for (i=1;i<=5;i++)
a=1;//没有了“{”变成了独立语句,意思是这个循环执行了5次a的赋值1,而i的五次自增变成了6
{for (j=1;j<=i;j++)
a=a*j;/*此处的“{}”变得可有可无,因为for后面没有“{”系统默认后面只有一条语句a=a*j,所以a=a*j就为:1*2*3*4*5*6=720*/
b=a+b;}//b=0,其实这次赋值只是把a赋给了b
printf("%d",b);
return 0;
}
张秋桦
2011-10-15
知道答主
回答量:15
采纳率:0%
帮助的人:5.2万
展开全部
{的未知决定了for循环的循环体。换位置就改变循环体了,因此结果不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
worldxa
2011-10-15 · TA获得超过1720个赞
知道小有建树答主
回答量:529
采纳率:0%
帮助的人:718万
展开全部
语句和语句块
语句块是从一对大括号包含的语句,一对在括号里可以只能一条语句,也可有多条语句及一些复杂的语句块,对for语句来说,我们可以把它整体当作一条语句,然后把for语句里的语句块进行细分,又可以把for里面看作一条一条语句
如果没有加大括号,那么for语句里只能有一条语句,也就是说每循环一次都只会执行一条语句,如
for(i=1;i<=5;i++)
a=1;
像如上的循环语句没有什么意义,因为它每执行一次循环都被变量a赋相同的值0,而且在还没退出循环之前都没有使用变量a的值
函数体也是一个语句块,只不过函数是独立的,只有被调用才能建立联系,调用一个函数,只写一条语句,但具体的函数定义可能是由好几十条语句组成一个函数

希望回答对你有帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-15
展开全部
这种写法我之前也没试过,刚刚自习看了一下,你程序中中间那一对大括号一点作用都没用,跟去掉没什么两样
之前大括号放在a=1;之前的话,那个括号是属于for的,这样是话一堆括号之间的那段代码都是for循环执行的内容,而大括号放在a=1;之后的话,那for循环执行的内容就只剩a=1;这一句话了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沉鱼醉之吟G
2011-10-15 · TA获得超过109个赞
知道答主
回答量:47
采纳率:0%
帮助的人:45.5万
展开全部
当a=1在“{”里边时,当i=1时a=1*1这是1!(1的阶乘);当i=2时,a=1*2这是2!;当i=3时,a=1*2*3,这是3!;如果把a=1放到“{”外边,i=2运行过后,会得到a=6;这时当i=3时,会得到a=6*1*2*3,很明显 这不是3!,而把a=1放到“{”里边时、、每次i++时都会把a初始化为1,然后得到相应的阶乘,在通过b=b+a;得到和;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chenkaihong202
2011-10-15 · TA获得超过154个赞
知道答主
回答量:80
采纳率:0%
帮助的人:52.5万
展开全部
你格式没对齐 看上去挺纠结的
先说下 你第二种的
for (i=1;i<=5;i++)
a=1;
{
for (j=1;j<=i;j++)
a=a*j;

这段代码 你的第一个for循环,没打花括号,所以在那个for里面只能包含一个语句,就是那句a=1; 就这里一句话就跟你第一种做法的差了十万八千里了,要注意一点的是,如果有几句话都要参与循环的话,一定要用花括号把这几句话一起括起来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式