问一道C语言的问题。请高手解答!

2006年9月二级C笔试第22题:main(){intk=5;while(--k)printf("%d",k-=3);printf("\n");}执行后的输出结果是A)1... 2006年9月二级C笔试第22题:
main()
{int k=5;
while(--k) printf("%d",k-=3);
printf("\n");
}

执行后的输出结果是
A)1 B)2 C)4 D)死循环

请指出答案,并讲解一下为什么选这个答案。
1楼,为什么到0就要退出?
展开
 我来答
百度网友29bd21c90
2007-02-23 · TA获得超过252个赞
知道答主
回答量:93
采纳率:0%
帮助的人:108万
展开全部
首先While(--k)这里,括号里的是--k的返回值,--在k的前面是先k减掉1再返回结果,因此运行到这里k为4,括号中的值为4,大于0应该是true,所以需要执行循环里的内容。
下面是printf这个函数,首先要先计算出printf的参数的值,也就是k-=3的值,那么这个表达式实际上就是k先减去3,再返回减掉以后的k的值,那么应该是1,于是输出也就是1
所以答案应该是A
本题主要考点就是--k,k--之类和k-=3之类的返回值和操作后k的值的关系。(这里可以把语句当作函数来理解,因此有返回值一说)
望远镜里的星星
2007-02-23 · TA获得超过399个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:0
展开全部
答案:A)1

第一次while条件判断前,k就先自减1,所以是判断条件时 k=4 ,条件为真(非0为真),进入循环体

然后printf输出时,k又自减3,所以 k=1,输出1

然后第二次while条件判断前,k又先自减1,所以是判断条件时 k=0 ,条件为假(0为假),所以结束循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6d78857
2007-02-23 · TA获得超过1034个赞
知道小有建树答主
回答量:508
采纳率:0%
帮助的人:0
展开全部
应该是A

while(--k) printf("%d",k-=3);

--k先自减,k变成4,printf("%d",k-=3); 里面表达式先求值,k变成1,输出1,然后再--k先自减,k变成0,判断while(0),结果跳出循环。

唉,我生平最讨厌这种题……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3b05ca1c6
2007-02-23 · 超过18用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:40.7万
展开全部
答案:A
解释:
k
初始 5
--k 4 //进入第一轮循环
k-=3 1 //程序打印出1
--k 0 //while的条件为0,即false,跳出循环,程序结束。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nothingi
2007-02-23 · 超过43用户采纳过TA的回答
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:0
展开全部
A吧

第一次执行循环
k-=3
k=4-3=1

第二次
--K先执行 K=0
while(0)退出吧

我也不知道,没测试..顺嘴胡说的,嘿嘿
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式