C语言一道题

当执行以下程序段后,i的值是()j的值是()k的值是(){inta,b,c,d,i,j,k;a=10;b=c=d=5;i=j=k=0;for(;a>b;++b)i++;w... 当执行以下程序段后,i的值是()j的值是()k的值是()
{int a,b,c,d,i,j,k;
a=10;b=c=d=5;i=j=k=0;
for(;a>b;++b) i++;
while(a>++c) j++;
do k++;while(a>d++);

答案是 5 4 6
为什么k的值是6?a>d++是先判断a是否大于d,然后执行循环体,然后再执行d++,再判断a是否大于d吗?
麻烦把这个程序的运算顺序跟我说一下好吗??
展开
 我来答
rectange
2014-02-02 · 超过11用户采纳过TA的回答
知道答主
回答量:17
采纳率:0%
帮助的人:23.1万
展开全部
a>d++ 是先判断a>d,再d++,
a>++c 是先c++,再判断a>c,
for的那个,是b=5,6,7,8,9的时候会执行i++,所以是5
while的那个,相对于for的那个,是c一上来先被加一了,所以少了一个,(c自加完之后)c=6,7,8,9的时候会执行j++,所以是4
do-while的那个,相对于for的那个,k上来先被加了1(do while循环体先执行一次),而(d自加完之前)d=5,6,7,8,9的时候会去执行k++,所以是6
话说这种问题我也感觉比较纠结,所以我可能也会犯错,见谅……
追问
是先执行完for循环,再执行完while循环,最后在执行完do while循环吧,中间没有嵌套问题对吧
追答
对,因为没有大括号的时候,for、while、do只对后面的一条语句有效。
光亮青剑
2014-02-02 · TA获得超过490个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:164万
展开全部
先循环体,然后再执行d++,再判断a是否大于d,a>d++是先判断a是否大于d,然后d增1,让后循环体,然后再执行d++,再判断a是否大于d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
COSIBA
2014-02-02
知道答主
回答量:22
采纳率:0%
帮助的人:18万
展开全部
关于++和--的问题,如果++在前面(如++a),就是将a先+1,然后返回计算后的值(a+1)。如果++在后面(如a++),则计算a+1之后,返回a原来的值。
所以这道题,a>d++,先计算d+1,并以计算前的值为返回值,再与a做比较,然后再进入循环或跳出循环。所以这个循环执行6次。
追问
你说“如果++在后面(如a++),则计算a+1之后,返回a原来的值。”这岂不是和++a实际上是一样的了
追答
不一样啊,a++是返回原来的值,++a是返回计算后的值,但这两种算法在后,后面调用a的时候都已经加1了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Rankabc
2014-02-02 · TA获得超过3559个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1033万
展开全部
先执行k++;如果满足条件a>d,然后d++,再执行循环k++;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yg_99992
2014-02-02
知道答主
回答量:10
采纳率:0%
帮助的人:6.3万
展开全部
不是的,do …while 结构是先执行循环体,再判断条件。本题:先执行k++,再比较a>d,最后,执行d++。所以,即使条件恒不成立,k也会加1的。故结果为6。希望帮到你^_^
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式