【问题标题】:Implement the Unix 'dc' utility in C [closed]在 C 中实现 Unix 'dc' 实用程序 [关闭]
【发布时间】:2012-10-11 20:45:47
【问题描述】:

我只是希望获得一些关于如何开始我的作业的提示。 内容如下:

“实现一个行为类似于 'dc' 实用程序的程序,它以后缀表示法计算表达式,并且还支持使用变量和宏字符串的其他计算。随意尝试现有实用程序并查阅其手册页。 该分配将仅支持完整实用程序的子集: -- 所有数值都是整数,只能使用基数 10

-- 数字可能在 32 位有符号数字范围内

-- 所有寄存器名称都是字母数字(dc 允许的子集)

-- 不需要命令行选项或参数

-- 只需要以下命令(与手册顺序相同) p n f + - * / % ^ c d r s l S L x > !>

分配和现有实用程序之间的一些主要区别: -- 所有输入将仅通过标准输入(但不一定是键盘)

-- 寄存器栈最初不是空的,而是用无限的零填充的

-- q 命令将退出程序,与宏调用嵌套级别无关

-- 为了便于阅读,输入标记之间可能会出现额外的空格 (空格不是命令或值或寄存器名称)"

老实说,我不知道从哪里开始......非常感谢任何帮助,谢谢大家。

【问题讨论】:

    标签: c dc


    【解决方案1】:

    因为这是一项任务,你不知道从哪里开始,这里有一些提示:

    • 首先读取标准输入并将其拆分为标记
    • 实现堆栈以存储操作数和结果
    • 实现一些操作,例如 +、-、*、/
    • 让一切顺利
    • 然后一一实现缺少的功能

    【讨论】:

    • 非常感谢您的回复!我还在尝试理解 dc 的语法,我应该先寻找哪些标记?
    • 十进制数和四次算术运算。让它工作——当你实现它时,你会知道如何做剩下的。
    【解决方案2】:

    @Serge 给出了如何开始的很好的大纲,但您似乎对 dc 所做的事情有点不知所措,所以这里有一些建议。

    • 作业说你应该试验真正的dc 程序。这样做,如果你还没有这样做,你应该学到很多。 (如果你还没有这样做,为什么不呢?)
    • 查看Wikipedia page on dc 的基本操作部分。
    • 阅读dc 手册页。第一次阅读时您会感到困惑,但请再次阅读并使用实际程序尝试您在其中看到的内容。
    • 如果您对后缀表示法的整个概念感到困惑,请参阅Reverse Polish Notation 上的维基百科页面,这是同一事物的另一个名称。

    这应该让您理解以下非常简单的示例,并预测它们的作用:

    • 3 p
    • 3 4 * p
    • 3 4 5 + * p
    • 3 4 + 5 * p

    您的任务远远超出了您的要求,但如果您执行了这么多,您将完成一半以上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2012-02-27
      • 2019-04-16
      • 2010-10-24
      • 2013-02-14
      相关资源
      最近更新 更多