已閱讀5頁(yè),還剩76頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
你好推薦給你一個(gè)初學(xué)者學(xué)習(xí)易語(yǔ)言的好地方“菜鳥(niǎo)易語(yǔ)言”在百度知道搜索下就知道啦內(nèi)部有入門進(jìn)階的全套教程推薦新手觀看語(yǔ)言歪歪頻道ID662510QQ群135655631論壇CNEYY5D6DCOM菜鳥(niǎo)易語(yǔ)言榮譽(yù)團(tuán)隊(duì)此答案來(lái)源于菜鳥(niǎo)易語(yǔ)言,要學(xué)習(xí)的可百度知道“菜鳥(niǎo)易語(yǔ)言“菜鳥(niǎo)易語(yǔ)言專業(yè)易語(yǔ)言技術(shù)交流學(xué)習(xí)平臺(tái)我們的口號(hào)是幫助別人等于幫助自己第一章、基礎(chǔ)知識(shí)11基本數(shù)據(jù)類型12變量和常量121變量和常量的命名122變量的作用范圍123靜態(tài)變量124變量的初始值13運(yùn)算符131運(yùn)算符的優(yōu)先級(jí)14流程控制141如果、如果真、判斷142判斷循環(huán)、循環(huán)判斷143計(jì)次循環(huán)、變量循環(huán)144到循環(huán)尾、跳出循環(huán)145返回、結(jié)束15子程序(函數(shù))151子程序參數(shù)參考、可空152子程序的遞歸153子程序的靜態(tài)局部變量16自定義數(shù)據(jù)類型161例黑客帝國(guó)屏保162自定義數(shù)據(jù)類型的內(nèi)存存儲(chǔ)17數(shù)組171數(shù)組的維數(shù)172數(shù)組的排序1721冒泡排序1722選擇排序1723插入排序1724快速排序1725自定義數(shù)據(jù)類型數(shù)組的多級(jí)排序173例掃雷游戲第二章、字節(jié)集將字節(jié)集顯示為十六進(jìn)制文件分割機(jī)數(shù)據(jù)隱藏電子賀卡配置信息寫(xiě)入EXE文件EXE文件捆綁EXE文件的自校驗(yàn)WINDOWSAPI和動(dòng)態(tài)鏈接庫(kù)。文件系統(tǒng)編寫(xiě)自己的文件格式易語(yǔ)言模塊編程注冊(cè)表文件關(guān)聯(lián)、命令行處理、文件右鍵菜單枚舉注冊(cè)表注冊(cè)表模擬器圖像處理取圖像寬度、高度取像素字節(jié)集各種圖像運(yùn)算方法面向?qū)ο缶幊填?、封裝、屬性、行為、繼承、多態(tài)性矢量圖形面向?qū)ο蟪绦蛟O(shè)計(jì)CAD系統(tǒng)EMF文件的讀寫(xiě)OPENGL三維圖形編程DIRECTX游戲編程網(wǎng)絡(luò)編程數(shù)據(jù)庫(kù)編程界面編程第一章、基礎(chǔ)知識(shí)11基本數(shù)據(jù)類型計(jì)算機(jī)程序是用來(lái)采集和處理現(xiàn)實(shí)世界的數(shù)據(jù)的,而現(xiàn)實(shí)世界的數(shù)據(jù)又是多樣的,比如數(shù)量、名稱、狀態(tài)、溫度、時(shí)間、圖像等等,計(jì)算機(jī)程序要處理這些數(shù)據(jù),那么其編程語(yǔ)言也必須規(guī)定相應(yīng)的類型,不同的數(shù)據(jù)類型用來(lái)保存不同類型的數(shù)據(jù)。易語(yǔ)言中的基本數(shù)據(jù)類型和其存儲(chǔ)的信息如下表所示表11易語(yǔ)言中的數(shù)據(jù)類型數(shù)據(jù)類型名能存儲(chǔ)的數(shù)據(jù)初始值字節(jié)型數(shù)值型,表數(shù)范圍0,255,占用1個(gè)字節(jié)的存儲(chǔ)空間。0短整數(shù)型數(shù)值型,表數(shù)范圍32768,32767,占用2個(gè)字節(jié)的存儲(chǔ)空間。0整數(shù)型數(shù)值型,表數(shù)范圍2147483648,2147483648,占用4個(gè)字節(jié)的存儲(chǔ)空間。0長(zhǎng)整數(shù)型數(shù)值型,表數(shù)范圍9223372036854775808,9223372036854775807,占用8個(gè)字節(jié)的存儲(chǔ)空間。0小數(shù)型數(shù)值型,表數(shù)范圍,占用4個(gè)字節(jié)的存儲(chǔ)空間。31040雙精度小數(shù)型數(shù)值型,表數(shù)范圍,占用8個(gè)字節(jié)的存儲(chǔ)空間。30870邏輯型表示真假、男女等具有二值性的數(shù)據(jù),占用4個(gè)字節(jié)的存儲(chǔ)空間。假日期時(shí)間型表示年月日時(shí)分秒的數(shù)據(jù),占用8個(gè)字節(jié)的存儲(chǔ)空間。文本型用來(lái)表示描述性的文字、符號(hào)等的數(shù)據(jù)。易語(yǔ)言的文本行變量可以大于64KB?!啊弊止?jié)集可用來(lái)表示任何數(shù)據(jù),比如圖片、視頻、聲音等,其表示的數(shù)據(jù)的意義取決于數(shù)據(jù)的設(shè)計(jì)者。子程序指針表示子程序在內(nèi)存中的地址,這是專門為編程而設(shè)的數(shù)據(jù)類型。占用4個(gè)字節(jié)的存儲(chǔ)空間。0日期時(shí)間型的初始值是1899年12月30日0時(shí)0分0秒在上表中我們主要看一下數(shù)值型的數(shù)據(jù)類型,因?yàn)檫@種類型的數(shù)據(jù)我們接觸到最多的。我們看到,長(zhǎng)整數(shù)型的數(shù)據(jù)表示的整數(shù)范圍最大,而雙精度型的數(shù)據(jù)表示的范圍也大,精確度也最高,那為什么還需要有比他們范圍小的數(shù)據(jù)類型呢呵呵,這正如尺有所短,寸有所長(zhǎng)。首先,它們?cè)趦?nèi)存和磁盤中占用的空間不同,對(duì)于字節(jié)型的數(shù)據(jù),只占用1個(gè)字節(jié),而長(zhǎng)整型的數(shù)據(jù)則占用8個(gè)字節(jié)之多,對(duì)于要表示人的年齡這樣的數(shù)據(jù),字節(jié)型經(jīng)濟(jì)又實(shí)惠人的年齡不會(huì)是負(fù)數(shù),也不可能超過(guò)255歲;其次,運(yùn)算速度不一樣。我們知道,當(dāng)前主流的計(jì)算機(jī)都是32位的,在內(nèi)存中數(shù)據(jù)是4字節(jié)對(duì)齊的,那么長(zhǎng)度為4字節(jié)的數(shù)據(jù),在運(yùn)算時(shí)和在內(nèi)存中移動(dòng)時(shí)速度是最快的,如果你的程序不吝惜內(nèi)存,而更在乎速度的話,就盡量采用長(zhǎng)度為4字節(jié)的數(shù)據(jù)類型吧。字節(jié)集數(shù)據(jù)類型是其他的編程語(yǔ)言中所沒(méi)有的,是易語(yǔ)言的一個(gè)很有特色的數(shù)據(jù)類型,在文件處理、類對(duì)象的持久化中有重要用途,以后會(huì)有專門章節(jié)講述。12變量和常量所謂變量,就是其中保存的數(shù)據(jù)可以變化的一個(gè)數(shù)據(jù)容器(在易語(yǔ)言的早期版本中,變量都叫容器)。簡(jiǎn)單地說(shuō),變量就是在內(nèi)存中保存數(shù)據(jù)的地方,而其中的數(shù)據(jù)是可以隨時(shí)修改的。顧名思義,常量就是恒定不變的量,其中的數(shù)據(jù)不能被修改。如果在程序中有語(yǔ)句修改了常量的值,編譯器會(huì)報(bào)錯(cuò)。在編輯源代碼的任何時(shí)候,可以通過(guò)點(diǎn)選菜單插入常量來(lái)插入常量。在易語(yǔ)言中,要使用某個(gè)常量,必須在前面加上“”號(hào)。有同學(xué)可能會(huì)問(wèn)“既然常量的值是不可改變的,那么要常量有什么意義呢在源代碼中直接使用其值不就行了嗎要定義一個(gè)常量,還要想心思取個(gè)名字,不是多此一舉嗎”其實(shí)不然,使用常量有很多好處1簡(jiǎn)化代碼輸入。比如你要寫(xiě)個(gè)與數(shù)學(xué)相關(guān)的程序,要大量使用,我們知道31415926535897932384626433832795,每次在使用的時(shí)候,輸入這么一長(zhǎng)串?dāng)?shù)字是不是很麻煩容易輸錯(cuò)且不說(shuō),讀代碼的時(shí)候還不知其含義,所以我們不如定義一個(gè)常量“派”,這樣寫(xiě)代碼和讀代碼都方便多了,運(yùn)行時(shí)速度也快,最后編譯成EXE文件占用的存儲(chǔ)空間也少。2使代碼更易于閱讀。對(duì)于鍵盤上的每一個(gè)按鍵,都有一個(gè)數(shù)字型的掃描碼,比如空格鍵的代碼是32,回車是13,如果不使用常量,你如何記得住它們幸好易語(yǔ)言編程環(huán)境已經(jīng)給我們定義好了這些常量,我們可以直接使用。隨著編碼的深入,你會(huì)更多地發(fā)現(xiàn)常量有時(shí)很好的不要怕麻煩,巧妙地使用常量,有時(shí)會(huì)有意想不到的效果。121變量和常量的命名在易語(yǔ)言中,對(duì)常量名、變量名和函數(shù)名的等需要命名的地方有一定的命名規(guī)則,這些名稱的命名規(guī)則為名稱的首字母必須為全半角字母或漢字,其它字符必須為全半角字母、全半角數(shù)字或者漢字。雖然名稱中允許半角字符“_”存在,但它被保留為系統(tǒng)專用,因此建議不要使用。與其它的編程語(yǔ)言相比,易語(yǔ)言的命名規(guī)則有以下特點(diǎn)無(wú)長(zhǎng)度限制,用戶可以盡情地使用長(zhǎng)名稱來(lái)進(jìn)行名稱描述;永遠(yuǎn)不會(huì)與易語(yǔ)言的關(guān)鍵字產(chǎn)生沖突。譬如現(xiàn)已存在“如果”命令,但用戶仍然可以定義一個(gè)名稱為“如果”的變量,兩者之間不會(huì)產(chǎn)生任何沖突。雖然如此,最好還是不要以關(guān)鍵字來(lái)命名,因?yàn)檫@樣的代碼難于閱讀和理解。這里順便說(shuō)一下“關(guān)鍵字”的概念。在計(jì)算機(jī)語(yǔ)言中,有些詞匯和符號(hào)是作為語(yǔ)言的某種特殊的用途而使用的,比如類型定義、流程控制、算術(shù)邏輯運(yùn)算符、預(yù)處理指令、編譯指令等,在其他的編程語(yǔ)言中,這些詞匯和符號(hào)是不能作其他用的,比如不能作為變量名。這就好比我的名字是曾勁松,那我生的孩子我能給他取名“曾祖父”嗎不能,因?yàn)椤霸娓浮本褪且粋€(gè)關(guān)鍵字,已經(jīng)有其特定的用途了。再說(shuō)一遍,在易語(yǔ)言中雖然可以用關(guān)鍵字來(lái)命名變量、常量和函數(shù)名等,但建議不要這樣當(dāng)然,中國(guó)的考試有時(shí)候會(huì)刁鉆古怪,難免以后易語(yǔ)言進(jìn)入課堂而有老師出此偏門的考試題目嘿嘿,話題扯遠(yuǎn)了。122變量的作用范圍在易語(yǔ)言中,常量是全局范圍的,也就是說(shuō),在程序的任何地方都可以使用該常量。而變量的使用就沒(méi)有那么隨意了,根據(jù)變量的作用范圍不同,變量可以分為全局變量、程序集變量和和局部變量。全局變量的值在程序的任何地方都可以訪問(wèn)和修改,這雖然方便了編程,但實(shí)際上在編程的過(guò)程中,如果使用了太多的全局變量,程序?qū)憦?fù)雜了之后,很容易導(dǎo)致思維的混亂,因?yàn)槟阃恢滥阍诔绦虻哪睦镄薷牧嗽撟兞?。最后往往程序雖然通過(guò)了編譯,運(yùn)行的結(jié)果卻常常莫名其妙。所以,記住一條忠告能夠不使用全局變量,就不要使用,全局變量越少越好。要插入全局變量,請(qǐng)按鍵盤快捷鍵CTRLG,也可以點(diǎn)選菜單插入全局變量。程序集變量是在當(dāng)前程序集的范圍內(nèi)都可以訪問(wèn)的變量,它的范圍比全局變量要小些。易語(yǔ)言中的程序集,是指一系列相關(guān)子程序和變量的有機(jī)組合,說(shuō)簡(jiǎn)單點(diǎn),你可以把程序集想像成資源管理器中的文件夾。一般來(lái)說(shuō),一個(gè)窗口對(duì)應(yīng)一個(gè)程序集,當(dāng)然也有獨(dú)立于窗口的程序集,關(guān)鍵在于你如何組織你的代碼。對(duì)于一個(gè)有窗口的程序集,你可以把程序集變量看成該窗口的“額外”的屬性,這個(gè)小技巧在編程時(shí)很有用。除去范圍小些外,程序集變量的使用和全局變量差不多。所以,程序集變量也要謹(jǐn)慎使用。要插入程序集變量,請(qǐng)將光標(biāo)放置在程序集名的后面,然后按回車鍵。局部變量表示在當(dāng)前子程序(也稱函數(shù))的范圍內(nèi)可以訪問(wèn)的變量,它的作用范圍最小,也是使用得最多的變量。要在當(dāng)前子程序內(nèi)加入局部變量,請(qǐng)按CTRLL。在本書(shū)中,對(duì)于變量和子程序參數(shù)的命名有一個(gè)約定,那就是全局變量都以“全”字開(kāi)頭,程序集變量都以“集”字開(kāi)頭,函數(shù)參數(shù)都以“參”字開(kāi)頭,類的成員數(shù)據(jù)都以“私”字開(kāi)頭。有了這個(gè)約定之后,我們一看變量名就知道它是在何處定義的,方便編寫(xiě)和閱讀源代碼。123靜態(tài)變量只有子程序中的變量可以指定為“靜態(tài)”類型的變量,所以有關(guān)靜態(tài)變量請(qǐng)參看“子程序”一節(jié)。124變量的初始值變量的初始值是值變量在聲明后未給其賦值的情況下變量里面存儲(chǔ)的內(nèi)容。具體的初始值請(qǐng)參見(jiàn)表11。13運(yùn)算符運(yùn)算符就是用來(lái)進(jìn)行運(yùn)算的符號(hào)。在計(jì)算機(jī)中,運(yùn)算又分為算術(shù)運(yùn)算、邏輯運(yùn)算、位運(yùn)算和賦值運(yùn)算。算術(shù)運(yùn)算用來(lái)計(jì)算加減乘除求余數(shù)等,這些我們?cè)跀?shù)學(xué)中已經(jīng)學(xué)過(guò)了。邏輯運(yùn)算是進(jìn)行是非判斷以及是非組合的運(yùn)算,其基本運(yùn)算規(guī)則為非真為假,非假為真;真且真為真,真且假為假,假且假為假;真或真為真,真或假為真,假或假為假。位運(yùn)算是對(duì)數(shù)據(jù)位進(jìn)行操作。我們知道,在計(jì)算機(jī)內(nèi)部,所有的數(shù)據(jù)都是以二進(jìn)制表示的,比如字符“A”,其ASCII碼為65,二進(jìn)制為1000001,二進(jìn)制中只有兩個(gè)數(shù)學(xué)符號(hào)0和1,數(shù)據(jù)中的每一個(gè)1或0,叫做一位,位運(yùn)算正是針對(duì)這些數(shù)據(jù)位進(jìn)行操作的。在易語(yǔ)言中,位運(yùn)算符以函數(shù)的形式存在,其基本規(guī)則如下位與1,11,位與1,00,位與0,00,規(guī)則為“有0則0”;位或1,11,位或1,01,位或0,00,規(guī)則為“有1則1”;位異或1,10,位異或1,01,位異或0,00,位異或0,11,規(guī)則為“同0異1”;位取反10,位取反01;左移是將所有的位左移指定的位數(shù),移出位的被丟掉,右邊補(bǔ)0,比如左移10000012,300010002,這里3是十進(jìn)制數(shù),其他的是二進(jìn)制數(shù)。同理,右移是將所有的位右移,移出的位被丟掉,左邊補(bǔ)0。賦值運(yùn)算是指將值賦給一個(gè)或多個(gè)變量。易語(yǔ)言中所有的運(yùn)算符如下表所示表12易語(yǔ)言中的運(yùn)算符運(yùn)算符類型運(yùn)算符名中文操作符號(hào)英文操作符號(hào)位與位與BAND位或位或BOR位取反位取反BNOT位異或位異或BXOR左移左移SHL位運(yùn)算符右移右移SHR負(fù)相乘相除/整除求余數(shù)或MOD相加算術(shù)運(yùn)算符相減大于小于或大于或等于小于或等于19的結(jié)果是假,所以變量的值為假。在易語(yǔ)言中可以通過(guò)以下代碼查看運(yùn)行結(jié)果輸出調(diào)試文本位或左移3,2,3538跟數(shù)學(xué)算式類似,程序中的表達(dá)式也可以通過(guò)添加括號(hào)來(lái)改變運(yùn)算順序。如果你不清楚究竟是那個(gè)運(yùn)算符的優(yōu)先級(jí)高,那么就加括號(hào)吧這是確保正確的省事辦法。14流程控制如同現(xiàn)實(shí)世界的數(shù)據(jù)是多樣性的,現(xiàn)實(shí)世界的條件也是多樣性并且在時(shí)刻發(fā)生變化的。假如我們要設(shè)計(jì)計(jì)算機(jī)程序來(lái)處理類似這樣的事務(wù)通過(guò)判斷外界的溫度來(lái)控制通過(guò)電爐絲的電流以保持大致的恒溫當(dāng)溫度高于的時(shí)候,減小通過(guò)的電流以降溫;當(dāng)溫度低于的時(shí)候,增大通過(guò)的電流以升溫;根據(jù)考試得分評(píng)等級(jí)的程序,如果得分高于分為優(yōu)秀;介于分到分之間的為優(yōu)良;低于分的為不及格;一個(gè)圖像處理程序,要給一張圖片加上個(gè)隨機(jī)的彩點(diǎn);如果計(jì)算機(jī)始終只能按照指令的順序一條條地執(zhí)行,那么很顯然,要處理這樣的事情就很棘手了。這樣就引入了流程控制的概念,流程控制允許計(jì)算機(jī)根據(jù)不同的條件跳過(guò)一段代碼繼續(xù)執(zhí)行后面的代碼,或者跳轉(zhuǎn)到任意指定的指令行去繼續(xù)執(zhí)行,或者重復(fù)地執(zhí)行指定的程序段。易語(yǔ)言中設(shè)計(jì)到流程控制的關(guān)鍵字如下表。關(guān)鍵字說(shuō)明VB或中的類似關(guān)鍵字如果滿足條件執(zhí)行一個(gè)分支,不滿足則執(zhí)行另一個(gè)分支。IFELSEENDIF如果真滿足條件則指令下面的分支。IFENDIF判斷滿足條件則執(zhí)行該分支,其他的分支不再進(jìn)行條件判斷。如果條件都不滿足,則執(zhí)行最后一條分支(缺省分支)。也就是說(shuō),始終只執(zhí)行其中的一個(gè)分支。SELECTCASENUMBERCASE1CASENCASEELSE判斷循環(huán)首如果條件滿足,則執(zhí)行循環(huán)體。循環(huán)體有可能一次也不被執(zhí)行。WHILEWEND循環(huán)判斷首先執(zhí)行循環(huán)體,再進(jìn)行條件判斷。循環(huán)體至少被執(zhí)行一次。DOLOOPWHILE計(jì)次循環(huán)首執(zhí)行指定次數(shù)的循環(huán),循環(huán)的當(dāng)前次數(shù)存入指定的變量中。變量循環(huán)首根據(jù)指定的取值范圍進(jìn)行循環(huán),循環(huán)的當(dāng)前值存入指定的變量中。FORI5TO8NEXTI到循環(huán)尾不執(zhí)行此次循環(huán)后面的語(yǔ)句而直接進(jìn)行下次循環(huán)。CONTINUE跳出循環(huán)不再執(zhí)行循環(huán)。BREAK返回返回到調(diào)用程序,用于子程序中。RETURN結(jié)束退出程序。END141如果、如果真、判斷在論壇上,經(jīng)常看到有朋友問(wèn)“如果”和“如果真”有什么區(qū)別、“如果真”和“判斷”有什么區(qū)別的問(wèn)題,這里我作一個(gè)簡(jiǎn)要的解答?!叭绻闭Z(yǔ)句帶有兩個(gè)分支,如果條件成立,執(zhí)行第一個(gè)分支,否則執(zhí)行第二個(gè)分支;“如果真”則僅有一個(gè)分支,只有條件滿足才執(zhí)行。如果把“如果”語(yǔ)句的第二個(gè)分支留空,那么它的效果和“如果真”是一樣的,但在易語(yǔ)言的編程環(huán)境中會(huì)繪制一條空的流程線,不太美觀。所以,如果你要根據(jù)條件是否成立來(lái)執(zhí)行某些指令,而不管相反的條件,就要用“如果真”,如果正反兩個(gè)條件都要兼顧,則需要使用“如果”。易語(yǔ)言的示例代碼如圖141A和圖141B所示圖141A“如果”和“如果真”的區(qū)別圖141B“如果”和“如果真”的等效下面說(shuō)說(shuō)“判斷”和“如果真”的區(qū)別。從表面上看,“判斷”也是只有條件為真時(shí)執(zhí)行,但要注意,判斷是基于多分支的,只要發(fā)現(xiàn)其中一條分支的條件滿足,后續(xù)分支的條件就不再進(jìn)行判斷,當(dāng)然其中的代碼也不會(huì)被執(zhí)行,如果所有的條件都不滿足,則執(zhí)行默認(rèn)的分支。用多個(gè)“如果真”語(yǔ)句可以寫(xiě)出與“判斷”語(yǔ)句等效的效果,但程序執(zhí)行的效率沒(méi)有“判斷”語(yǔ)句高,為何因?yàn)槭褂谩芭袛唷闭Z(yǔ)句只要發(fā)現(xiàn)一條分支滿足就不再進(jìn)行后續(xù)判斷,而“如果真”語(yǔ)句對(duì)每個(gè)條件都要進(jìn)行判斷?!芭袛唷闭Z(yǔ)句通常用來(lái)對(duì)類似的多個(gè)條件且在同一個(gè)時(shí)刻下最多只有一個(gè)條件滿足的事務(wù)進(jìn)行處理,例如根據(jù)用戶按下了鍵盤的某個(gè)鍵、選擇了工具條上的哪個(gè)按鈕來(lái)執(zhí)行相應(yīng)的功能;在消息循環(huán)中處理當(dāng)前的消息等。圖141C的示例代碼演示了在易語(yǔ)言中用“判斷”語(yǔ)句來(lái)處理用戶單擊的工具條按鈕。圖141C用“判斷”語(yǔ)句來(lái)處理用戶單擊工具條按鈕142判斷循環(huán)、循環(huán)判斷顧名思義,判斷循環(huán)就是先判斷條件是否成立,成立則執(zhí)行循環(huán)體,不成立就結(jié)束循環(huán);而循環(huán)判斷是先執(zhí)行循環(huán)體,再判斷條件是否成立,成立則再次執(zhí)行循環(huán)體,否則結(jié)束循環(huán)。這兩個(gè)語(yǔ)句很簡(jiǎn)單,就不再敖述。圖142A和圖142B分別是使用“判斷循環(huán)”和“循環(huán)判斷”的例子。圖142A使用“判斷循環(huán)”將一個(gè)文本文件的內(nèi)容讀入列表框中圖142B使用循環(huán)判斷隨機(jī)畫(huà)圓,直至用戶按下ESC鍵143計(jì)次循環(huán)、變量循環(huán)記得我讀小學(xué)的時(shí)候,老師常對(duì)我說(shuō)“把每個(gè)寫(xiě)錯(cuò)了的字抄寫(xiě)遍”,我想大家都有過(guò)類似的經(jīng)歷吧。對(duì)于計(jì)算機(jī)來(lái)說(shuō),這正是一個(gè)“計(jì)次循環(huán)”的問(wèn)題。在你明確知道要循環(huán)的次數(shù)的時(shí)候,推薦使用“計(jì)次循環(huán)”。計(jì)次循環(huán)的計(jì)數(shù)器從開(kāi)始,每循環(huán)一次,計(jì)數(shù)器自動(dòng)加1,如果需要的話,可以指定一個(gè)變量來(lái)保存計(jì)數(shù)器的值?!白兞垦h(huán)”是高級(jí)的“計(jì)次循環(huán)”,使用起來(lái)也稍微復(fù)雜一些,可以指定計(jì)數(shù)器的起始值、終止值和每次遞增的數(shù)量,同樣的,你也可以把計(jì)數(shù)器的值存入變量中使用。圖143A用“計(jì)次循環(huán)”求的階乘圖143B用“變量循環(huán)”計(jì)算以內(nèi)能被整除的數(shù)的和從原理上來(lái)說(shuō),所有的循環(huán)都可以使用“判斷循環(huán)”來(lái)實(shí)現(xiàn),但不同的實(shí)現(xiàn)方法除代碼量不同之外,執(zhí)行的效率差距也很顯著。推薦的原則如下能夠使用“計(jì)次循環(huán)”和“變量循環(huán)”實(shí)現(xiàn)的,就不要使用“判斷循環(huán)”或“循環(huán)判斷”,因?yàn)榍罢叩膱?zhí)行效率要高得多,尤其是對(duì)于次數(shù)較多的循環(huán)。為什么呢因?yàn)槭褂谩芭袛嘌h(huán)”或“循環(huán)判斷”,每循環(huán)一次都要執(zhí)行一次條件判斷,而進(jìn)行條件判斷的開(kāi)銷往往是比較大的(尤其是進(jìn)行文本比較和字節(jié)集比較),而“計(jì)次循環(huán)”則是“明確目的,直奔主題”,效率當(dāng)然就高多啦144到循環(huán)尾、跳出循環(huán)OK,剛才老師罰你把“羸”字寫(xiě)100遍,也就是給你發(fā)了個(gè)“計(jì)次循環(huán)”的指令。當(dāng)你寫(xiě)到第13個(gè)字中途的時(shí)候,卻差點(diǎn)寫(xiě)成了“贏”字,下面的小“貝”都快寫(xiě)完了,此時(shí)你決定放棄繼續(xù)寫(xiě)這個(gè)字,因?yàn)殄e(cuò)字老師是不算數(shù)的,搞不好要再發(fā)寫(xiě)100遍呢。于是你把筆移到了下一格,開(kāi)始寫(xiě)下一個(gè)“羸”字暫停你的這個(gè)過(guò)程就是“到循環(huán)尾”。“到循環(huán)尾”并不是放棄整個(gè)循環(huán),而是僅僅放棄當(dāng)前循環(huán)中尚未完成的步驟,直接進(jìn)入下一循環(huán);你繼續(xù)寫(xiě)阿寫(xiě),當(dāng)你寫(xiě)到第90個(gè)字的時(shí)候,老師突然說(shuō)“好了,今天時(shí)間比較晚了,大家都回家吃飯吧”。“真郁悶,又讓我功敗垂成真是行百里者半九十阿?!保?dāng)你心理這樣想著的時(shí)候,卻不知已經(jīng)深入計(jì)算機(jī)語(yǔ)言的真諦,因?yàn)槟阋呀?jīng)“跳出循環(huán)”?!疤鲅h(huán)”就是不再繼續(xù)循環(huán)了。這句話對(duì)嗎錯(cuò)如果你在一個(gè)多層的嵌套循環(huán)中,中層循環(huán)中的“跳出循環(huán)”指令僅僅跳出當(dāng)前這一層循環(huán),外層循環(huán)還得繼續(xù)執(zhí)行的阿。145返回、結(jié)束“返回”主要用在子程序中,返回到子程序的調(diào)用者,在返回時(shí)可以攜帶一個(gè)返回值?!敖Y(jié)束”指令用來(lái)終止當(dāng)前進(jìn)程,退出程序。這兩個(gè)很簡(jiǎn)單,不再敖述。15子程序(函數(shù))在我們編程的時(shí)候,有一些經(jīng)常使用的功能,比如求一段文本的長(zhǎng)度、計(jì)算某個(gè)數(shù)的平方根、彈出一個(gè)消息框提示用戶等,如果每次實(shí)現(xiàn)這些功能都寫(xiě)一大段代碼,是不是很煩瑣結(jié)構(gòu)化的程序設(shè)計(jì)提出了代碼功能模塊化的思想,這些實(shí)現(xiàn)特定功能的代碼模塊我們稱之為“子程序”。子程序有系統(tǒng)內(nèi)置的,更多的則需要我們自己編寫(xiě)。系統(tǒng)內(nèi)置的子程序?qū)崿F(xiàn)的都是一些通用的功能,是我們編寫(xiě)其他子程序的基石,所以要好好掌握。這些內(nèi)置的子程序涉及文本處理、算術(shù)運(yùn)算、數(shù)組操作、拼音處理、文件讀寫(xiě)、系統(tǒng)處理等諸多方面。我的建議是把“工作夾”上“支持庫(kù)”頁(yè)中的核心支持庫(kù)中的所有子程序及其在“提示”窗口中的簡(jiǎn)要說(shuō)明都仔細(xì)看一遍,不需要全部記下來(lái),只要大概知道有哪些東西、能實(shí)現(xiàn)什么樣的功能就行了,用的時(shí)候再仔細(xì)查閱。15A易語(yǔ)言中系統(tǒng)內(nèi)置函數(shù)及其簡(jiǎn)要說(shuō)明很顯然,僅僅使用易語(yǔ)言內(nèi)置的子程序無(wú)法滿足我們編寫(xiě)多種應(yīng)用程序的要求,所以我們常常要編寫(xiě)自己的子程序。在編輯代碼的時(shí)候,你可以隨時(shí)按CTRLN或單擊菜單項(xiàng)插入子程序來(lái)添加子程序。151子程序參數(shù)參考、可空“吃的是草,擠出來(lái)的是奶”,這是魯迅先生對(duì)“孺子?!钡挠H切描述。我們寫(xiě)的子程序就跟魯迅先生筆下孺子牛差不多,這里,“草”就是子程序的參數(shù),而“奶”就是子程序返回的結(jié)果。當(dāng)然,有的牛奉獻(xiàn)精神更佳,不需要吃草也能擠奶,這就相當(dāng)于不需要參數(shù)的子程序;當(dāng)然,如果是公牛,吃了草也擠不出奶來(lái),那就是無(wú)返回值的子程序雖然它不能擠奶出來(lái),那么肯定有別的用途,比如說(shuō)跟能擠奶的牛待在一起,會(huì)使她們心情舒暢,產(chǎn)出優(yōu)質(zhì)量多的奶來(lái);還有的牛,可能不光要吃草,還要吃樹(shù)葉飼料之類的,那就是帶有多個(gè)參數(shù)的子程序了。通常情況下,一個(gè)子程序最多有一個(gè)返回值,如果要同時(shí)返回多個(gè)值該怎么辦呢這里介紹幾個(gè)技巧使用“參考”類型的參數(shù)。當(dāng)你勾中了參數(shù)名后面的那個(gè)“參考”選項(xiàng)的時(shí)候,參數(shù)傳遞的就不是它的值,而是它在內(nèi)存中的地址。你在子程序中對(duì)該參數(shù)的修改,實(shí)際上是對(duì)相應(yīng)的內(nèi)存中的數(shù)據(jù)的修改,所以在子程序返回的時(shí)候,調(diào)用程序中的變量已經(jīng)被修改了。請(qǐng)看下面的代碼片斷。151A使用“參考”參數(shù)類型返獲得多個(gè)返回值平均值、最小值和最大值使用數(shù)組類型的參數(shù)。如果返回的參數(shù)個(gè)數(shù)不定,但類型是一致的,那最好用“數(shù)組”類型的參數(shù)了。不管勾不勾中“參考”,數(shù)組類型始終是傳址的。使用自定義數(shù)據(jù)類型。自定義數(shù)據(jù)類型將在后面介紹。同樣地,不管是否勾中“參考”,自定義數(shù)據(jù)類型也是傳址的。子程序參數(shù)的“可空”選項(xiàng)允許用戶在調(diào)用該子程序時(shí)該參數(shù)位置不輸入?yún)?shù),這樣極大地方便了使用該子程序的用戶(很多情況下就是你自己啦),但對(duì)于編寫(xiě)該類子程序的程序員來(lái)說(shuō),會(huì)稍微麻煩一些,因?yàn)槟阋紤]到用戶是否傳入了參數(shù),一般來(lái)說(shuō),你應(yīng)該使用如圖141B所示的形式來(lái)設(shè)定空參數(shù)的默認(rèn)值。圖151B設(shè)置子程序“可空”參數(shù)的默認(rèn)值152子程序的遞歸“從前有座山,山上有座廟,廟里有一個(gè)老和尚和一個(gè)小和尚。有一天,老和尚給小和尚講故事,他說(shuō)從前有座山,山上有座廟,廟里有個(gè)老和尚和一個(gè)小和尚。有一天,老和尚給小和尚講故事,他說(shuō)“從前有座山,山上有座廟”我倒,這故事還有玩沒(méi)玩也許你覺(jué)得這個(gè)故事純粹是瞎胡鬧,那么你錯(cuò)了,這里面可蘊(yùn)含了巧妙的計(jì)算機(jī)編程思想遞歸?!斑f歸”并不是子程序的某個(gè)特點(diǎn),而是一種編程思想。也許你問(wèn)遞歸到底有什么用阿遞歸用處可大了,在計(jì)算機(jī)編程不,在生活中都隨處可見(jiàn),也許只是你沒(méi)有感覺(jué)到。當(dāng)你在和別人下棋的時(shí)候,你是如何思索每一個(gè)要下的棋步的呢或許你是這樣思考的如果我這么走,那么對(duì)手會(huì)怎樣怎樣,我再如何如何;如果我那么走,又如何如何等等,根據(jù)推理的幾步棋,從中挑出一個(gè)最優(yōu)的走法。計(jì)算機(jī)程序與人類對(duì)弈,它的算法也是與此類似的,它會(huì)遍歷棋盤上當(dāng)前情況下每一個(gè)可能的走法,在內(nèi)存中形成很多個(gè)新的棋局,再以這些棋局為基礎(chǔ),站在你的角度遍歷你的所有可能的走法,同時(shí)再生成很多新的棋局這樣循環(huán)到指定的深度(通常就是指思考的“步數(shù)”)后,挑出棋局最優(yōu)的那一盤,回到計(jì)算的起始點(diǎn),再舉一個(gè)例子,伸出你的左手,看到你掌心的血管沒(méi)有從一根主血管分成很多子分支,這些子分支下再分子子分支,子子分支下再分這就是計(jì)算機(jī)的分形圖的基礎(chǔ),而分形圖的核心算法必須依賴于遞歸。還有你每天使用的計(jì)算機(jī)的資源管理器的目錄樹(shù),也是遞歸。這些都是看得見(jiàn)的,還有看不見(jiàn)的,比如編譯器的表達(dá)式解析,也要用到遞歸。由此可見(jiàn),遞歸是無(wú)處不在而且功能強(qiáng)大的,所以一定要好好理解。計(jì)算機(jī)編程中的遞歸,指的是子程序不斷調(diào)用它自身,這想起來(lái)總覺(jué)得有點(diǎn)不可思議,但確實(shí)可以做到。當(dāng)然計(jì)算機(jī)中的遞歸不可能象我前面講的那個(gè)故事那樣,否則執(zhí)行起來(lái)沒(méi)玩沒(méi)了,任何一臺(tái)電腦都會(huì)死機(jī)。所以在使用遞歸的時(shí)候,一定要注意設(shè)定終止條件,否則會(huì)死得很難看。152A使用遞歸計(jì)算階乘圖152A的子程序用遞歸來(lái)計(jì)算指定數(shù)的階乘。我們知道,任何一個(gè)大于1的整數(shù)的階乘實(shí)際上等于該數(shù)乘以比它小1的數(shù)的階乘,而1的階乘是1。用數(shù)學(xué)式子表述如下NN用易語(yǔ)言程序來(lái)表述正是如上的算法。圖152B則使用遞歸來(lái)遍歷指定的目錄,列出指定目錄下的所有文件(包括子目錄下的文件)。雖然我們不知道一個(gè)目錄下面有多少層子目錄,但子目錄與目錄間有共性目錄下可能有文件,也可能有目錄。當(dāng)我們發(fā)現(xiàn)文件的時(shí)候,就輸出它;發(fā)現(xiàn)目錄的時(shí)候,就用同樣的方式來(lái)遍歷它。具體代碼實(shí)現(xiàn)的時(shí)候,我們是把當(dāng)前目錄下所有的文件輸出,所有的子目錄存入一個(gè)數(shù)組中,再逐個(gè)遍歷。易語(yǔ)言的“尋找文件”子程序會(huì)將當(dāng)前目錄“”和當(dāng)前目錄的父目錄“”也都列出來(lái),所以在遞歸的時(shí)候要注意排除這兩個(gè)目錄,否則始終在當(dāng)前目錄循環(huán),直至死機(jī)。這里如果對(duì)易語(yǔ)言的“尋找文件”函數(shù)不太理解,可以查看編程環(huán)境下的即時(shí)幫助。圖152B使用遞歸來(lái)列出指定目錄及其子目錄下的所有文件153子程序的靜態(tài)局部變量前面提到過(guò),子程序的局部變量可以設(shè)置為“靜態(tài)”類型。所謂“靜態(tài)”,就是指該變量具有“記憶”功能,對(duì)該子程序調(diào)用后,該局部變量的值不會(huì)被銷毀,到下次進(jìn)入該子程序,它仍然保留上次調(diào)用該子程序后的值。普通的子程序變量在每次進(jìn)入子程序內(nèi)后都要重新分配內(nèi)存空間,在退出子程序時(shí)自動(dòng)釋放所占用的空間;而“靜態(tài)”類型的子程序變量跟全局變量和程序集變量一樣,在程序啟動(dòng)時(shí)就分配了內(nèi)存空間并初始化(只初始化一次,而不是每次進(jìn)入子程序都初始化),并且在整個(gè)程序運(yùn)行期間都不釋放,所以該類型的變量有“記憶”效應(yīng)。圖153所示的代碼使用靜態(tài)局部變量和遞歸分解指定自然數(shù)的質(zhì)因數(shù),理解起來(lái)可能有些困難,請(qǐng)仔細(xì)思考體會(huì)。圖153使用靜態(tài)局部變量和遞歸來(lái)分解質(zhì)因數(shù)16自定義數(shù)據(jù)類型易語(yǔ)言的基本數(shù)據(jù)類型可以滿足我們普通的編程需求,而對(duì)于復(fù)雜的應(yīng)用程序,往往需要我們自己定義專用的數(shù)據(jù)類型,以簡(jiǎn)化編程。比如說(shuō)我們要編一個(gè)學(xué)生信息管理程序,我們知道,一個(gè)學(xué)生的信息通常包含以下方面姓名(文本型)、學(xué)號(hào)(文本型)、性別(邏輯型)、出生日期(日期時(shí)間型)、年級(jí)和班級(jí)(文本型)、專業(yè)(文本型)等。而這些不同類型的信息其實(shí)是一個(gè)整體,如果能把這些不同的數(shù)據(jù)類型整合成一個(gè)新的數(shù)據(jù)類型,那么編程起來(lái)會(huì)方便很多。在易語(yǔ)言編程環(huán)境中,點(diǎn)選菜單插入數(shù)據(jù)類型來(lái)加入新的數(shù)據(jù)類型,先更改數(shù)據(jù)類型名稱,然后按回車鍵來(lái)添加數(shù)據(jù)成員。申明好新的數(shù)據(jù)類型之后,就可以象使用普通變量那樣來(lái)申明變量了,差別就是在賦值和訪問(wèn)時(shí)要使用點(diǎn)語(yǔ)法。圖16定義和使用一個(gè)“學(xué)生信息”的數(shù)據(jù)類型161例黑客帝國(guó)屏保如果你對(duì)自定義數(shù)據(jù)類型使用不習(xí)慣,那么下面這個(gè)小例子或許會(huì)讓你熟悉自定義數(shù)據(jù)類型并增強(qiáng)對(duì)編程的興趣。這里我們來(lái)做一個(gè)很酷的類似黑客帝國(guó)中片頭的字符下落特效的屏保,讓你的電腦更富有個(gè)性請(qǐng)按下面的步驟操作。1新建一個(gè)易程序。在上面加一個(gè)畫(huà)板,改名為“畫(huà)板緩沖”,設(shè)置畫(huà)板的背景色為黑色、文本顏色為綠色,選擇一個(gè)長(zhǎng)型的字體,比如“IMPACT”,字號(hào)為四號(hào),注意,還要將其“可視”屬性設(shè)為“假”,“自動(dòng)重畫(huà)”設(shè)為“真”。這個(gè)畫(huà)板我們將作為在后臺(tái)繪制的一個(gè)緩沖畫(huà)板,用戶是看不見(jiàn)的。再加一個(gè)畫(huà)板,改名為“畫(huà)板可視”,其他的保持默認(rèn)值。2往窗體上添加一個(gè)時(shí)鐘控件,將其“時(shí)鐘周期”改為50,我們需要每秒鐘刷新20張畫(huà)面。3點(diǎn)選菜單插入數(shù)據(jù)類型,添加一個(gè)如圖161A的數(shù)據(jù)類型圖161A黑客帝國(guó)特效的數(shù)據(jù)類型4雙擊“_啟動(dòng)窗口”,如圖151B添加幾個(gè)程序集變量。圖151B黑客帝國(guó)特效的數(shù)據(jù)類型5在“_啟動(dòng)窗口_創(chuàng)建完畢”中添加圖161C所示代碼。圖161C“_啟動(dòng)窗口_創(chuàng)建完畢”事件中的代碼這段代碼中,讀者可能會(huì)對(duì)初始化下落字符數(shù)組下面的計(jì)次循環(huán)中的代碼有點(diǎn)費(fèi)解,這里解釋一下。“字符取隨機(jī)數(shù)33,126”這一句用來(lái)隨機(jī)取一個(gè)ASCII范圍在33到126之間字符。從圖161D所示的ASCII表可以看到,這些字符包含所有的可見(jiàn)英文字符和標(biāo)點(diǎn)符號(hào)。如果你只想要數(shù)字,那么把這句改成“字符取隨機(jī)數(shù)48,57”。圖161DASCII表“取整取隨機(jī)數(shù)0,_啟動(dòng)窗口寬度2020”這段代碼先從0到窗口寬度中隨機(jī)取出一個(gè)值,然后把該值除以20并去掉小數(shù)部分,然后再乘以20,就得到了一個(gè)能被20整除的隨機(jī)數(shù)。這樣設(shè)置以后,所有的字符都會(huì)在豎直方向形成列,每列個(gè)占用20個(gè)像素的寬度?!凹侣渥址麄僆Y取隨機(jī)數(shù),_啟動(dòng)窗口高度”,這句用來(lái)將字符的縱坐標(biāo)設(shè)置為屏幕上方的某一個(gè)隨機(jī)值,這樣字符就會(huì)從屏幕外落到屏幕內(nèi)?!凹侣渥址麄僆速度取隨機(jī)數(shù)2,30”,這句很簡(jiǎn)單啦。用來(lái)設(shè)置每個(gè)字符下落的速度范圍。當(dāng)然它們下落的速度不應(yīng)該一樣,否則的話就像軍隊(duì)陣列,太呆滯了。6雙擊窗體上的計(jì)時(shí)器,添加以下代碼。圖161E黑客帝國(guó)的時(shí)鐘周期事件代碼在這段代碼中,程序?qū)⒑笈_(tái)畫(huà)板清空,重新設(shè)定每個(gè)字符(這樣字符邊下落邊翻轉(zhuǎn)。如果只需要0到9之間的數(shù)字,可以象前面說(shuō)明的那樣改),將每個(gè)字符下落一次,把它們繪制到緩沖畫(huà)板;如果字符落到了屏幕下邊,則再次把它移到屏幕的上邊。全部繪制到緩沖畫(huà)板后,再一起復(fù)制到前臺(tái)的可視畫(huà)板。為什么要使用兩個(gè)畫(huà)板呢因?yàn)槿绻皇褂靡粋€(gè)畫(huà)板,清除后立即重繪會(huì)導(dǎo)致畫(huà)面閃動(dòng),在慢速的機(jī)器上甚至可以看到字符一個(gè)個(gè)被繪制出來(lái),效果很差。而采用兩畫(huà)板,繪制完畢后一起復(fù)制到前臺(tái),用戶看不到繪制的過(guò)程,所以就不會(huì)出現(xiàn)閃屏的情況這就是游戲編程中常使用的“雙緩沖”技術(shù)。OK,運(yùn)行以下看看效果吧。是不是很酷你還可以通過(guò)調(diào)整字符個(gè)數(shù)、下落速度、以及時(shí)鐘周期來(lái)獲得更滿意的效果。7把它變成屏保吧。這個(gè)小程序做成屏幕保護(hù)最合適不過(guò)了,這里我們使用最簡(jiǎn)單的一種方法來(lái)把它變成屏保。首先,屏保在用戶移動(dòng)鼠標(biāo)、點(diǎn)按鼠標(biāo)或敲擊鍵盤時(shí)要退出,所以我們按以下步驟添加代碼加一個(gè)程序集變量“集鼠標(biāo)上次橫坐標(biāo)”,類型為整數(shù)型,用來(lái)進(jìn)行用戶移動(dòng)鼠標(biāo)距離的判斷,如果鼠標(biāo)移動(dòng)的距離很小(比如桌面被震動(dòng)),則不退出屏保。添加鼠標(biāo)移動(dòng)事件、單擊事件和按鍵事件的代碼,如圖161F所示。圖161F添加適合屏保的退出程序的代碼其次,需要將程序編譯成“黑客帝國(guó)特效EXE”文件,再在資源管理器中將擴(kuò)展名改為“SCR”,然后把它拷貝到WINDOWSXP的SYSTEM32目錄下(如果是WINDOWS98/ME,則拷貝到SYSTEM目錄下),打開(kāi)桌面的屬性窗口,就可以把屏保設(shè)置為我們剛才寫(xiě)的“黑客帝國(guó)特效”了(圖161G)。不過(guò),真正的屏保程序可沒(méi)這么簡(jiǎn)單,還需要涉及到預(yù)覽窗口、參數(shù)配置等,后面章節(jié)會(huì)有專門介紹。圖161G設(shè)置黑客帝國(guó)屏保162自定義數(shù)據(jù)類型的內(nèi)存存儲(chǔ)自定義數(shù)據(jù)類型的使用很簡(jiǎn)單,我們只需用“”操作符就可以讀取或修改它的各個(gè)數(shù)據(jù)成員了。那么我現(xiàn)在要考考你能不能不使用“”操作符而直接修改某個(gè)自定義數(shù)據(jù)類型的成員數(shù)據(jù)呢答案是肯定的,我們可以通過(guò)直接讀取變量的內(nèi)存地址來(lái)做到這一點(diǎn)。要通過(guò)修改內(nèi)存來(lái)修改數(shù)據(jù)成員,我們必須要知道自定義數(shù)據(jù)類型的內(nèi)存存儲(chǔ)方式。也許你會(huì)問(wèn)既然可以直接通過(guò)“”操作符來(lái)修改數(shù)據(jù)成員,為何還要舍近求遠(yuǎn)地直接修改內(nèi)存呢這樣做,一方面可以加深我們對(duì)計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)器的理解,另一方面,也為后面章節(jié)中的向函數(shù)中傳遞自定義數(shù)據(jù)類型做鋪墊。如果你對(duì)此不感興趣,可以先跳過(guò)這一小節(jié)。首先我們考慮一個(gè)簡(jiǎn)單的問(wèn)題文本型的數(shù)據(jù)的存儲(chǔ)問(wèn)題,一個(gè)文本型的變量,它里面究竟保存的是什么是文本數(shù)據(jù)本身,抑或僅僅是文本在內(nèi)存中的地址我們來(lái)研究一下圖162A所示的代碼【注意這段代碼中使用的函數(shù)“取變量地址”在“特殊功能支持庫(kù)”中,所以在編寫(xiě)和運(yùn)行代碼前,需要配置支持庫(kù),方法如下點(diǎn)擊菜單工具支持庫(kù)配置,在支持庫(kù)列表中勾中“特殊功能支持庫(kù)”】。這段代碼的前三行先初始化一個(gè)文本變量的內(nèi)容為“HTTP/GOOMOOCN”,然后取該變量的地址,再用“指針到文本”函數(shù)將地址中的內(nèi)容讀出來(lái)。從邏輯上來(lái)說(shuō),如果文本型變量保存的是文本數(shù)據(jù)本身,那么這里應(yīng)該將字符串正確地輸出,但實(shí)際上這里輸出的卻是亂碼。由此可見(jiàn),“文本”變量中保存的不是真正的字符串,那么是什么呢只有一個(gè)可能,那就是指向文本數(shù)據(jù)的內(nèi)存地址,也就是說(shuō),“文本”變量里面實(shí)際保存的是一個(gè)整數(shù)。既然“文本”變量里面保存的是真實(shí)文本數(shù)據(jù)的地址,那么怎樣才能把它取出來(lái)呢“到數(shù)值”函數(shù)顯然不行,易語(yǔ)言又沒(méi)有提供一個(gè)“指針到整數(shù)”的函數(shù),因此只能采用一個(gè)變通的方法先用“指針到字節(jié)集”轉(zhuǎn)換成字節(jié)集,再?gòu)淖止?jié)集轉(zhuǎn)換成整數(shù),就得到了真實(shí)的文本地址了。代碼片斷中中間三行做的正是這個(gè)工作,因此得到了正確的地址,輸出了正確的結(jié)果。最后的兩行代碼就是直接修改內(nèi)存中的數(shù)據(jù)了,也就是修改了“文本”變量中的值。圖162A文本變量的內(nèi)存存儲(chǔ)為了理解更直觀,這里畫(huà)一個(gè)表(表162A),從表中我們可以看到,文本變量的內(nèi)存地址是1242512(在你的機(jī)器上也許會(huì)不一樣),存儲(chǔ)的內(nèi)容是9896255這個(gè)值也會(huì)不一樣,而內(nèi)存起始地址為9896255的內(nèi)存塊中保存的是文本“HTTP/GOOMOOCN”。內(nèi)存地址12425129896255內(nèi)存內(nèi)容9896255HTTP/GOOMOOCN變量名文本表162A文本變量的內(nèi)存存儲(chǔ)既然文本型變量的存儲(chǔ)搞清楚了,那么自定義數(shù)據(jù)類型的內(nèi)存存儲(chǔ)方式也就不是難事。我猜想應(yīng)該是這樣的對(duì)于一個(gè)自定義數(shù)據(jù)類型的數(shù)據(jù)來(lái)說(shuō),其各個(gè)數(shù)據(jù)成員的數(shù)據(jù)是存儲(chǔ)在連續(xù)的內(nèi)存單元中的,如果成員數(shù)據(jù)的數(shù)據(jù)類型占用的內(nèi)存空間是固定的(比如整數(shù)型、邏輯型、日期時(shí)間型等),數(shù)據(jù)就直接存儲(chǔ)在該內(nèi)存單元中,如果數(shù)據(jù)的長(zhǎng)度不定(如文本型、字節(jié)集等),那么該內(nèi)存單元保存的是指向它們的內(nèi)存地址,占用4個(gè)字節(jié)的存儲(chǔ)空間,實(shí)際的數(shù)據(jù)則另外再開(kāi)辟內(nèi)存空間保存。我們用代碼來(lái)證實(shí)我們的猜想,我們需要先定義一個(gè)這樣的數(shù)據(jù)類型圖152B圖162B用來(lái)測(cè)試的數(shù)據(jù)結(jié)構(gòu)在窗體上添加一個(gè)按鈕,添加以下代碼。因?yàn)檫@段代碼太長(zhǎng),所以以文本的方式列出,以后不作說(shuō)明,均如此。版本2支持庫(kù)SPEC子程序_按鈕自定義類型_被單擊局部變量某學(xué)生,學(xué)生局部變量結(jié)構(gòu)地址,整數(shù)型局部變量臨時(shí)地址,整數(shù)型局部變量臨時(shí)字節(jié)集,字節(jié)集局部變量生日,日期時(shí)間型局部變量男女,邏輯型局部變量年齡,整數(shù)型某學(xué)生姓名“曾唯思”文本型,保存的實(shí)際是文本的地址,固定長(zhǎng)度為4個(gè)字節(jié)某學(xué)生生日1968年8月8日日期時(shí)間型,固定長(zhǎng)度為8個(gè)字節(jié)某學(xué)生性別真邏輯型,固定長(zhǎng)度為4個(gè)字節(jié),易語(yǔ)言幫助文檔有誤某學(xué)生年齡37字節(jié)型,固定長(zhǎng)度為1個(gè)字節(jié)以下三行代碼獲取“某教師”變量中保存的結(jié)構(gòu)的起始地址臨時(shí)地址取變量地址某學(xué)生臨時(shí)字節(jié)集指針到字節(jié)集臨時(shí)地址,4結(jié)構(gòu)地址取字節(jié)集數(shù)據(jù)臨時(shí)字節(jié)集,整數(shù)型,以下三行代碼取出第一個(gè)成員數(shù)據(jù)“姓名”的地址臨時(shí)字節(jié)集指針到字節(jié)集結(jié)構(gòu)地址,4臨時(shí)地址取字節(jié)集數(shù)據(jù)臨時(shí)字節(jié)集,整數(shù)型,輸出調(diào)試文本指針到文本臨時(shí)地址臨時(shí)地址結(jié)構(gòu)地址4跳過(guò)“姓名”成員的4個(gè)字節(jié),到“生日”成員臨時(shí)字節(jié)集指針到字節(jié)集臨時(shí)地址,8日期時(shí)間型長(zhǎng)度固定為8個(gè)字節(jié)生日取字節(jié)集數(shù)據(jù)臨時(shí)字節(jié)集,日期時(shí)間型,輸出調(diào)試文本生日臨時(shí)地址臨時(shí)地址8跳過(guò)“生日”成員的8個(gè)字節(jié),到“性別”成員臨時(shí)字節(jié)集指針到字節(jié)集臨時(shí)地址,4邏輯型數(shù)據(jù)應(yīng)占4個(gè)字節(jié)男女取字節(jié)集數(shù)據(jù)臨時(shí)字節(jié)集,邏輯型,輸出調(diào)試文本男女臨時(shí)地址臨時(shí)地址4跳過(guò)“性別”成員的4個(gè)字節(jié),來(lái)到“年齡”成員臨時(shí)字節(jié)集指針到字節(jié)集臨時(shí)地址,1年齡取字節(jié)集數(shù)據(jù)臨時(shí)字節(jié)集,字節(jié)型,輸出調(diào)試文本年齡既然已經(jīng)找到了正確的內(nèi)存地址,再往其中寫(xiě)數(shù)據(jù)就很簡(jiǎn)單了。臨時(shí)字節(jié)集指針到字節(jié)集結(jié)構(gòu)地址,4臨時(shí)地址取字節(jié)集數(shù)據(jù)臨時(shí)字節(jié)集,整數(shù)型,寫(xiě)到內(nèi)存“曾睿姝”,臨時(shí)地址,寫(xiě)姓名臨時(shí)地址結(jié)構(gòu)地址4寫(xiě)到內(nèi)存2003年10月1日,臨時(shí)地址,寫(xiě)生日臨時(shí)地址臨時(shí)地址8寫(xiě)到內(nèi)存假,臨時(shí)地址,寫(xiě)性別臨時(shí)地址臨時(shí)地址4寫(xiě)到內(nèi)存2,臨時(shí)地址,寫(xiě)年齡再用結(jié)構(gòu)成員的訪問(wèn)方式輸出看看輸出調(diào)試文本某學(xué)生姓名輸出調(diào)試文本某學(xué)生生日輸出調(diào)試文本某學(xué)生性別輸出調(diào)試文本某學(xué)生年齡很幸運(yùn)的是,代碼的運(yùn)行結(jié)果證實(shí)了我們的猜想。從代碼的分析我們可以看到,自定義數(shù)據(jù)類型變量實(shí)際保存的也是個(gè)內(nèi)存地址,我們只要找到這個(gè)基址,然后順次根據(jù)成員變量的長(zhǎng)度進(jìn)行遞增就可以得到這些成員變量的地址了,然后就可以直接進(jìn)行讀取和寫(xiě)入。對(duì)于數(shù)據(jù)長(zhǎng)度不定的數(shù)據(jù)類型,比如文本型、字節(jié)集、數(shù)組等,保存的又是一個(gè)地址,我們?cè)偻ㄟ^(guò)該地址進(jìn)行訪問(wèn)。所以我們看到,對(duì)文本型的成員變量的處理復(fù)雜一些,轉(zhuǎn)了一個(gè)彎。為什么要采取這樣的一種存儲(chǔ)方式呢試想一下,如果文本型數(shù)據(jù)也直接保存在結(jié)構(gòu)的地址中,那么在初始化該結(jié)構(gòu)時(shí)就要對(duì)該成員變量分配足夠的內(nèi)存空間,因?yàn)橄到y(tǒng)并不知道后續(xù)的代碼會(huì)將該成員賦一個(gè)多么長(zhǎng)的文本。很顯然,這會(huì)造成內(nèi)存空間的極大浪費(fèi),也會(huì)極大影響程序的運(yùn)行效率。而僅僅保存一個(gè)內(nèi)存地址,在32位的操作系統(tǒng)上,內(nèi)存地址的長(zhǎng)度始終是4個(gè)字節(jié),這樣就固定了。如果后續(xù)代碼修改了該成員變量,那么系統(tǒng)只用動(dòng)態(tài)分配另一個(gè)內(nèi)存塊,并且把該內(nèi)存塊的起始地址賦值到該成員變量即可。這段代碼的運(yùn)行過(guò)程可以用下表來(lái)說(shuō)明內(nèi)存地址1405472基址基址4基址12基址169896243內(nèi)容989624319680808真37曾唯思變量名某學(xué)生姓名某學(xué)生生日某學(xué)生性別某學(xué)生年齡變量名某學(xué)生姓名某學(xué)生生日某學(xué)生性別某學(xué)生年齡長(zhǎng)度48417表162B自定義數(shù)據(jù)類型的內(nèi)存存儲(chǔ)嗯,研究了半天自定義數(shù)據(jù)類型的內(nèi)存存儲(chǔ)結(jié)構(gòu),好象沒(méi)什么用,是不是前面已經(jīng)說(shuō)過(guò),這是為后面章節(jié)中的在DLL函數(shù)中使用自定義數(shù)據(jù)類型作的準(zhǔn)備工作,權(quán)作鋪墊。P17數(shù)組計(jì)算機(jī)處理的數(shù)據(jù)量往往是很大的,而且通常是同一種數(shù)據(jù)類型,比如上例中整屏的字符,或者圖像中的一批像素,或者一批文本等等。易語(yǔ)言中提供的“數(shù)組”數(shù)據(jù)結(jié)構(gòu)允許我們方便地處理這樣的數(shù)據(jù)。簡(jiǎn)單地說(shuō),數(shù)組就是一批同種類型的數(shù)據(jù)的順序集合,我們可以通過(guò)他們的序號(hào)來(lái)方便地訪問(wèn)其中的每一個(gè)元素。要定義一個(gè)指定數(shù)據(jù)類型的數(shù)組,只需要在聲明它時(shí)輸入數(shù)組中元素的個(gè)數(shù)就可以了,如圖16。圖17數(shù)組的定義方法在給數(shù)組變量取名的時(shí)候,我喜歡在后面加一個(gè)“們”或“數(shù)組”以表示它是一個(gè)數(shù)組。如果你不喜歡,你可以采用你自己的方法。一旦定義了數(shù)組,我們可以通過(guò)方括號(hào)和其順序索引來(lái)訪問(wèn)其中的元素,如“整數(shù)們4”。注意數(shù)組的索引從1開(kāi)始,到所定義的元素個(gè)數(shù)結(jié)束。如果你訪問(wèn)的數(shù)組索引不在此范圍之內(nèi),那就要彈出著名的“數(shù)組索引越界”運(yùn)行時(shí)錯(cuò)誤而導(dǎo)致程序意外終止。所以,在使用數(shù)組時(shí)一定要非常小心,應(yīng)該盡可能做多的判斷以確保索引值在其范圍之內(nèi)“如果在定義數(shù)組時(shí)我不知道數(shù)組里面的確切元素個(gè)數(shù)該怎么辦呢”你也許會(huì)這么問(wèn),這時(shí)你就把它的元素個(gè)數(shù)定為“0”吧,就向上面的“文本們”變量一樣,然后在程序代碼中使用“重定義數(shù)組”函數(shù)來(lái)動(dòng)態(tài)設(shè)置其長(zhǎng)度和維數(shù),就可以象普通數(shù)組一樣使用了。171數(shù)組的維數(shù)前面我們說(shuō)過(guò),數(shù)組是同一類型數(shù)據(jù)的順序集合,這種“順序”,指的是數(shù)組數(shù)據(jù)是存儲(chǔ)在連續(xù)的內(nèi)存單元中的。然而我們可以從邏輯上把這些數(shù)據(jù)分割成“行”和“列”、或“長(zhǎng)”、“寬”、“高”等從而形成多維數(shù)組。單維數(shù)組很容易理解,那么多維數(shù)組如何理解呢請(qǐng)看下面的圖示。圖171A一行隊(duì)列是一個(gè)一維數(shù)組,可以按序號(hào)訪問(wèn)其中每個(gè)士兵圖171B行軍方陣可以表示為二維數(shù)組,要訪問(wèn)其中的一個(gè)士兵,必須同時(shí)指定行和列圖171C三維數(shù)組,必須同時(shí)指定三個(gè)序號(hào)才能訪問(wèn)其中的一個(gè)元素至于三維以上的數(shù)組,則無(wú)法用圖示表示出來(lái)了,有什么用處,也只有充分發(fā)揮你的想像力了。要改變數(shù)組的維數(shù),請(qǐng)使用“重定義數(shù)組”函數(shù)。該函數(shù)可以對(duì)一個(gè)已存在數(shù)據(jù)的數(shù)組進(jìn)行重新指定維數(shù),而且能保證數(shù)組中已存的數(shù)據(jù)不丟失,這在實(shí)際編程中非常有用。要訪問(wèn)多維數(shù)組中的一個(gè)元素,需要使用多個(gè)方括號(hào)將其索引值分別括起來(lái)。圖171D的程序片斷演示了多維數(shù)組的使用方法。由程序的運(yùn)行結(jié)果可以看出,如果指定新的維數(shù)后數(shù)組的元素個(gè)數(shù)比以前少,則多余的數(shù)據(jù)會(huì)刪除;如果元素個(gè)數(shù)多余以前的,則多余的部分會(huì)根據(jù)數(shù)據(jù)類型以默認(rèn)的數(shù)據(jù)進(jìn)行填充。任何維度的數(shù)組都可以使用單維的訪問(wèn)方法訪問(wèn)其中的元素,但要注意索引值不能超過(guò)數(shù)組中元素的個(gè)數(shù);“數(shù)組排序”函數(shù)依然是按照單維數(shù)組的方式進(jìn)行排序。由此進(jìn)一步說(shuō)明,數(shù)組是在連續(xù)的內(nèi)存空間中存儲(chǔ)的,只是我們?cè)凇斑壿嬌稀狈殖刹煌木S數(shù),以方便編程。圖171D多維數(shù)組的使用172數(shù)組的排序易語(yǔ)言的數(shù)組操作類命令中提供了一個(gè)“數(shù)組排序”函數(shù),此函數(shù)可以很方便有效地對(duì)數(shù)值型數(shù)組進(jìn)行排序,使用起來(lái)也很簡(jiǎn)短,具體的用法請(qǐng)參見(jiàn)上例。在實(shí)際的編程中我們通常不僅要對(duì)數(shù)值型數(shù)組進(jìn)行排序,還需要對(duì)文本型、時(shí)間日期型、自定義數(shù)據(jù)類型等的數(shù)組數(shù)據(jù)進(jìn)行排序,因此我們經(jīng)常需要編寫(xiě)自己的排序算法,這里我們就以對(duì)文本型數(shù)組進(jìn)行排序?yàn)槔?,?jiǎn)述幾種常用的排序算法。首先需要寫(xiě)幾個(gè)輔助的函數(shù)1隨機(jī)生成文本的函數(shù),這樣方便我們初始化一個(gè)文本數(shù)組。具體代碼如下圖172A取隨機(jī)文本的函數(shù)2用指定的文本數(shù)組來(lái)填充列表框的函數(shù),以方便我們對(duì)比查看排序的結(jié)果。圖172B用文本數(shù)組來(lái)填充列表框的函數(shù)接下來(lái)就進(jìn)入實(shí)質(zhì)性的問(wèn)題了。新建一個(gè)易語(yǔ)言程序,在窗口上放一個(gè)列表框和5個(gè)按鈕,布局如圖172C所示。五個(gè)按鈕的名字均為“按鈕”加上其標(biāo)題。添加一個(gè)程序集變量“集文本們”,類型為“文本型”,在“數(shù)組”一欄中輸入“1000”,設(shè)定一個(gè)1000個(gè)元素的文本數(shù)組。圖172C用于對(duì)文本數(shù)組排序的窗體界面為按鈕“初始化數(shù)組”編寫(xiě)如下代碼圖172D用于對(duì)文本數(shù)組排序的初始化代碼1721冒泡排序我們現(xiàn)來(lái)看看最簡(jiǎn)單、最容易實(shí)現(xiàn)的“冒泡排序”。冒泡排序的方法是這樣的從第一個(gè)元素開(kāi)始,比較當(dāng)前元素和下一個(gè)元素的值,如果當(dāng)前元素大于下一個(gè)元素,就交換它們。顯然,經(jīng)過(guò)第一輪比較后,最大的元素被挪到了最后面。再對(duì)前面的元素重復(fù)這個(gè)過(guò)程,次大的元素移到倒數(shù)第二的位置,如此循環(huán),直到最后兩個(gè)元素,要么交換,要么不交換,排序結(jié)束。為什么把這個(gè)排序方法叫“冒泡排序”呢因?yàn)樵谂判虻倪^(guò)程中,數(shù)組中較大的元素象水中的氣泡一樣一個(gè)個(gè)浮到了上面,因此得名。為了直觀理解,我們先以一串?dāng)?shù)字471253進(jìn)行排序觀察第一輪427153247153247153241753241573241537第二輪241537241537214537214537214357第三輪214357124357124357123457具體的實(shí)現(xiàn)代碼如圖1621A。圖1721A對(duì)文本數(shù)組進(jìn)行冒泡排序在這段代碼中,每一次內(nèi)循環(huán)就是一輪,每輪比較的次數(shù)逐步遞減,因?yàn)槊窟M(jìn)行一輪比較,就有一個(gè)元素方到了后面正確的位置。因?yàn)橐粋€(gè)元素是無(wú)法進(jìn)行比較的,所以總共的輪數(shù)是元素的個(gè)數(shù)減1(從2到數(shù)組元素的個(gè)數(shù))。從冒泡排序的源代碼可以看到,對(duì)于一個(gè)有N個(gè)元素的數(shù)組,需要進(jìn)行123N1NN1/2次比較,最壞的情況下每比較一次就要進(jìn)行一次交換剛好是逆序,所以最多要交換NN1/2次。雙擊“冒泡排序”按鈕,添加如下代碼運(yùn)行程序,點(diǎn)擊按鈕,觀察排序的結(jié)果吧。從冒泡排序的算法來(lái)看,寫(xiě)成遞歸函數(shù)或許會(huì)更容易理解排序前,是一個(gè)雜亂的數(shù)組。進(jìn)行排序一輪后,最大的元素放到了最后,前面的仍是一個(gè)雜亂的數(shù)組,再對(duì)這個(gè)雜亂的數(shù)組進(jìn)行排序,顯然這是一個(gè)相似的過(guò)程。在遞歸調(diào)用的時(shí)候,只需指定最后一個(gè)要排的元素的位置(也就是要排序的元素的范圍)就行了。遞歸冒泡排序的代碼如圖1721B所示。圖1721B遞歸冒泡排序文本數(shù)組遞歸的算法代碼稍微長(zhǎng)一些,但更易于理解。該函數(shù)的使用方法和上面的一樣,直接傳遞文本數(shù)組就可以了,不必傳遞“參最后位置”這個(gè)參數(shù),它是遞歸自身使用的。冒泡排序的算法效率是比較低的,但對(duì)于少量的數(shù)據(jù)1000個(gè)以下元素的文本數(shù)組還是很有效的,在我的機(jī)器上,排序1000個(gè)長(zhǎng)度均為8的文本的數(shù)組耗時(shí)約1400毫秒(可見(jiàn)我的機(jī)器快過(guò)時(shí)了)。遞歸的算法比較和交換的次數(shù)雖然一樣,但因?yàn)檫f歸的過(guò)程中要在棧上不斷重新分配和釋放空間,效率會(huì)比不用遞歸的低,占用的內(nèi)存也大,這里權(quán)作一個(gè)演示。還有一個(gè)要注意的問(wèn)題,文本比較本身比數(shù)值比較要慢得多,交換也慢得多,所以不能以數(shù)值排序的結(jié)果來(lái)判斷文本排序的效率。1722選擇排序選擇排序的思想是這樣的從數(shù)組中找出一個(gè)最小的,把它與第一個(gè)元素交換;從剩下的元素中再找出一個(gè)最小的,與第二個(gè)交換如此循環(huán),直到最后一個(gè)元素。很簡(jiǎn)單是不是看看圖1722A所示的代碼。用選擇排序來(lái)演示排序前面的那一串?dāng)?shù)字,是這樣的471253174253124753123754123457123457,顯然交換的步驟少了很多。圖1722A選擇排序文本數(shù)組從代碼可以看出,對(duì)于有N個(gè)元素的數(shù)組,選擇排序要進(jìn)行N1N21NN1/2次,這與冒泡排序一樣,但最多交換N1次每一輪都交換一次,所以效率要高很多。在我的機(jī)器上1000元素個(gè)長(zhǎng)度均為8的文本數(shù)組大約耗時(shí)47毫秒,顯然速度提高了很多。1723插入排序你玩過(guò)撲克牌嗎你是否對(duì)一幅撲克牌進(jìn)行排序過(guò)如果要排序的話,我想是這樣的先抽出一張牌,放在桌面上,再抽出一張牌,看它比桌面上的牌大還是小,從而放在前面或后面,繼續(xù)抽牌,與桌面上的牌進(jìn)行比較并插在合適的位
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 男寶寶周歲協(xié)議書(shū)
- 蔬菜送貨協(xié)議書(shū)
- 設(shè)備安拆協(xié)議書(shū)
- 設(shè)備租合同范本
- 試驗(yàn)機(jī)構(gòu)協(xié)議書(shū)
- 工程導(dǎo)師協(xié)議書(shū)
- 并購(gòu)保障協(xié)議書(shū)
- 房貸還款的協(xié)議書(shū)
- 打捆秸稈合同范本
- 意法停戰(zhàn)協(xié)議書(shū)
- 山東省濟(jì)南市鋼城區(qū)(五四學(xué)制)2024-2025學(xué)年八年級(jí)上學(xué)期1月期末考試數(shù)學(xué)試卷
- 中國(guó)當(dāng)代文學(xué)專題-003-國(guó)開(kāi)機(jī)考復(fù)習(xí)資料
- 【1例心肌梗塞患者的PCI術(shù)后護(hù)理探究7800字(論文)】
- 電工培訓(xùn)觸電急救課件
- 小型混凝土攪拌機(jī)畢業(yè)設(shè)計(jì)
- 小學(xué)數(shù)學(xué)主題圖
- 臥床病人的護(hù)理即翻身技巧課件
- 智能信報(bào)箱系統(tǒng)施工方案
- 嚴(yán)歌苓作品:霜降
- 西爾斯懷孕百科(升級(jí)版)
- 樓梯工程量計(jì)算表(模板、砼計(jì)算)
評(píng)論
0/150
提交評(píng)論