【问题标题】:problems relating putchar() and recur() [closed]putchar() 和 recur() 相关的问题 [关闭]
【发布时间】:2015-08-20 08:00:32
【问题描述】:

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

  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

【问题讨论】:

  • 分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见how to ask
  • 先尝试一下。如果已经这样做了,请告诉我们为什么以及如何工作(或没有工作)。
  • puchar()? while(c++&lt;='z'?请您至少花点时间正确地提出问题吗?
  • 第一个代码 sn-p 甚至不会编译
  • @CoolGuy 目前的形式,不是最后一个(至少,不正确)。

标签: c recursion increment post-increment


【解决方案1】:

其实1中的示例代码很清楚。它从“a”循环到“z”,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 2022-06-12
    • 2022-11-28
    • 2012-05-19
    • 2011-05-27
    • 2011-09-11
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多