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就要退出?
首先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的值的关系。(这里可以把语句当作函数来理解,因此有返回值一说)
下面是printf这个函数,首先要先计算出printf的参数的值,也就是k-=3的值,那么这个表达式实际上就是k先减去3,再返回减掉以后的k的值,那么应该是1,于是输出也就是1
所以答案应该是A
本题主要考点就是--k,k--之类和k-=3之类的返回值和操作后k的值的关系。(这里可以把语句当作函数来理解,因此有返回值一说)
温馨提示:答案为网友推荐,仅供参考
第1个回答 2007-02-23
答案:A)1
第一次while条件判断前,k就先自减1,所以是判断条件时 k=4 ,条件为真(非0为真),进入循环体
然后printf输出时,k又自减3,所以 k=1,输出1
然后第二次while条件判断前,k又先自减1,所以是判断条件时 k=0 ,条件为假(0为假),所以结束循环
第一次while条件判断前,k就先自减1,所以是判断条件时 k=4 ,条件为真(非0为真),进入循环体
然后printf输出时,k又自减3,所以 k=1,输出1
然后第二次while条件判断前,k又先自减1,所以是判断条件时 k=0 ,条件为假(0为假),所以结束循环
第2个回答 2007-02-23
应该是A
while(--k) printf("%d",k-=3);
--k先自减,k变成4,printf("%d",k-=3); 里面表达式先求值,k变成1,输出1,然后再--k先自减,k变成0,判断while(0),结果跳出循环。
唉,我生平最讨厌这种题……
while(--k) printf("%d",k-=3);
--k先自减,k变成4,printf("%d",k-=3); 里面表达式先求值,k变成1,输出1,然后再--k先自减,k变成0,判断while(0),结果跳出循环。
唉,我生平最讨厌这种题……
第3个回答 2007-02-23
答案:A
解释:
k
初始 5
--k 4 //进入第一轮循环
k-=3 1 //程序打印出1
--k 0 //while的条件为0,即false,跳出循环,程序结束。
解释:
k
初始 5
--k 4 //进入第一轮循环
k-=3 1 //程序打印出1
--k 0 //while的条件为0,即false,跳出循环,程序结束。
第4个回答 2007-02-23
A吧
第一次执行循环
k-=3
k=4-3=1
第二次
--K先执行 K=0
while(0)退出吧
我也不知道,没测试..顺嘴胡说的,嘿嘿
第一次执行循环
k-=3
k=4-3=1
第二次
--K先执行 K=0
while(0)退出吧
我也不知道,没测试..顺嘴胡说的,嘿嘿