欢迎来到天天文库
浏览记录
ID:20742113
大小:406.50 KB
页数:14页
时间:2018-10-15
《c语言程序设计课程设计题目》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、通信工程10级C语言课程设计任务书各位同学可以自由组合,不超过以下题目中所规定的人数进行选题(不允许重复选题)。辅导时间:另定地点:软件中心(语音楼8楼)答辩检查时间:18周星期五上午8:00起1.Huffman编解码(1人)要求:a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);b.统计各种符号出现的频度;c.进行Huffman编码(以二进制01代码输出);d.以上一步的输出(二进制序列)作为输入进行解码,恢复原英文;e.比较输入和输出,统计出错的个数。前缀码、Huf
2、fman编码算法:前缀码:给定一个序列的集合,若不存在一个序列是另一个序列的前缀,则该序列集合称为前缀码。哈夫曼(Huffman)算法可用来设计前缀编码,用该算法构造一棵有n个叶子(每个叶子具有一个权值)的二叉树的过程如下:(1)根据n个权值{w1,w2,…,wn}构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均为空。(2)在F中选取两棵根结点的权值最小的树作为左右子树来构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树结点的根结点
3、的权值之和。(3)在F中删除这两棵树,同时将新得到的二叉树加入F中。(4)重复(2)和(3),直到F中只含一棵树时为止。称这棵树为最优二叉树(或哈夫曼树)。 如果约定将每个结点的左分支表示字符“0”,右分支表示字符“1”,则可以把从根结点到某叶子结点的路径上分支字符组成的字符串作为该叶子结点的编码。 对于所有可能传输的字符,令每个字符对应一个叶结点,权值为其出现的频率,那么根据哈夫曼算法构造出二叉树后,就得到了每个字符的二进制编码。 根据构造过程可知,这种编码方案得到的字符的编码长度的数学期望值为最小,因
4、此这种编码方案是一个最优前缀码。在构造过程中,每次都是选取两棵最小权值的二叉树进行合并。2.简易计算器设计(1人)要求:a.用户输入一表达式,表达式为四则运算表达式(只含加、减、乘、除以及括号);b.判断用户输入的表达式正确与否,如错则报错,否则进行表达式值的计算并给出结果;c.数据可以是任意实数。表达式求值的过程:表达式求值是程序设计语言编译中的一个最基本问题。它的实现是栈应用的又一个典型例子。这里介绍一种简单直观、广为使用的算法,通常称为“算符优先法”。要把一个表达式翻译成正确求值的一个机器指令序列,
5、或者直接对表达式求值,首先要能够正确解释表达式。例如,要对下面的算术表达式求值: 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)组成的,我
6、们称它们为单词。一般地,操作数既可以是常数也可以是被说明为变量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运算符3类;基本界限符有左右括号和表达式结束符等。为了叙述的简洁,我们仅讨论简单算术表达式的求值问题。这种表达式只含加、减、乘、除4种运算符。读者不难将它推广到更一般的表达式上。我们把运算符和界限符统称为算符,它们构成的集合命名为OP。根据上述3条运算规则,在运算的每一步中,任意两个相继出现的算符θ1和θ2之间的优先关系至多是下面3种关系之一: θ1<θ2 θ1的优先权低于θ2
7、θ1=θ2 θ1的优先权等于θ2 θ1>θ2 θ1的优先权高于θ2表1定义了算符之间的这种优先关系。表1算符间的优先关系由规则(3),+、-、*和/为θ1时的优先性均低“(”但高于“)”,由规则(2),当θ1=θ2时,令θ1>θ2,“#”是表达式的结束符。为了算法简洁,在表达式的最左边也虚设一个“#”构成整个表达式的一对括号。表中的“(”=“)”表示当左右括号相遇时,括号内的运算已经完成。同理,“#”=“#”表示整个表达式求值完毕。“)”与“(”、“#”与“)”以及“(”与“#”之间无优先关系,这是因
8、为表达式中不允许它们相继出现,一旦遇到这种情况,则可以认为出现了语法错误。在下面的讨论中,我们暂假定所输入的表达式不会出现语法错误。为实现算符优先算法,可以使用两个工作栈。一个称做OPTR,用以寄存运算符;另一个称做OPND,用以寄存操作数或运算结果。算法的基本思想的:(1)首先置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素;(2)依次读入表达式中每个字符,若是操作数则进OPND栈,若是运算符则和OPTR栈的栈顶运算
此文档下载收益归作者所有