徐州鸿美网站建设,手机网站开发按返回弹出提示窗口,wordpress通过id获取文章,新乡公司做网站找哪家公司好C语言程序设计程设计题目1通信工程10级C语言课程设计任务书各位同学可以自由组合#xff0c;不超过以下题目中所规定的人数进行选题(不允许重复选题)。辅导时间#xff1a;另定地点#xff1a;软件中心(语音楼8楼)答辩检查时间#xff1a;18周星期五上午8#xff1a;00起1…C语言程序设计程设计题目1通信工程10级C语言课程设计任务书各位同学可以自由组合不超过以下题目中所规定的人数进行选题(不允许重复选题)。辅导时间另定地点软件中心(语音楼8楼)答辩检查时间18周星期五上午800起1. Huffman编解码(1人)要求: a. 随机输入一段英文(含标点、空格以及大小写的区分标点仅限逗号“”和句点“.”)b. 统计各种符号出现的频度c. 进行Huffman编码(以二进制01代码输出)d. 以上一步的输出(二进制序列)作为输入进行解码恢复原英文e. 比较输入和输出统计出错的个数。前缀码、Huffman编码算法前缀码给定一个序列的集合若不存在一个序列是另一个序列的前缀则该序列集合称为前缀码。哈夫曼(Huffman)算法可用来设计前缀编码用该算法构造一棵有n个叶子(每个叶子具有一个权值)的二叉树的过程如下(1)根据n个权值{w1w2…wn}构成n棵二叉树的集合F{T1T2…Tn}其中每棵二叉树Ti中只有一个带权为wi的根结点其左右子树均为空。2)在F中选取两棵根结点的权值最小的树作为左右子树来构造一棵新的二叉树且置新的二叉树的根结点的权值为其左、右子树结点的根结点的权值之和。(3)在F中删除这两棵树同时将新得到的二叉树加入F中。(4)重复(2)和(3)直到F中只含一棵树时为止。称这棵树为最优二叉树(或哈夫曼树)。?如果约定将每个结点的左分支表示字符“0”右分支表示字符“1”则可以把从根结点到某叶子结点的路径上分支字符组成的字符串作为该叶子结点的编码。?对于所有可能传输的字符令每个字符对应一个叶结点权值为其出现的频率那么根据哈夫曼算法构造出二叉树后就得到了每个字符的二进制编码。?根据构造过程可知这种编码方案得到的字符的编码长度的数学期望值为最小因此这种编码方案是一个最优前缀码。在构造过程中每次都是选取两棵最小权值的二叉树进行合并。表达式求值是程序设计语言编译中的一个最基本问题。它的实现是栈应用的又一个典型例子。这里介绍一种简单直观、广为使用的算法通常称为“算符优先法”。要把一个表达式翻译成正确求值的一个机器指令序列或者直接对表达式求值首先要能够正确解释表达式。例如要对下面的算术表达式求值??? 4 2 × 3 - 10/5首先要了解算术四则运算的规则。即???(1)先乘除后加减? (2)从左算到右? (3)先括号内后括号外。由此这个算术表达式的计算顺序应为??? 4 2 × 3 - 10/5 4 6 - 10/5 10 - 10/5 10 - 2 8算符优先法就是根据这个运算优先关系的规定来实现对表达式的编译或解释执行的。任何一个表达式都是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的我们称它们为单词。一般地操作数既可以是常数也可以是被说明为变量或常量的标识符运算符可以分为算术运算符、关系运算符和逻辑运算符3类基本界限符有左右括号和表达式结束符等。为了叙述的简洁我们仅讨论简单算术表达式的求值问题。这种表达式只含加、减、乘、除4种运算符。读者不难将它推广到更一般的表达式上。我们把运算符和界限符统称为算符它们构成的集合命名为OP。根据上述3条运算规则在运算的每一步中任意两个相继出现的算符θ1和θ2之间的优先关系至多是下面3种关系之一:??? θ1θ2? θ1的优先权高于θ2表1定义了算符之间的这种优先关系。表1 算符间的优先关系由规则(3)、-、*和/为θ1时的优先性均低“(”但高于“)”由规则(2)当θ1θ2时令θ1θ2“#”是表达式的结束符。为了算法简洁在表达式的最左边也虚设一个“#”构成整个表达式的一对括号。表中的“(”“)”表示当左右括号相遇时括号内的运算已经完成。同理“#”“#”表示整个表达式求值完毕。“)”与“(”、“#”与“)”以及“(”与“#”之间无优先关系这是因为表达式中不允许它们相继出现一旦遇到这种情况则可以认为出现了语法错误。在下面的讨论中我们暂假定所输入的表达式不会出现语法错误。为实现算符优先算法可以使用两个工作栈。一个称做OPTR用以寄存运算符另一个称做OPND用以寄存操作数或运算结果。算法的基本思想的(1)首先置操作数栈为空栈表达式起始符“#”为运算符栈的栈底元素2)依次读入表达式中每个字符若是操作数则进 OPND 栈若是运算符则和 OPTR 栈的栈顶运算符比较优先权后