与putchar()和recur()相关的问题

时间:2015-06-05 11:25:38

标签: c recursion increment post-increment

我的书中有一些我无法理解的问题,希望你能帮我解释一下。

  1. 考虑以下程序片段

    char c='a'
    while(c++<='z'
    putchar(xxx);
    

    如果要求的输出是abcd ..... xyz,那么xxx应该是

    (a)c

    (b)c-2

    (c)c-1

    (d)--c

  2. 使用11调用以下函数时返回的值是什么?

    recur(int num)
    {
    if((num/2)!=0)return(recur(num/2)*10+num%2);
    else return 1;
    }
    

    (a)函数不返回任何值

    (b)11

    (c)1011

1 个答案:

答案 0 :(得分:1)

实际上1中的示例代码非常清楚。它来自&#39; a&#39;到&#39;&#39;和putchar打印xxx,这应该是az的结果。顺便说一句,正确形式的数字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