通信工程10级C语言课程设计任务书
各位同学可以自由组合,不超过以下题目中所规定的人数进行选题(不允许
重复选题)。
辅导时间:另定
地点:软件中心(语音楼8楼)
答辩检查时间:18周星期五上午8:00起
1Huffma
编解码(1人)
要求a随机输入一段英文含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“”;b统计各种符号出现的频度;c进行Huffma
编码(以二进制01代码输出);d以上一步的输出(二进制序列)作为输入进行解码,恢复原英文;e比较输入和输出,统计出错的个数。
前缀码、Huffma
编码算法:前缀码:给定一个序列的集合,若不存在一个序列是另一个序列的前缀,则该序列集合称为前缀码。哈夫曼(Huffma
)算法可用来设计前缀编码,用该算法构造一棵有
个叶子(每个叶子具有一个权值)的二叉树的过程如下:(1)根据
个权值w1,w2,…,w
构成
棵二叉树的集合FT1,T2,…,T
,其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均为空。(2)在F中选取两棵根结点的权值最小的树作为左右子树来构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树结点的根结点的权值之和。(3)在F中删除这两棵树,同时将新得到的二叉树加入F中。(4)重复(2)和(3),直到F中只含一棵树时为止。称这棵树为最优二叉树(或哈夫曼树)。如果约定将每个结点的左分支表示字符“0”,右分支表示字符“1”,则可以把从根结点到某叶子结点的路径上分支字符组成的字符串作为该叶子结点的编码。对于所有可能传输的字符,令每个字符对应一个叶结点,权值为其出现的频率,那么根据哈夫曼算法构造出二叉树后,就得到了每个字符的二进制编码。根据构造过程可知,这种编码方案得到的字符的编码长度的数学期望值为最小,因此这种编码方案是一个最优前缀码。在构造过程中,每次都是选取两棵最小权值的二叉树进行合并。
2简易计算器设计(1人)
要求:a用户输入一表达式,表达式为四则运算表达式(只含加、减、乘、除以及括号);b判断用户输入的表达式正确与否,如错则报错,否则进行表达式值的计算并给出结果;
fc数据可以是任意实数。表达式求值的过程:
表达式求值是程序设计语言编译中的一个最基本问题。它的实现是栈应用的又一个典型例子。这里介绍一种简单直观、广为使用的算法,通常称为“算符优先法”。
要把一个表达式翻译成正确求值的一个机器指令序列,或者直接对表达式求值,首先要能够正确解释表达r