我的书中有一些我无法理解的问题,希望你能帮我解释一下。
考虑以下程序片段
char c='a'
while(c++<='z'
putchar(xxx);
如果要求的输出是abcd ..... xyz,那么xxx应该是
(a)c
(b)c-2
(c)c-1
(d)--c
使用11调用以下函数时返回的值是什么?
recur(int num)
{
if((num/2)!=0)return(recur(num/2)*10+num%2);
else return 1;
}
(a)函数不返回任何值
(b)11
(c)1011
答案 0 :(得分:1)
实际上1中的示例代码非常清楚。它来自&#39; a&#39;到&#39;&#39;和putchar
打印xxx
,这应该是a
到z
的结果。顺便说一句,正确形式的数字1代码是:
char c='a';
while(c++<='z') // c is incremented
putchar(xxx); // lets say xxx is declared as char earlier
在1中,c
在被检查之后和打印之前已经加了一个(因为在完成行中的所有内容后完成后增量)。所以,让我们说c = 'a'
。 c
是否小于或等于z
?既然如此,putchar()
将会完成,但在此之前,c
会增加(c++
),因此旧值a
将为b
。因此,为了打印'a'
(旧值),您将打印c - 1
('b' - 1
),即'a'
。
所以xxx = c - 1
。
在问题2中,(a)
绝对不是答案。
跟踪recur()
:
// if recur(11)
recur(int num) {
// num = 11, 11 / 2 is not 0
if ((num / 2) != 0)
// since num / 2 is not 0 because 11 / 2 = 5.5,
// num will be (num / 2) since (num / 2) is passed as the new parameter
// return(recur(5.5) * 10) + 5.5 % 2);
// then repeat until num / 2 = 0
// then compute the returns, (return_value * 10 + num % 2)
return (recur(num / 2) * 10 + num % 2);
else
return 1;
}
这是值的变化方式:
num: 11.00
num / 2: 5.50
num: 5.00
num / 2: 2.50
num: 2.00
num / 2: 1.00
num: 1.00
num / 2: 0.50
return: 10
return: 101
return: 1011
final return: 1011