问一道C语言的问题。请高手解答!
2006年9月二级C笔试第22题:
main()
{int k=5;
while(--k) printf("%d",k-=3);
printf("\n");
}
执行后的输出结果是
A)1 B)2 C)4 D)死循环
请指出答案,并讲解一下为什么选这个答案。
参考答案:首先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的值的关系。(这里可以把语句当作函数来理解,因此有返回值一说)