c语言中如何打出草花图案,C语言程序设计程设计题目1.doc
C語言程序設計程設計題目1
通信工程10級C語言課程設計任務書
各位同學可以自由組合,不超過以下題目中所規定的人數進行選題(不允許重復選題)。
輔導時間:另定
地點:軟件中心(語音樓8樓)
答辯檢查時間:18周星期五上午8:00起
1. Huffman編解碼(1人)
要求: a. 隨機輸入一段英文(含標點、空格以及大小寫的區分,標點僅限逗號“,”和句點“.”);
b. 統計各種符號出現的頻度;
c. 進行Huffman編碼(以二進制01代碼輸出);
d. 以上一步的輸出(二進制序列)作為輸入進行解碼,恢復原英文;
e. 比較輸入和輸出,統計出錯的個數。
前綴碼、Huffman編碼算法:前綴碼:給定一個序列的集合,若不存在一個序列是另一個序列的前綴,則該序列集合稱為前綴碼。哈夫曼(Huffman)算法可用來設計前綴編碼,用該算法構造一棵有n個葉子(每個葉子具有一個權值)的二叉樹的過程如下:(1)根據n個權值{w1,w2,…,wn}構成n棵二叉樹的集合F={T1,T2,…,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 棧的棧頂運算符比較優先權后
總結
以上是生活随笔為你收集整理的c语言中如何打出草花图案,C语言程序设计程设计题目1.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python format格式化输出填充
- 下一篇: 清理垃圾代码bat_来买个小内存u盘么咯