c语言。我写了一个小程序,但运行却和我想象的有小出入,很奇怪c语言为什么会这样!! 以下是具体疑问: 20

如图所示,这是程序源代码:图中的阴影部分我明明定义的a最大不能超过9,b不能超过4,但一运行就成这样:为什么会变成10*5=36啊??按理说应该运行成9*4=36才对嘛,... 如图所示,这是程序源代码:

图中的阴影部分我明明定义的a最大不能超过9,b不能超过4,但一运行就成这样:

为什么会变成10*5=36啊??按理说应该运行成9*4=36才对嘛,跪求大侠解我迷惑。谢谢!!
展开
 我来答
我姐是恐龙
2013-02-21 · TA获得超过542个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:197万
展开全部
当a=9 b=3的时候
执行 c=a*b=27
a=9 b=4
c=36
然后b++ b=5不满足 跳出内层循环
执行外层循环的 a++ a=10 不满足 跳出外层循环
结果就是36
你把<改成<= 结果就是50了
追问

按照您说的做了,但是这样的结果:

 

 

怎么回事?

追答
呵呵  因为这个时候a=11 b=6
for(a=1;a<=10;a++)
for(b=1;b<=5;b++)
c=a*b;
等同于
for(a=1;a<=10;)
{
for(b=1;b<=5;)
{
c=a*b;
b++;
}
a++;
}
因为最后退出的时候 都执行了a++ ,b++

所以printf("%d*%d=%-3d",--a,--b,c);
就可以了

满意请采纳啊
粒熙3z
2013-02-20
知道答主
回答量:6
采纳率:0%
帮助的人:5.6万
展开全部
你应该知道
for(a=1;a<10;a++)
{...}
等同于
a=1
while(a<10)
{ ...
a++;

}
所以循环结束时a的值是10
同理,for(b=1;b<5;b++)循环结束时b的值也是5而不是4
所以就那样了……
更多追问追答
追问
如果循环结束时a的值是10,b的值是5的话,那运行的结果应该是10*5=50啊??怎么会是36呢?
追答
你再去看书上的for语句循环执行顺序
你这个程序被换成while循环是这样:
while(a<10)
{
while(b<5)
{
c=a*b

b++;

}

a++;

}
最后a=10;b=5但c=36
for循环的执行顺序是这样的
for(初值表达式;循环条件表达式;更新表达式)
{循环体};
(1)求解初值表达式。
(2)判断循环条件表达式,如果值为真(非0),则执行for语句循环体内部的语句,然后执行第3步;如果值为假(0),则跳出循环,执行第(5)步。
(3)求解更新表达式。
(4)跳回第(2)步重复执行。
(5)循环结束,执行for循环体后面的语句。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式