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吗?
麻烦把这个程序的运算顺序跟我说一下好吗?? 展开
{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吗?
麻烦把这个程序的运算顺序跟我说一下好吗?? 展开
5个回答
展开全部
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
话说这种问题我也感觉比较纠结,所以我可能也会犯错,见谅……
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只对后面的一条语句有效。
展开全部
先循环体,然后再执行d++,再判断a是否大于d,a>d++是先判断a是否大于d,然后d增1,让后循环体,然后再执行d++,再判断a是否大于d
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关于++和--的问题,如果++在前面(如++a),就是将a先+1,然后返回计算后的值(a+1)。如果++在后面(如a++),则计算a+1之后,返回a原来的值。
所以这道题,a>d++,先计算d+1,并以计算前的值为返回值,再与a做比较,然后再进入循环或跳出循环。所以这个循环执行6次。
所以这道题,a>d++,先计算d+1,并以计算前的值为返回值,再与a做比较,然后再进入循环或跳出循环。所以这个循环执行6次。
追问
你说“如果++在后面(如a++),则计算a+1之后,返回a原来的值。”这岂不是和++a实际上是一样的了
追答
不一样啊,a++是返回原来的值,++a是返回计算后的值,但这两种算法在后,后面调用a的时候都已经加1了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先执行k++;如果满足条件a>d,然后d++,再执行循环k++;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是的,do …while 结构是先执行循环体,再判断条件。本题:先执行k++,再比较a>d,最后,执行d++。所以,即使条件恒不成立,k也会加1的。故结果为6。希望帮到你^_^
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询