c语言中如何打出草花图案,C语言程序设计程设计题目1.doc
C語言程序設(shè)計(jì)程設(shè)計(jì)題目1
通信工程10級(jí)C語言課程設(shè)計(jì)任務(wù)書
各位同學(xué)可以自由組合,不超過以下題目中所規(guī)定的人數(shù)進(jìn)行選題(不允許重復(fù)選題)。
輔導(dǎo)時(shí)間:另定
地點(diǎn):軟件中心(語音樓8樓)
答辯檢查時(shí)間:18周星期五上午8:00起
1. Huffman編解碼(1人)
要求: a. 隨機(jī)輸入一段英文(含標(biāo)點(diǎn)、空格以及大小寫的區(qū)分,標(biāo)點(diǎn)僅限逗號(hào)“,”和句點(diǎn)“.”);
b. 統(tǒng)計(jì)各種符號(hào)出現(xiàn)的頻度;
c. 進(jìn)行Huffman編碼(以二進(jìn)制01代碼輸出);
d. 以上一步的輸出(二進(jìn)制序列)作為輸入進(jìn)行解碼,恢復(fù)原英文;
e. 比較輸入和輸出,統(tǒng)計(jì)出錯(cuò)的個(gè)數(shù)。
前綴碼、Huffman編碼算法:前綴碼:給定一個(gè)序列的集合,若不存在一個(gè)序列是另一個(gè)序列的前綴,則該序列集合稱為前綴碼。哈夫曼(Huffman)算法可用來設(shè)計(jì)前綴編碼,用該算法構(gòu)造一棵有n個(gè)葉子(每個(gè)葉子具有一個(gè)權(quán)值)的二叉樹的過程如下:(1)根據(jù)n個(gè)權(quán)值{w1,w2,…,wn}構(gòu)成n棵二叉樹的集合F={T1,T2,…,Tn},其中每棵二叉樹Ti中只有一個(gè)帶權(quán)為wi的根結(jié)點(diǎn),其左右子樹均為空。2)在F中選取兩棵根結(jié)點(diǎn)的權(quán)值最小的樹作為左右子樹來構(gòu)造一棵新的二叉樹,且置新的二叉樹的根結(jié)點(diǎn)的權(quán)值為其左、右子樹結(jié)點(diǎn)的根結(jié)點(diǎn)的權(quán)值之和。(3)在F中刪除這兩棵樹,同時(shí)將新得到的二叉樹加入F中。(4)重復(fù)(2)和(3),直到F中只含一棵樹時(shí)為止。稱這棵樹為最優(yōu)二叉樹(或哈夫曼樹)。?如果約定將每個(gè)結(jié)點(diǎn)的左分支表示字符“0”,右分支表示字符“1”,則可以把從根結(jié)點(diǎn)到某葉子結(jié)點(diǎn)的路徑上分支字符組成的字符串作為該葉子結(jié)點(diǎn)的編碼。?對(duì)于所有可能傳輸?shù)淖址?#xff0c;令每個(gè)字符對(duì)應(yīng)一個(gè)葉結(jié)點(diǎn),權(quán)值為其出現(xiàn)的頻率,那么根據(jù)哈夫曼算法構(gòu)造出二叉樹后,就得到了每個(gè)字符的二進(jìn)制編碼。?根據(jù)構(gòu)造過程可知,這種編碼方案得到的字符的編碼長度的數(shù)學(xué)期望值為最小,因此這種編碼方案是一個(gè)最優(yōu)前綴碼。在構(gòu)造過程中,每次都是選取兩棵最小權(quán)值的二叉樹進(jìn)行合并。
表達(dá)式求值是程序設(shè)計(jì)語言編譯中的一個(gè)最基本問題。它的實(shí)現(xiàn)是棧應(yīng)用的又一個(gè)典型例子。這里介紹一種簡單直觀、廣為使用的算法,通常稱為“算符優(yōu)先法”。要把一個(gè)表達(dá)式翻譯成正確求值的一個(gè)機(jī)器指令序列,或者直接對(duì)表達(dá)式求值,首先要能夠正確解釋表達(dá)式。例如,要對(duì)下面的算術(shù)表達(dá)式求值:??? 4 + 2 × 3 - 10/5
首先要了解算術(shù)四則運(yùn)算的規(guī)則。即:???(1)先乘除,后加減;? (2)從左算到右;? (3)先括號(hào)內(nèi),后括號(hào)外。由此,這個(gè)算術(shù)表達(dá)式的計(jì)算順序應(yīng)為??? 4 + 2 × 3 - 10/5 = 4 + 6 - 10/5 = 10 - 10/5 = 10 - 2 = 8
算符優(yōu)先法就是根據(jù)這個(gè)運(yùn)算優(yōu)先關(guān)系的規(guī)定來實(shí)現(xiàn)對(duì)表達(dá)式的編譯或解釋執(zhí)行的。任何一個(gè)表達(dá)式都是由操作數(shù)(operand)、運(yùn)算符(operator)和界限符(delimiter)組成的,我們稱它們?yōu)閱卧~。一般地,操作數(shù)既可以是常數(shù)也可以是被說明為變量或常量的標(biāo)識(shí)符;運(yùn)算符可以分為算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符3類;基本界限符有左右括號(hào)和表達(dá)式結(jié)束符等。為了敘述的簡潔,我們僅討論簡單算術(shù)表達(dá)式的求值問題。這種表達(dá)式只含加、減、乘、除4種運(yùn)算符。讀者不難將它推廣到更一般的表達(dá)式上。我們把運(yùn)算符和界限符統(tǒng)稱為算符,它們構(gòu)成的集合命名為OP。根據(jù)上述3條運(yùn)算規(guī)則,在運(yùn)算的每一步中,任意兩個(gè)相繼出現(xiàn)的算符θ1和θ2之間的優(yōu)先關(guān)系至多是下面3種關(guān)系之一:??? θ1θ2? θ1的優(yōu)先權(quán)高于θ2表1定義了算符之間的這種優(yōu)先關(guān)系。
表1 算符間的優(yōu)先關(guān)系
由規(guī)則(3),+、-、*和/為θ1時(shí)的優(yōu)先性均低“(”但高于“)”,由規(guī)則(2),當(dāng)θ1=θ2時(shí),令θ1>θ2,“#”是表達(dá)式的結(jié)束符。為了算法簡潔,在表達(dá)式的最左邊也虛設(shè)一個(gè)“#”構(gòu)成整個(gè)表達(dá)式的一對(duì)括號(hào)。表中的“(”=“)”表示當(dāng)左右括號(hào)相遇時(shí),括號(hào)內(nèi)的運(yùn)算已經(jīng)完成。同理,“#”=“#”表示整個(gè)表達(dá)式求值完畢。“)”與“(”、“#”與“)”以及“(”與“#”之間無優(yōu)先關(guān)系,這是因?yàn)楸磉_(dá)式中不允許它們相繼出現(xiàn),一旦遇到這種情況,則可以認(rèn)為出現(xiàn)了語法錯(cuò)誤。在下面的討論中,我們暫假定所輸入的表達(dá)式不會(huì)出現(xiàn)語法錯(cuò)誤。為實(shí)現(xiàn)算符優(yōu)先算法,可以使用兩個(gè)工作棧。一個(gè)稱做OPTR,用以寄存運(yùn)算符;另一個(gè)稱做OPND,用以寄存操作數(shù)或運(yùn)算結(jié)果。算法的基本思想的:(1)首先置操作數(shù)棧為空棧,表達(dá)式起始符“#”為運(yùn)算符棧的棧底元素;2)依次讀入表達(dá)式中每個(gè)字符,若是操作數(shù)則進(jìn) OPND 棧,若是運(yùn)算符則和 OPTR 棧的棧頂運(yùn)算符比較優(yōu)先權(quán)后
總結(jié)
以上是生活随笔為你收集整理的c语言中如何打出草花图案,C语言程序设计程设计题目1.doc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python format格式化输出填充
- 下一篇: php 有子目录,php列出目录中所有子