-
簡(jiǎn)介:畢業(yè)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文論文基于C的網(wǎng)吧會(huì)員管理系統(tǒng)系別計(jì)算機(jī)科學(xué)與技術(shù)系專業(yè)(班級(jí))計(jì)算機(jī)科學(xué)與技術(shù)2014級(jí)專升本班作者(學(xué)號(hào))范孝禮(51402111043)指導(dǎo)教師馬吳迪(碩士)目錄摘要1ABSTRACT31引言411系統(tǒng)背景412系統(tǒng)目標(biāo)42相關(guān)技術(shù)簡(jiǎn)介相關(guān)技術(shù)簡(jiǎn)介521C技術(shù)522SQLSERVER數(shù)據(jù)庫(kù)技術(shù)63系統(tǒng)需求分析系統(tǒng)需求分析731總體需求分析732可行性分析8321技術(shù)可行性8322經(jīng)濟(jì)可行性833運(yùn)行環(huán)境及開發(fā)工具94系統(tǒng)功能分析與模塊設(shè)計(jì)系統(tǒng)功能分析與模塊設(shè)計(jì)1041系統(tǒng)功能分析1042驗(yàn)證登錄與退出功能設(shè)計(jì)與實(shí)現(xiàn)1043管理員功能模塊設(shè)計(jì)與實(shí)現(xiàn)12431管理員管理界面功能概述12
下載積分: 8 賞幣
上傳時(shí)間:2024-03-15
頁(yè)數(shù): 29
大?。?0.51(MB)
子文件數(shù):
-
簡(jiǎn)介:第一章第一章一、一、1C2B3C4C5D6A7B8C9A10D11B12C13A14D15B16B第二章一、一、1D2A3C4D5A6B7A8B9A10D11B12C13C14D15C16B17D18A19C20B21B22D23A24B25B26B27B第三章一、一、1D2C3A4C5A6C7C8D9A10D11A(146F)12B13C14C15A16B17A18A19C20A21B22D23B24B25D26D27C28C第四章一、一、1B2C3D4D5D6C7B8D9C10D11B12A13C14C15B16AB17D二、二、1DOUBLEFUNINTMDOUBLEY0YSINM10RETURNY2FLOATFUNFLOATHRETURNLONGH1000510003DOUBLEFUNDOUBLEMFLOATNN5090M32RETURNN4FUNCCC32RETURNC位置3WHILEN0【或】WHILE0I【或】300I位置3I70||I0【或】I7||I【或】I||I7【或】I7【或】FLOATS0P1T1【或】FLOATP1S0T1【或】FLOATP1T1S0【或】FLOATT1P1S0【或】FLOATT1S0P1位置3WHILEFABST1E4【或】WHILE0000100001位置4PRINTF“PIFN“S4【或】PRINTF“PIFN“4S2位置1PRINTF“80F“F1【或】PRINTF“F“F1【或】PRINTF“?“F1位置2FI1III【或】FI2III【或】FI1III位置3F1F2位置4F2F33位置1LONGK1位置2SCANF“LD“位置3N10【或】NN104位置1SCANF“D“位置2FI1III【或】FI1III位置3S10T【或】SS10FLOATT【或】S10FLOATTS【或】SS10T【或】S10TS【或】S10FLOATT【或】S10DOUBLET【或】SS10DOUBLET【或】S10DOUBLETS5位置1SUM10【或】SUM1位置2S210【或】S21位置3FK4KKK【或】FK4KKK【或】FK41NKK6位置1T1【或】T10位置2TTJ【或】TJT【或】TJ位置3SST【或】STS【或】ST位置4PRINTF“JIECHENGFN“S四、1INTFUNINTNINTDS0
下載積分: 6 賞幣
上傳時(shí)間:2024-03-15
頁(yè)數(shù): 21
大?。?0.17(MB)
子文件數(shù):
-
簡(jiǎn)介:C語(yǔ)言語(yǔ)言知識(shí)點(diǎn)復(fù)習(xí)資料知識(shí)點(diǎn)復(fù)習(xí)資料總體上必須清楚的1程序中基本的控制結(jié)構(gòu)是三種順序結(jié)構(gòu)、選擇結(jié)構(gòu)分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。2讀程序都要從MAIN入口然后從最上面順序往下讀碰到循環(huán)做循環(huán)碰到選擇做選擇,有且只有一個(gè)MAIN函數(shù)。3計(jì)算機(jī)的數(shù)據(jù)在電腦中保存是以二進(jìn)制的形式數(shù)據(jù)存放的位置就是它的地址4BIT是位是指為0或者1。BYTE是指字節(jié)一個(gè)字節(jié)八個(gè)位5編譯預(yù)處理不是C語(yǔ)言的一部分,不占運(yùn)行時(shí)間,不要加分號(hào)。(??迹〥EFINEPI31415926這個(gè)寫法是錯(cuò)誤的,一定不能出現(xiàn)分號(hào)。6每個(gè)C語(yǔ)言程序中MAIN函數(shù)是有且只有一個(gè)。7用C語(yǔ)言編寫的程序稱為源程序,擴(kuò)展名是C。C程序必須經(jīng)過(guò)編輯、編譯、鏈接、運(yùn)行四個(gè)步驟才可得到運(yùn)行結(jié)果。注意C和OBJ文件時(shí)無(wú)法運(yùn)行的,只有EXE文件才可以運(yùn)行。(??迹?C語(yǔ)言書寫格式是自由的,每行可以寫多個(gè)語(yǔ)句,進(jìn)制來(lái)進(jìn)行處理。(考過(guò)兩次)C語(yǔ)言中的八進(jìn)制規(guī)定要以0開頭。018的數(shù)值是非法的,八進(jìn)制是沒(méi)有8的。C語(yǔ)言中的十六進(jìn)制規(guī)定要以0X開頭。14實(shí)型常量小數(shù)的合法寫法C語(yǔ)言小數(shù)點(diǎn)兩邊有一個(gè)是零的話,可以不用寫。如10在C語(yǔ)言中可寫成1,01在C語(yǔ)言中可以寫成1??茖W(xué)計(jì)數(shù)法的合法形式考試口訣E前E后必有數(shù),E后必為整數(shù)。如2333E1就是合法的,且數(shù)據(jù)是2333101。15字符常量單引號(hào)‘’注意轉(zhuǎn)義字符P2601)字符數(shù)據(jù)的合法形式1是字符占一個(gè)字節(jié),“1“是字符串占兩個(gè)字節(jié)含有一個(gè)結(jié)束符號(hào)。0的II數(shù)值表示為48,A的II數(shù)值是97,A的II數(shù)值是65。一般考試表示單個(gè)字符錯(cuò)誤的形式65“1“大寫字母和小寫字母轉(zhuǎn)換的方法A32A相互之間一般是相差32。
下載積分: 8 賞幣
上傳時(shí)間:2024-03-12
頁(yè)數(shù): 29
大小: 0.14(MB)
子文件數(shù):
-
簡(jiǎn)介:C語(yǔ)言視頻教程下載2015全套C語(yǔ)言全套視頻教程C語(yǔ)言入門,C語(yǔ)言視頻教程的在線學(xué)習(xí)相關(guān)課件軟件的下載,知識(shí)點(diǎn)講解入門是您學(xué)習(xí)C語(yǔ)言程序設(shè)計(jì)教程的最佳選擇。1第一講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)進(jìn)制轉(zhuǎn)換包含知識(shí)點(diǎn)進(jìn)制定義、程序開發(fā)中常用進(jìn)制介紹、N進(jìn)制轉(zhuǎn)換10進(jìn)制、10進(jìn)制轉(zhuǎn)換N進(jìn)制。2第二講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)數(shù)據(jù)類型、運(yùn)算符數(shù)據(jù)類型分類、常量、變量、運(yùn)算符、表達(dá)式、語(yǔ)句、輸入輸出函數(shù)。3第三講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)分支結(jié)構(gòu)IF程序結(jié)構(gòu)概述、關(guān)系運(yùn)算符、邏輯運(yùn)算符、IF的三種形式、條件運(yùn)算符。4第四講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)分支結(jié)構(gòu)SWITCHCASESWITCHCASE,IF與SWITCHCASE區(qū)別,BREAK關(guān)鍵字5第五講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)循環(huán)結(jié)構(gòu)12第十二講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)函數(shù)嵌套形參、實(shí)參、數(shù)組名作為函數(shù)參數(shù),函數(shù)嵌套調(diào)用,遞歸函數(shù),變量作用域。13第十三講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)結(jié)構(gòu)體結(jié)構(gòu)體特點(diǎn)、結(jié)構(gòu)體定義、結(jié)構(gòu)體變量、TYPEDEF關(guān)鍵字、結(jié)構(gòu)體成員訪問(wèn),結(jié)構(gòu)體使用。14第十四講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)結(jié)構(gòu)體與數(shù)組混合使用結(jié)構(gòu)體嵌套結(jié)構(gòu)體、結(jié)構(gòu)體作為數(shù)組成員、結(jié)構(gòu)體數(shù)組冒泡排序。15第十五講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)指針初級(jí)內(nèi)存的兩種方式、指針、指針變量、指針的類型、指針的重指向16第十六講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)指針作為函數(shù)參數(shù)指針的賦值、指針作為函數(shù)參數(shù)、傳值與傳址17第十七講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)結(jié)構(gòu)體指針結(jié)構(gòu)體指針、結(jié)構(gòu)體成員的訪問(wèn)18第十八講IOS開發(fā)必備之C語(yǔ)言基礎(chǔ)數(shù)組作為函數(shù)參數(shù)
下載積分: 5 賞幣
上傳時(shí)間:2024-03-12
頁(yè)數(shù): 5
大?。?0.28(MB)
子文件數(shù):
-
簡(jiǎn)介:東大19秋學(xué)期C語(yǔ)言及程序設(shè)計(jì)在線作業(yè)1試卷總分100得分100一、單選題共15道試題共75分1以下能對(duì)二維數(shù)組A進(jìn)行正確初始化的語(yǔ)句是()。AINTA2101523B“INTA3123456“C“INTA24123456“D“INTA310111“正確答案B2071052的結(jié)果是()A32B16C23D22正確答案A3當(dāng)正常執(zhí)行了文件關(guān)閉操作時(shí),F(xiàn)CLOSE函數(shù)的返回值是()。A1B隨機(jī)值C0D1正確答案C4下列四組選項(xiàng)中,均不是C語(yǔ)言關(guān)鍵字的選項(xiàng)是。ADEFINEIFTYPEBGETCPRINTFCINCLUDESCANFCASEDWHILEGOPOW正確答案A5C語(yǔ)言中的構(gòu)造類型數(shù)據(jù)包括()A數(shù)組類型、構(gòu)造體類型和共用體類型B數(shù)組類型、結(jié)構(gòu)體類型和指針類型C數(shù)組類型、結(jié)構(gòu)體類型和枚舉類型D數(shù)組類型、結(jié)構(gòu)體類型和空類型正確答案A6下列關(guān)于SWITCH語(yǔ)句和BREAK語(yǔ)句的結(jié)論中,只有()是正確的。DHDYD正確答案C12在C語(yǔ)言中,一維數(shù)組的定義方式為類型說(shuō)明符數(shù)組名()。A常量表達(dá)式B整型表達(dá)式C整型常量或整型表達(dá)式D整型常量正確答案A13對(duì)于條件表達(dá)式(M)AA其中的表達(dá)式M等價(jià)于()。AM0BM1CM0DM1正確答案C14下面程序的輸出是()。MAININTX10Y3PRINTF“DN”YXYA0B1C3D不確定的值正確答案B15為了避免嵌套的條件語(yǔ)句IFELSE的二義性,C語(yǔ)言規(guī)定ELSE與()是正確的。A縮排位置相同的IFB其之前最近的IFC其之后IFD同一行上的IF正確答案B二、判斷題共5道試題共25分1聲明語(yǔ)句INTA0可以對(duì)一維數(shù)組A進(jìn)行正確初始化。A錯(cuò)誤B正確正確答案B2已知INTA1234YP則執(zhí)行語(yǔ)句YP變量Y的值是3。
下載積分: 5 賞幣
上傳時(shí)間:2024-03-15
頁(yè)數(shù): 4
大?。?0.02(MB)
子文件數(shù):
-
簡(jiǎn)介:棧和隊(duì)列,棧的定義和基本運(yùn)算/順序棧/鏈棧/隊(duì)列的定義和基本運(yùn)算/順序隊(duì)列/鏈?zhǔn)疥?duì)列/實(shí)訓(xùn),唐懿芳,數(shù)據(jù)結(jié)構(gòu)與算法,,目錄,CONTENTS,,,棧的定義和基本運(yùn)算,1、棧的定義2、棧的基本運(yùn)算,01,數(shù)據(jù)結(jié)構(gòu)與算法,第一節(jié)棧的定義和基本運(yùn)算,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,生活中的棧與隊(duì)列棧和隊(duì)列是特殊的線性表?xiàng)Ec隊(duì)列的特征LIFOLASTINFIRSTOUTFIFOFIRSTINFIRSTOUT,棧的定義,堆棧簡(jiǎn)稱為棧,是限定只能在表的一端進(jìn)行插入和刪除操作的線性表。在表中,允許插入和刪除的一端稱作“棧頂”,另一端稱作“棧底”。通常將元素插入棧頂?shù)牟俜Q作為“入?!保ㄟM(jìn)?;驂簵#?,稱刪除棧頂元素的操作為“出?!?棧底,棧頂,入棧,出棧,圖31堆棧,,,,,A1,A2,AN,,,,第一節(jié)棧的定義和基本運(yùn)算,棧的基本運(yùn)算,堆棧的基本運(yùn)算如下。1STACKINIT初始化堆棧。2STACKEMPTYS判定棧S是否為空。3STACKLENGTHS求堆棧S的長(zhǎng)度。4GETTOPS獲取棧頂元素的值。5PUSHS,E將元素E進(jìn)棧。6POPS,出棧(刪除棧頂元素)。,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,第一節(jié)棧的定義和基本運(yùn)算,棧的存儲(chǔ)結(jié)構(gòu),兩種存儲(chǔ)結(jié)構(gòu)1順序棧采用順序結(jié)構(gòu)存儲(chǔ)2鏈棧采用鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ),數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,,順序棧,1、順序棧的存儲(chǔ)結(jié)構(gòu)3、順序棧的案例2、順序棧的基本運(yùn)算,02,數(shù)據(jù)結(jié)構(gòu)與算法,第二節(jié)順序棧,順序棧的存儲(chǔ)結(jié)構(gòu),,MAXSIZE1,DEFINEMAXSIZE堆??赡苓_(dá)到的最大長(zhǎng)度TYPEDEFSTRUCT{ELEMENTTYPEELEMMAXSIZEINTTOP/棧頂位置/}SEQSTACK,棧底,棧頂,,,,,A0,A1,AN1,,,備用空間,棧滿和??盏臈l件是什么,棧滿TOPMAXSIZE1??誘OP1,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,SEQSTACKSTACKINIT{SEQSTACKSSTOP1RETURNS},,順序棧的基本運(yùn)算,,初始化堆棧STACKINIT,,,INTSTACKEMPTYSEQSTACKS{RETURNSTOP1},,判定棧S是否為空STACKEMPTYS,,,INTSTACKLENGTHSEQSTACKS{RETURNSTOP1},,求堆棧S的長(zhǎng)度STACKLENGTHS,,,ELEMENTTYPEGETTOPSEQSTACKS{IFSTACKEMPTYS/空棧/RETURNNILRETURNSELEMSTOP},,獲取棧頂元素的值GETTOPS,,,VOIDPUSHSEQSTACKS,ELEMENTTYPEE{IFSTOPMAXSIZE1/棧滿/PRINTF“FULL”ELSE{STOPSELEMSTOPE}},,進(jìn)棧PUSHS,E,,,ELEMENTTYPEPOPSEQSTACKS{IFSTOP1/???RETURNNIL/返回空值/ELSE{ESELEMSTOPSTOPRETURNE}},,出棧POPS,,第二節(jié)順序棧,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,順序棧案例1,【例1】假設(shè)有兩個(gè)棧共享一個(gè)一維數(shù)組空間0,MAXSIZE-1,其中一個(gè)棧用數(shù)組的第0單元(元素)作為棧底,另一棧用數(shù)組的第MAXSIZE-1號(hào)單元(元素)作為棧底(即兩個(gè)堆棧從兩端向中間延伸),其對(duì)應(yīng)的類型描述如下DEFINEMAXSIZE堆??赡苓_(dá)到的最大長(zhǎng)度TYPEDEFSTRUCT{ELEMENTTYPEELEMMAXSIZEINTTOP1,TOP2/棧頂位置/}SHARESTACK,第二節(jié)順序棧,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,順序棧案例2,,則棧1的棧頂表示為STOP1,棧2的棧頂表示為STOP2棧1的進(jìn)棧操作使得棧頂1右(后)移,即STOP1,棧2進(jìn)棧操作使得棧頂2左(前)移,即STOP1棧滿時(shí)兩個(gè)棧頂相鄰,即STOP11==STOP2。,圖32共享堆棧,,,,,,,,棧1,,,棧頂2,,A1,AN,B1,BM,棧2,棧底1,,棧底2,0,,MAXSIZE1,,棧頂1,第二節(jié)順序棧,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,順序棧案例3進(jìn)棧,,VOIDPUSHSHARESTACKS,ELEMENTTYPEE,INTI/將元素E壓入棧II1,2/{IFSTOP11STOP2/棧滿/PRINTF“FULL”ELSE{IFI1{STOP1SELEMSTOP1E}ELSE{STOP2SELEMSTOP2E}}},第二節(jié)順序棧,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,順序棧案例4出棧,,ELEMENTTYPEPOPSHARESTACKS,INTI/棧II1,2出棧/{IFI1IFSTOP11/棧1空/RETURNNILELSE{ESELEMSTOP1STOP1RETURNE}IFI2IFSTOP2MAXSIZE/棧2空/RETURNNILELSE{ESELEMSTOP2STOP2RETURNE}},第二節(jié)順序棧,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,,鏈棧,1、棧的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)2、鏈棧的基本運(yùn)算,03,數(shù)據(jù)結(jié)構(gòu)與算法,第三節(jié)鏈棧,鏈棧的存儲(chǔ)結(jié)構(gòu),,DEFINEMAX_SIZE100//設(shè)置最大元素個(gè)數(shù)TYPEDEFINTELEMTYPETYPEDEFSTRUCTSNODE{ELEMENTTYPEDATASTRUCTSNODENEXT}STACKNODETYPEDEFSTACKNODELINKSTACK/LINKSTACK為指向STACKNODE的指針類型/,,圖36鏈棧,棧頂,,,,,,,,,,,A1,AN,AN1,棧底,DATA,NEXT,Λ,S,,,,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,第三節(jié)鏈棧,鏈棧的基本操作,,1.棧初始化棧的初始化實(shí)現(xiàn)比較簡(jiǎn)單,算法如下LINKSTACKSTACKINIT{LINKSTACKSLINKSTACKMALLOCSIZEOFSTACKNODESNEXT0RETURNS}/STACKINIT/2.判斷棧是否為空在判斷棧是否為空時(shí),只需將棧頂指針SNEXT值與NULL相比即可,算法實(shí)現(xiàn)如下INTSTACKEMPTYLINKSTACKS{RETURNSNEXTNULL}/STACKEMPTY/,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,第三節(jié)鏈棧,鏈棧的基本操作,,3.求棧的長(zhǎng)度INTSTACKLENGTHLINKSTACKS{LINKSTACKPSNEXTINTLENGTH0WHILEP{LENGTHPPNEXT}RETURNLENGTH}/STACKLENGTH/4.進(jìn)棧操作//插入元素E為新的棧頂元素VOIDPUSHLINKSTACKS,INTE{LINKSTACKPSTACKNODEMALLOCSIZEOFSTACKNODEPDATAEPNEXTSNEXT//如圖②把當(dāng)前的棧頂元素賦值給新結(jié)點(diǎn)的直接后繼SNEXTP//如圖③將新的結(jié)點(diǎn)P賦值給棧頂指針}/PUSH/,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,第三節(jié)鏈棧,鏈棧的基本操作,,5.出棧操作//若棧不空,則刪除棧頂元素,用E返回值INTPOPLINKSTACKS{IFSTACKEMPTYS/???RETURNNIL/返回空值/ELSE{LINKSTACKPSNEXT/如圖①將棧頂結(jié)點(diǎn)賦值給P/INTE0SNEXTPNEXT/如圖②使得棧頂指針下移1位,指向后一結(jié)點(diǎn)/EPDATAFREEP/釋放結(jié)點(diǎn)P/RETURNE}}/POP/,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,第三節(jié)鏈棧,鏈棧的基本操作,,6.獲取棧頂元素根據(jù)棧頂指針S,可以直接獲取最后入棧的元素。應(yīng)該注意的是,在進(jìn)行讀取之前,也要進(jìn)行??諜z查。相關(guān)的算法實(shí)現(xiàn)如下INTGETTOPLINKSTACKS{IFSTACKEMPTYSRETURNNILRETURNSNEXTDATA}/GETTOP/,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,,隊(duì)列,1、隊(duì)列的定義3、隊(duì)列的存儲(chǔ)結(jié)構(gòu)2、隊(duì)列的基本運(yùn)算,04,數(shù)據(jù)結(jié)構(gòu)與算法,第4節(jié)隊(duì)列,隊(duì)列的定義,,隊(duì)列簡(jiǎn)稱為隊(duì),是限定只能在表的一端作插入運(yùn)算、在另一端作刪除運(yùn)算的線性表;在表中,允許插入的一端稱作“隊(duì)尾”,允許刪除的另一端稱作“隊(duì)首”(或“隊(duì)頭”);通常將元素插入隊(duì)尾的操作稱作為入隊(duì)列(或入隊(duì)),稱刪除隊(duì)首元素的操作為出隊(duì)列(或出隊(duì))。,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,第4節(jié)隊(duì)列,隊(duì)列的基本運(yùn)算,,,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,隊(duì)列的基本運(yùn)算如下。1INITQUEUE初始化隊(duì)列。2QUEUEEMPTYQ判定隊(duì)列Q是否為空。3QUEUELENGTHQ求隊(duì)列Q的長(zhǎng)度。GETHEADQ獲取隊(duì)列Q隊(duì)首元素的值。5ADDQUEUEQ,E將元素E入隊(duì)。6DELETEQUEUEQ刪除隊(duì)首元素。,第4節(jié)隊(duì)列,隊(duì)列的存儲(chǔ)結(jié)構(gòu),,兩種結(jié)構(gòu)1順序隊(duì)列采用順序結(jié)構(gòu)存儲(chǔ)2鏈?zhǔn)疥?duì)列采用鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ),數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,,順序隊(duì)列,1、隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)2、順序隊(duì)列的基本運(yùn)算,05,數(shù)據(jù)結(jié)構(gòu)與算法,第5節(jié)順序隊(duì)列,隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)1,,DEFINEMAXSIZEN隊(duì)列可能達(dá)到的最大長(zhǎng)度NTYPEDEFSTRUCT{ELEMENTTYPEELEMMAXSIZEINTFRONT,REAR/隊(duì)首、隊(duì)尾指示器/}QUEUE,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,第5節(jié)順序隊(duì)列,隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)2,,,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,,,,圖312隊(duì)列操作,,,,,,,,,,,,,A,B,C,E,REAR4,,,,,,,D,FRONT1,,,,,B,C,E,REAR4,,,,,,,D,FRONT0,,,,,FRONTREAR4,,,,,,FRONTREAR1,,A空隊(duì),BA,B,C,D,E入隊(duì),C出隊(duì)1次,D出隊(duì)4次,隊(duì)滿和隊(duì)空的條件是什么,隊(duì)空FRONTREAR隊(duì)滿REARMAXSIZE1,,第5節(jié)順序隊(duì)列,隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)3,,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,當(dāng)REARMAXSIZE1時(shí),隊(duì)列為滿,如果再加入新元素,就會(huì)產(chǎn)生“溢出“。但是這種“溢出“并不是真正的溢出,在數(shù)組的前端還可能有空位置,所以這是一種假溢出。,,,,,,,B,C,E,REAR4,,,,,,,D,FRONT0,,,,,FRONTREAR4,,,,,,,解決方法循環(huán)隊(duì)列,第5節(jié)順序隊(duì)列,隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)4,,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,為了能夠充分的使用數(shù)組中的存儲(chǔ)空間,把數(shù)組的前端和后端連接起來(lái),形成一個(gè)環(huán)形的表,即把存儲(chǔ)隊(duì)列元素的表從邏輯上看成一個(gè)環(huán),成為循環(huán)隊(duì)列(CIRCULARQUEUE)。,FRONT,,,,,FRONT,REAR,FRONT,REAR,A,,,FRONT,REAR,B,C,D,,,FRONT,REAR,A,B,C,D,,,FRONT,REAR,A,B,C,,,REAR,A空隊(duì)列,BA入隊(duì)列,CB,C入隊(duì)列,DD入隊(duì)列(隊(duì)滿),E出隊(duì)1次,F出隊(duì)3次(隊(duì)空),隊(duì)頭指針進(jìn)1FRONTFRONT1MAXSIZE;隊(duì)尾指針進(jìn)1REARREAR1MAXSIZE;,第5節(jié)順序隊(duì)列,隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)4,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,以下是隊(duì)空的幾種情況,初始化時(shí)FRONTREAR0循環(huán)隊(duì)列為空的條件是FRONTREAR,,,FRONT,REAR,A空隊(duì)列,FRONT,,,REAR,F出隊(duì)3次(隊(duì)空),FRONT0REAR0,FRONT4REAR4,第5節(jié)順序隊(duì)列,隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)4,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,循環(huán)隊(duì)列為滿的條件是FRONTREAR1MAXSIZE,,,FRONT,REAR,A,B,C,D,以下是隊(duì)滿的幾種情況,FRONT0REAR4,,,FRONT,REAR,A,B,C,D,FRONT3REAR2,,,FRONT,REAR,B,C,D,A,FRONT1REAR0,第5節(jié)順序隊(duì)列,順序隊(duì)列的基本運(yùn)算1,1)、初始化隊(duì)列INITQUEUECIRQUEUEINITQUEUE{CIRQUEUEQQFRONTQREAR0RETURNQ}2)、判定隊(duì)列Q是否為空QUEUEEMPTYQINTQUEUEEMPTYCIRQUEUEQ{RETURNQFRONTQREAR},數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,第5節(jié)順序隊(duì)列,順序隊(duì)列的基本運(yùn)算2,3、求隊(duì)列Q的長(zhǎng)度QUEUELENGTHQINTQUEUELENGTHCIRQUEUEQ{RETURNQREARMAXSIZEQFRONTMAXSIZE},數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,,FRONT,REAR,A,B,C,FRONT0REAR3,,,FRONT,REAR,A,B,C,D,FRONT3REAR2,第5節(jié)順序隊(duì)列,順序隊(duì)列的基本運(yùn)算3,4、獲取隊(duì)列Q隊(duì)首元素的值GETHEADQELEMENTTYPEGETHEADCIRQUEUEQ{IFQUEUEEMPTYQRETURN1RETURNQELEMQFRONT1MAXSIZE},數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,,FRONT,REAR,,,FRONT,REAR,A,B,C,FRONT0REAR3,,,FRONT,REAR,A,B,D,FRONT4REAR2,第5節(jié)順序隊(duì)列,順序隊(duì)列的基本運(yùn)算4,5、ADDQUEUEQ,E將元素E入隊(duì)VOIDADDQUEUECIRQUEUEQ,ELEMENTTYPEE{IFQFRONTQREAR1MAXSIZEPRINTF“\NFULL“ELSE{QREARQREAR1MAXSIZEQELEMQREARE}},數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,6、DELETEQUEUEQ刪除隊(duì)首元素ELEMENTTYPEDELETEQUEUECIRQUEUEQ{ELEMENTTYPEEIFQFRONTQREARRETURN1ELSE{EQELEMQFRONT1MAXSIZEQFRONTQFRONT1MAXSIZERETURNE}},,,鏈?zhǔn)疥?duì)列,1、鏈?zhǔn)疥?duì)列的存儲(chǔ)結(jié)構(gòu)2、鏈?zhǔn)疥?duì)列的基本運(yùn)算,06,數(shù)據(jù)結(jié)構(gòu)與算法,第6節(jié)鏈?zhǔn)疥?duì)列,鏈?zhǔn)疥?duì)列的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,361隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),隊(duì)首指針FRONT,圖316鏈隊(duì)列,,,隊(duì)尾指針REAR,,,,Λ,,,,,A2,A1,AN,ΛΛ,頭結(jié)點(diǎn),,,隊(duì)首指針FRONT,隊(duì)尾指針REAR,B非空鏈隊(duì)列,A空鏈隊(duì)列,第6節(jié)鏈?zhǔn)疥?duì)列,鏈?zhǔn)疥?duì)列的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,TYPEDEFSTRUCTQNODE{ELEMENTTYPEDATA//結(jié)點(diǎn)數(shù)據(jù)域STRUCTQNODENEXT//結(jié)點(diǎn)指針域}QUEUENODETYPEDEFSTRUCT{QUEUENODEFRONT,REAR//隊(duì)首和隊(duì)尾指針}LINKQUEUE,第6節(jié)鏈?zhǔn)疥?duì)列,鏈?zhǔn)疥?duì)列的基本操作,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,1.隊(duì)列初始化。隊(duì)列的初始化實(shí)現(xiàn)比較簡(jiǎn)單,算法如下LINKQUEUEINITQUEUE{QUEUENODEPLINKQUEUEQPQUEUENODEMALLOCSIZEOFQUEUENODEPNEXTNULLQFRONTQREARPRETURNQ},2判斷隊(duì)列是否為空INTQUEUEEMPTYLINKQUEUEQ{RETURNQFRONTQREAR},第6節(jié)鏈?zhǔn)疥?duì)列,鏈?zhǔn)疥?duì)列的基本操作,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,3.獲取隊(duì)首元素ELEMENTTYPEGETHEADLINKQUEUEQ{IFQUEUEEMPTYQRETURNNILRETURNQFRONTNEXTDATA},第6節(jié)鏈?zhǔn)疥?duì)列,鏈?zhǔn)疥?duì)列的基本操作,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,4入隊(duì)操作//插入元素E為Q的新的隊(duì)尾元素VOIDADDQUEUELINKQUEUEQ,ELEMENTTYPEE{QUEUENODEPPQUEUENODEMALLOCSIZEOFQUEUENODEIFP{PRINTF“存儲(chǔ)分配失敗\N”RETURN}PDATAEPNEXTNULLQREARNEXTP//把擁有元素E新結(jié)點(diǎn)P賦值給原隊(duì)尾結(jié)點(diǎn)的后繼QREARP//把當(dāng)前的P設(shè)置為隊(duì)尾結(jié)點(diǎn),REAR指向P},第6節(jié)鏈?zhǔn)疥?duì)列,鏈?zhǔn)疥?duì)列的基本操作,數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,5.出隊(duì)操作//若隊(duì)列不空,刪除Q的隊(duì)頭元素,用E返回其值ELEMENTTYPEDELETEQUEUELINKQUEUEQ{IFQUEUEEMPTYQRETURN1ELSE{ELEMENTTYPEEQUEUENODEPPQFRONTNEXT//將欲刪除的隊(duì)頭結(jié)點(diǎn)暫存給PQFRONTNEXTPNEXT//將原隊(duì)頭結(jié)點(diǎn)后繼賦值給頭結(jié)點(diǎn)后繼EPDATA//將欲刪除的隊(duì)頭結(jié)點(diǎn)的值賦值給EIFPQREARQREARQFRONTFREEPRETURNE}},,,本章實(shí)訓(xùn),07,數(shù)據(jù)結(jié)構(gòu)與算法,,,約瑟夫環(huán)的實(shí)現(xiàn)(P58),,鏈?zhǔn)疥?duì)列分隊(duì)簡(jiǎn)單實(shí)現(xiàn),順序共享?xiàng)5暮?jiǎn)單實(shí)現(xiàn),,棧和隊(duì)列,,,,,實(shí)訓(xùn)1,實(shí)訓(xùn)3,實(shí)訓(xùn)2,,,第七節(jié)實(shí)訓(xùn),數(shù)據(jù)結(jié)構(gòu)與運(yùn)算,,,THANKS,,完,數(shù)據(jù)結(jié)構(gòu)與算法,
下載積分: 4 賞幣
上傳時(shí)間:2024-01-07
頁(yè)數(shù): 44
大?。?1.62(MB)
子文件數(shù):
-
簡(jiǎn)介:唐懿芳,數(shù)據(jù)結(jié)構(gòu)與算法C語(yǔ)言和JAVA語(yǔ)言描述,,01學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的意義,02數(shù)據(jù)結(jié)構(gòu)的基本概念,03算法及其描述,針對(duì)實(shí)際問(wèn)題,編寫出一個(gè)高效率的處理程序,就需要解決如何合理地組織數(shù)據(jù),建立合適的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)較好的算法,來(lái)提高程序執(zhí)行效率這樣的問(wèn)題。數(shù)據(jù)結(jié)構(gòu)和算法就是在此背景下形成和發(fā)展起來(lái)的。,,簡(jiǎn)而言之,軟件開發(fā)要多動(dòng)腦筋、想到好的解決辦法才能更快更好地編寫出效率更高的程序。數(shù)據(jù)結(jié)構(gòu)和算法這門課程的目的正是使學(xué)生更快地編寫出更高效的程序。,后兩個(gè)條件比較容易實(shí)現(xiàn),而第一個(gè)條件則需要花很多時(shí)間和精力才能夠達(dá)到,而它恰恰是區(qū)分程序設(shè)計(jì)人員水平高低的一個(gè)重要標(biāo)志。數(shù)據(jù)結(jié)構(gòu)貫穿程序設(shè)計(jì)的始終,缺乏數(shù)據(jù)結(jié)構(gòu)和算法的功底,很難設(shè)計(jì)出高水平的具有專業(yè)水準(zhǔn)的應(yīng)用程序。瑞士著名的計(jì)算機(jī)科學(xué)家尼古拉斯沃思(NIKLAUSWIRTH)提出了“算法數(shù)據(jù)結(jié)構(gòu)程序”的觀點(diǎn),這正說(shuō)明了數(shù)據(jù)結(jié)構(gòu)的重要性。,即使是在廣泛采用可視化程序設(shè)計(jì)的今天,借助于集成開發(fā)環(huán)境可以很快地生成程序,但要想成為一個(gè)專業(yè)的程序開發(fā)人員,至少需要以下三個(gè)條件(1)能夠熟練地選擇和設(shè)計(jì)各種業(yè)務(wù)邏輯的數(shù)據(jù)結(jié)構(gòu)和算法。(2)至少能夠熟練地掌握一門程序設(shè)計(jì)語(yǔ)言。(3)熟知所涉及的相關(guān)應(yīng)用領(lǐng)域知識(shí)。,,111引言,2邏輯結(jié)構(gòu)的延伸及基本算法3物理結(jié)構(gòu)4運(yùn)算集合(基本操作),1邏輯結(jié)構(gòu)1線性結(jié)構(gòu)。結(jié)構(gòu)中的數(shù)據(jù)元素之間存在著一對(duì)一的線性關(guān)系。2樹結(jié)構(gòu)。結(jié)構(gòu)中的數(shù)據(jù)元素之間存在著一對(duì)多的層次關(guān)系。3圖結(jié)構(gòu)。結(jié)構(gòu)中的數(shù)據(jù)元素之間存在著多對(duì)多的任意關(guān)系。,,112數(shù)據(jù)結(jié)構(gòu)研究什么,線性結(jié)構(gòu)除第一個(gè)和最后一個(gè)數(shù)據(jù)元素外,每個(gè)數(shù)據(jù)元素只有一個(gè)前驅(qū)和一個(gè)后繼數(shù)據(jù)元素。,樹結(jié)構(gòu)除根結(jié)點(diǎn)外,每個(gè)數(shù)據(jù)元素只有一個(gè)前驅(qū)數(shù)據(jù)元素,可有0個(gè)或若干個(gè)后繼數(shù)據(jù)元素。,圖結(jié)構(gòu)每個(gè)數(shù)據(jù)元素可有0個(gè)或若干個(gè)前驅(qū)數(shù)據(jù)元素和0個(gè)或若干個(gè)后繼數(shù)據(jù)元素。,,01學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的意義,02數(shù)據(jù)結(jié)構(gòu)的基本概念,03算法及其描述,例如,學(xué)生信息可包括學(xué)生的學(xué)號(hào)、姓名、性別、年齡等數(shù)據(jù)。這些數(shù)據(jù)構(gòu)成學(xué)生情況的描述的數(shù)據(jù)項(xiàng);包括學(xué)號(hào)、姓名、性別、年齡等數(shù)據(jù)項(xiàng)的一組數(shù)據(jù)就構(gòu)成學(xué)生信息的一個(gè)數(shù)據(jù)元素。,數(shù)據(jù)人們利用文字符號(hào)、數(shù)字符號(hào)以及其他規(guī)定的符號(hào)對(duì)現(xiàn)實(shí)世界的事物及其活動(dòng)所做的抽象描述。數(shù)據(jù)元素表示一個(gè)事物的一組數(shù)據(jù)。數(shù)據(jù)項(xiàng)構(gòu)成數(shù)據(jù)元素的數(shù)據(jù)。抽象數(shù)據(jù)元素沒(méi)有實(shí)際含義的數(shù)據(jù)元素。抽象數(shù)據(jù)元素的數(shù)據(jù)類型沒(méi)有確切定義的數(shù)據(jù)類型。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)元素之間的相互聯(lián)系方式。數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)元素在計(jì)算機(jī)中的存儲(chǔ)方式。數(shù)據(jù)的操作對(duì)一種數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行的某種處理。數(shù)據(jù)的操作集合對(duì)一種數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行的所有操作。,基本術(shù)語(yǔ),順序存儲(chǔ)結(jié)構(gòu)把數(shù)據(jù)元素存儲(chǔ)在一塊連續(xù)地址空間的內(nèi)存中,其特點(diǎn)是邏輯上相鄰的數(shù)據(jù)元素在物理上也相鄰,數(shù)據(jù)間的邏輯關(guān)系表現(xiàn)在數(shù)據(jù)元素存儲(chǔ)位置關(guān)系上。,指針是指向物理存儲(chǔ)單元地址的變量。由數(shù)據(jù)元素域和指針域組成的一個(gè)結(jié)構(gòu)體稱為結(jié)點(diǎn)。,鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)使用指針把相互直接關(guān)聯(lián)的結(jié)點(diǎn)即直接前驅(qū)結(jié)點(diǎn)或直接后繼結(jié)點(diǎn)鏈接起來(lái),其特點(diǎn)是邏輯上相鄰的數(shù)據(jù)元素在物理上不一定相鄰,數(shù)據(jù)間的邏輯關(guān)系表現(xiàn)在結(jié)點(diǎn)的鏈接關(guān)系上。,順序存儲(chǔ)結(jié)構(gòu),鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),從抽象角度,數(shù)據(jù)的操作主要討論某種數(shù)據(jù)類型數(shù)據(jù)應(yīng)具備的操作的邏輯功能,抽象角度下的操作一般和數(shù)據(jù)的邏輯結(jié)構(gòu)一起討論;,具體來(lái)說(shuō),數(shù)據(jù)的操作主要討論操作的具體實(shí)現(xiàn)算法。具體問(wèn)題的操作實(shí)現(xiàn)必須在數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)確定后才能進(jìn)行。,數(shù)據(jù)結(jié)構(gòu)課程主要討論線性表、堆棧、隊(duì)列、串、數(shù)組、樹、二叉樹、圖等典型的常用數(shù)據(jù)結(jié)構(gòu)。在討論這些典型數(shù)據(jù)結(jié)構(gòu)時(shí),主要從它們的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和數(shù)據(jù)操作三個(gè)方面進(jìn)行分析討論。,,01學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的意義,02數(shù)據(jù)結(jié)構(gòu)的基本概念,03算法及其描述,,算法是描述求解問(wèn)題方法的操作步驟集合。,文字形式用中文或英文這樣的文字來(lái)描述算法。偽碼形式用一種仿程序設(shè)計(jì)語(yǔ)言的語(yǔ)言來(lái)描述算法。程序設(shè)計(jì)語(yǔ)言形式用某種程序設(shè)計(jì)語(yǔ)言描述算法。其優(yōu)點(diǎn)是算法不用修改,直接作為程序語(yǔ)句鍵入計(jì)算機(jī),計(jì)算機(jī)能調(diào)用和運(yùn)行。,131算法的概念和特定,,算法是對(duì)特定問(wèn)題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個(gè)或多個(gè)操作。此外,一個(gè)算法還具有下列五個(gè)重要特性,有窮性確定性可行性輸入輸出,現(xiàn)在,品牌忠誠(chéng)度成為最熱門的詞,消費(fèi)者的“情感”被當(dāng)作品牌要攻陷的最后堡壘。于是品牌整合營(yíng)銷、客戶關(guān)系管理等成為了鞏固品牌的熱門手段,精耕細(xì)作、不盲目追求銷售量的提升速度是這個(gè)階段的特征。,132算法設(shè)計(jì)的要求,,算法設(shè)計(jì)的好壞關(guān)乎程序的執(zhí)行效率,算法設(shè)計(jì)必須滿足以下要求,正確性可讀性健壯性效率與低存儲(chǔ)量需求,現(xiàn)在,品牌忠誠(chéng)度成為最熱門的詞,消費(fèi)者的“情感”被當(dāng)作品牌要攻陷的最后堡壘。于是品牌整合營(yíng)銷、客戶關(guān)系管理等成為了鞏固品牌的熱門手段,精耕細(xì)作、不盲目追求銷售量的提升速度是這個(gè)階段的特征。,133算法的分析,,1算法效率的度量算法執(zhí)行的時(shí)間是其對(duì)應(yīng)的程序在計(jì)算機(jī)上運(yùn)行所消耗的時(shí)間。程序在計(jì)算機(jī)上運(yùn)行所需時(shí)間與下列因素有關(guān)算法本身選用的策略;書寫程序的語(yǔ)言;編譯產(chǎn)生的機(jī)器代碼質(zhì)量;機(jī)器執(zhí)行指令的速度;,133算法的分析,,2算法的時(shí)間復(fù)雜度可用算法中語(yǔ)句的執(zhí)行次數(shù)來(lái)度量一個(gè)算法的效率。語(yǔ)句頻度是指語(yǔ)句在一個(gè)算法中重復(fù)執(zhí)行的次數(shù)。以下給出了兩個(gè)NN階矩陣相乘算法中的各條語(yǔ)句以及每條語(yǔ)句的語(yǔ)句頻度。語(yǔ)句語(yǔ)句頻度FOR(I0;INI)N+1FOR(J0;JNJ)N2+N{CIJ0N2FORK0KNKN3+N2CIJCIJAIKBKJN3},133算法的分析,,所有語(yǔ)句的總執(zhí)行次數(shù)為TN2N33N22N1,即語(yǔ)句總的執(zhí)行次數(shù)是問(wèn)題的規(guī)模(矩陣的階)N的函數(shù)FN(TNFN)。上式是TNFN中忽略其系數(shù)的N的最高冪次項(xiàng),它表示隨問(wèn)題規(guī)模N的增大算法的執(zhí)行時(shí)間的增長(zhǎng)率和FN的增長(zhǎng)率相同,稱作算法的漸進(jìn)時(shí)間復(fù)雜度,簡(jiǎn)稱時(shí)間復(fù)雜度。如上算法的時(shí)間復(fù)雜度TNON3。算法中N的最高次冪項(xiàng)與算法中稱作原操作的語(yǔ)句的語(yǔ)句頻度對(duì)應(yīng),原操作是算法中實(shí)現(xiàn)基本運(yùn)算的操作,在上面的算法中的原操作是CIJCIJAIKBKJ。一般情況下原操作由最深層循環(huán)內(nèi)的語(yǔ)句實(shí)現(xiàn)。算法的時(shí)間復(fù)雜度記作TNOFN,133算法的分析,,TN隨N的增大而增大,增長(zhǎng)的越慢,其算法的時(shí)間復(fù)雜度越低。下列三個(gè)程序段中分別給出了原操作COUNT的三個(gè)不同數(shù)量級(jí)的時(shí)間復(fù)雜度。(1)COUNT;其時(shí)間復(fù)雜度為O1,稱之為常量階時(shí)間復(fù)雜度(2)FORI1INICOUNT其時(shí)間復(fù)雜度為ON,是線性階時(shí)間復(fù)雜度(3)FORI1INIFORJ1JNJCOUNT其時(shí)間復(fù)雜度為ON2,平方階時(shí)間復(fù)雜度此外,算法能呈現(xiàn)的時(shí)間復(fù)雜度還有對(duì)數(shù)階OLOG2N,指數(shù)階O2N等,133算法的分析,,常見(jiàn)的時(shí)復(fù)雜度O1常數(shù)階、ON線性階、ON2平方階、ON3立方階、O2N指數(shù)階、OLOG2N對(duì)數(shù)階與ONLOG2N。時(shí)間復(fù)雜度(從小到大排列)的比較如表12所示,133算法的分析,,3算法的空間復(fù)雜度采用空間復(fù)雜度作為算法所需存儲(chǔ)空間的量度,記作SNOFN其中N為問(wèn)題的規(guī)模。程序執(zhí)行時(shí),除了需存儲(chǔ)本身所用的指令,常數(shù),變量和輸入數(shù)據(jù)以外,還需要一些對(duì)數(shù)據(jù)進(jìn)行操作的輔助存儲(chǔ)空間。其中對(duì)于輸入數(shù)據(jù)所占的具體存儲(chǔ)量只取決于問(wèn)題本身,與算法無(wú)關(guān),這樣只需要分析該算法在實(shí)現(xiàn)時(shí)所需要的輔助空間單元數(shù)就可以了。,由于大部分算法的空間復(fù)雜度問(wèn)題不嚴(yán)重,并且算法的空間復(fù)雜度分析方法和算法的時(shí)間復(fù)雜度分析方法基本類同,所以一般數(shù)據(jù)結(jié)構(gòu)教材只討論算法的時(shí)間復(fù)雜度分析,不討論算法的空間復(fù)雜度分析。本教材后續(xù)各章也不再詳細(xì)討論算法的空間復(fù)雜度分析。,
下載積分: 4 賞幣
上傳時(shí)間:2024-01-06
頁(yè)數(shù): 23
大?。?0.35(MB)
子文件數(shù):
-
簡(jiǎn)介:第3章C51語(yǔ)言編程基礎(chǔ),1,內(nèi)容概要,目前單片機(jī)應(yīng)用設(shè)計(jì)與開發(fā),多使用C51語(yǔ)言來(lái)編程。C51語(yǔ)言是在標(biāo)準(zhǔn)C的基礎(chǔ)上,根據(jù)單片機(jī)存儲(chǔ)器硬件結(jié)構(gòu)及內(nèi)部資源,擴(kuò)展相應(yīng)的數(shù)據(jù)類型和變量,而在語(yǔ)法規(guī)定、程序結(jié)構(gòu)與設(shè)計(jì)方法上,都與標(biāo)準(zhǔn)C相同。本章介紹C51語(yǔ)言的基礎(chǔ)知識(shí)、對(duì)C51集成開發(fā)環(huán)境KEILΜVISION3以及單片機(jī)虛擬仿真平臺(tái)PROTEUS也作以介紹。,2,在單片機(jī)應(yīng)用開發(fā)中,軟件編程占有非常重要的地位。要求編程人員在短時(shí)間內(nèi)編寫出執(zhí)行效率高、運(yùn)行可靠的程序代碼。同時(shí),由于實(shí)際系統(tǒng)的日趨復(fù)雜,對(duì)程序的可讀性、升級(jí)與維護(hù)以及模塊化的要求越來(lái)越高,以方便多個(gè)工程師協(xié)同開發(fā)。C51語(yǔ)言是近年來(lái)在國(guó)內(nèi)外的51單片機(jī)開發(fā)中,普遍使用的一種程序設(shè)計(jì)語(yǔ)言。C51能直接對(duì)單片機(jī)硬件進(jìn)行操作,既有高級(jí)語(yǔ)言的特點(diǎn),又有匯編語(yǔ)言的特點(diǎn),因此在單片機(jī)應(yīng)用的程序設(shè)計(jì)中,得到非常廣泛的使用。,31編程語(yǔ)言KEILC51簡(jiǎn)介KEILC51簡(jiǎn)稱C51,是在標(biāo)準(zhǔn)C語(yǔ)言的基礎(chǔ)上發(fā)展的。311KEILC51簡(jiǎn)介KEILC51語(yǔ)言是在標(biāo)準(zhǔn)C的基礎(chǔ)上針對(duì)51單片機(jī)的硬件特點(diǎn)進(jìn)行的擴(kuò)展,并向51單片機(jī)上移植,經(jīng)多年努力,C51語(yǔ)言已成為公認(rèn)的高效、簡(jiǎn)潔的51單片機(jī)的實(shí)用高級(jí)編程語(yǔ)言。與匯編語(yǔ)言相比,用C51語(yǔ)言進(jìn)行軟件開發(fā),有如下優(yōu)點(diǎn)(1)可讀性好。C51語(yǔ)言程序比匯編語(yǔ)言程序的可讀性好,因而編程效率高,程序便于修改、維護(hù)以及程序升級(jí)。,4,(2)模塊化開發(fā)與資源共享。C51開發(fā)的模塊可直接被其他項(xiàng)目所用,能很好地利用已有的標(biāo)準(zhǔn)C程序資源與豐富的庫(kù)函數(shù),減少重復(fù)勞動(dòng),也有利于多個(gè)工程師的協(xié)同開發(fā)。(3)可移植性好。為某型單片機(jī)開發(fā)的C51程序,只需將與硬件相關(guān)之處和編譯鏈接的參數(shù)進(jìn)行適當(dāng)修改,就可方便地移植到其它型號(hào)的單片機(jī)上。例如,為51單片機(jī)編寫的程序通過(guò)改寫頭文件以及少量的程序行,就可以方便地移植到PIC單片機(jī)上。(4)生成的代碼效率高。代碼效率比直接使用匯編語(yǔ)言低20左右,如使用優(yōu)化編譯選項(xiàng),最高可達(dá)90左右,效果會(huì)更好。,5,312C51與標(biāo)準(zhǔn)C的比較C51標(biāo)準(zhǔn)C語(yǔ)言有許多相同的地方,但也有自身特點(diǎn)。不同的嵌入式C語(yǔ)言編譯系統(tǒng)與標(biāo)準(zhǔn)C語(yǔ)言的不同,主要是由于它們所針對(duì)的硬件系統(tǒng)不同。對(duì)于51單片機(jī),目前廣泛使用的是KEILC51語(yǔ)言,簡(jiǎn)稱C51語(yǔ)言。C51的基本語(yǔ)法與標(biāo)準(zhǔn)C相同,C51在標(biāo)準(zhǔn)C的基礎(chǔ)上進(jìn)行了適合于51系列單片機(jī)硬件的擴(kuò)展。深入理解KEILC51對(duì)標(biāo)準(zhǔn)C的擴(kuò)展部分以及不同之處,是掌握C51語(yǔ)言的關(guān)鍵之一。C51與標(biāo)準(zhǔn)C的主要區(qū)別如下,6,(1)庫(kù)函數(shù)的不同。標(biāo)準(zhǔn)C中的部分庫(kù)函數(shù)不適合于嵌入式控制器系統(tǒng),被排除在KEILC51之外,如字符屏幕和圖形函數(shù)。有些庫(kù)函數(shù)可繼續(xù)使用,但這些庫(kù)函數(shù)都必須針對(duì)51單片機(jī)的硬件特點(diǎn)做出相應(yīng)的開發(fā)。例如庫(kù)函數(shù)PRINTF和SCANF,在標(biāo)準(zhǔn)C中,這兩個(gè)函數(shù)通常用于屏幕打印和接收字符,而在KEILC51中,主要用于串行口數(shù)據(jù)的收發(fā)。(2)數(shù)據(jù)類型有一定的區(qū)別。在C51中增加了幾種針對(duì)51單片機(jī)特有的數(shù)據(jù)類型,在標(biāo)準(zhǔn)C的基礎(chǔ)上又?jǐn)U展了4種類型。例如,51單片機(jī)包含位操作空間和豐富的位操作指令,因此,C51語(yǔ)言與標(biāo)準(zhǔn)C相比就要增加位類型。,7,(3)C51的變量存儲(chǔ)模式與標(biāo)準(zhǔn)C中的變量存儲(chǔ)模式數(shù)據(jù)不一樣。標(biāo)準(zhǔn)C是為通用計(jì)算機(jī)設(shè)計(jì)的,計(jì)算機(jī)中只有一個(gè)程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間,而C51中變量的存儲(chǔ)模式與51單片機(jī)的存儲(chǔ)器緊密相關(guān)。(4)數(shù)據(jù)存儲(chǔ)類型的不同。51單片機(jī)存儲(chǔ)區(qū)可分為內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)、外部數(shù)據(jù)存儲(chǔ)區(qū)以及程序存儲(chǔ)區(qū)。內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)可分為3個(gè)不同的C51存儲(chǔ)類型DATA、IDATA和BDATA。外部數(shù)據(jù)存儲(chǔ)區(qū)分為2個(gè)不同的C51存儲(chǔ)類型XDATA和PDATA。程序存儲(chǔ)區(qū)只能讀不能寫,在51單片機(jī)內(nèi)部或外部。C51提供了CODE存儲(chǔ)類型來(lái)訪問(wèn)程序存儲(chǔ)區(qū)。,8,(5)標(biāo)準(zhǔn)C語(yǔ)言沒(méi)有處理單片機(jī)中斷的定義。C51中有專門的中斷函數(shù)。(6)C51語(yǔ)言與標(biāo)準(zhǔn)C語(yǔ)言的輸入/輸出處理不一樣。C51語(yǔ)言中的輸入/輸出是通過(guò)51單片機(jī)的串行口來(lái)完成的,輸入/輸出指令執(zhí)行前必須對(duì)串行口進(jìn)行初始化。(7)頭文件的不同。C51語(yǔ)言與標(biāo)準(zhǔn)C頭文件的差異是C51頭文件必須把51單片機(jī)內(nèi)部的外設(shè)硬件資源如定時(shí)器、中斷、I/O等所相應(yīng)的功能寄存器的寫入頭文件內(nèi)。(8)程序結(jié)構(gòu)的差異。由于51單片機(jī)硬件資源有限,它的編譯系統(tǒng)不允許太多的程序嵌套。其次,標(biāo)準(zhǔn)C所具備的遞歸特性不被C51語(yǔ)言支持。,9,但是從數(shù)據(jù)運(yùn)算操作、程序控制語(yǔ)句以及函數(shù)的使用上來(lái)說(shuō),KEILC51與標(biāo)準(zhǔn)C幾乎沒(méi)有什么明顯的差別。如果程序設(shè)計(jì)者具備了有關(guān)標(biāo)準(zhǔn)C的編程基礎(chǔ),只要注意KEILC51與標(biāo)準(zhǔn)C的不同之處,并熟悉51單片機(jī)的硬件結(jié)構(gòu),就能夠較快地掌握C51的編程。32KEILC51的開發(fā)工具KEILC51是德國(guó)KEILSOFTWARE公司開發(fā)的用于51單片機(jī)的C51語(yǔ)言開發(fā)軟件,在兼容標(biāo)準(zhǔn)C的基礎(chǔ)上,又增加了很多與51單片機(jī)硬件相關(guān)的編譯特性,使得在51系列單片機(jī)上開發(fā)應(yīng)用程序更為方便和快捷,生成的程序代碼運(yùn)行速度快,所需的存儲(chǔ)器空間小,完全可以和匯編語(yǔ)言相媲美。,10,它支持眾多的8051架構(gòu)的芯片,同時(shí)集編輯、編譯、仿真等功能于一體,具有強(qiáng)大的軟件調(diào)試功能,是眾多的單片機(jī)應(yīng)用開發(fā)軟件中的最優(yōu)秀軟件之一。321集成開發(fā)環(huán)境KEILΜVISION3簡(jiǎn)介KEILC51已集成到一個(gè)功能強(qiáng)大的集成開發(fā)環(huán)境(IDEINTERGRATEDDEVELOPMENTEVIROMENT)ΜVISION3中,用于51單片機(jī)的WINDOWS下的集成開發(fā)環(huán)境,提供對(duì)8051內(nèi)核的各種型號(hào)的支持,為51單片機(jī)軟件開發(fā)提供全新的C語(yǔ)言開發(fā)環(huán)境。該開發(fā)環(huán)境下集成了文件編輯處理、編譯鏈接、項(xiàng)目(PROJECT)管理、窗口、工具引用和仿真軟件模擬器以及MONITOR51硬件目標(biāo)調(diào)試器等多種功能,所有功能均,11,可在KEILΜVISION3的開發(fā)環(huán)境中極為簡(jiǎn)便地進(jìn)行操作。KEILΜVISION3完全兼容先前的KEILΜVISION2版本。KEIL公司目前已經(jīng)推出了V70以上版本的C51編譯器,較新的版本為KEILC51V808A。經(jīng)常用到KEILC51和KEILΜVISION3兩個(gè)術(shù)語(yǔ)。KEILC51一般簡(jiǎn)寫為C51,指的是51單片機(jī)編程所用的C51語(yǔ)言;而KEILΜVISION3,可簡(jiǎn)寫為ΜVISION3,指的是用于51單片機(jī)的C51程序編寫、調(diào)試的集成開發(fā)環(huán)境。ΜVISION3內(nèi)部集成了源程序編輯器,并允許用戶在編輯源文件時(shí)就可設(shè)置程序調(diào)試斷點(diǎn),便于在程序調(diào)試過(guò)程中快速,檢查和修改程序。此外,ΜVISION3還支持軟件模擬仿真(SIMULATOR)和用戶目標(biāo)板調(diào)試MONITOR51兩種工作方式。在軟件模擬仿真方式下不需要任何51單片機(jī)及其外圍硬件即可完成用戶程序仿真調(diào)試。在用戶目標(biāo)板調(diào)試方式下,利用硬件目標(biāo)板中的監(jiān)控程序可以直接調(diào)試目標(biāo)硬件系統(tǒng),使用戶節(jié)省購(gòu)買硬件仿真器的費(fèi)用。C51程序的程序開發(fā)是在KEILΜVISION3開發(fā)環(huán)境下進(jìn)行的。開發(fā)者可購(gòu)買KEILΜVISION3軟件,也可到KEILSOFTWARE公司的主頁(yè)免費(fèi)下載EVAL(評(píng)估)版本。該版本同正式版本一樣,但有一定的限制,最終生成的代碼不能超過(guò)2KB,但用,13,于學(xué)習(xí)已足夠。開發(fā)者還可到KEIL公司網(wǎng)站申請(qǐng)免費(fèi)的軟件試用光盤。KEILΜVISION3內(nèi)集成了功能強(qiáng)大源程序編輯器和調(diào)試器。編輯器允許用戶在編輯源文件時(shí)就可設(shè)置程序調(diào)試斷點(diǎn),便于在程序調(diào)試過(guò)程中快速檢查和修改程序,可像一般文本編輯器一樣對(duì)源代碼進(jìn)行編輯。用戶啟動(dòng)ΜVISION3調(diào)試器之后,斷點(diǎn)即被激活。斷點(diǎn)可被設(shè)置為條件表達(dá)式、變量或存儲(chǔ)器訪問(wèn),斷點(diǎn)被觸發(fā)后,調(diào)試器的命令或調(diào)試功能即可執(zhí)行,因此可在編輯器內(nèi)調(diào)試程序,快速地檢查和修改程序。還可在編輯器中選中變量和存儲(chǔ)器來(lái)觀察其值。并可以在雙層窗口中顯示,還可對(duì)其進(jìn)行適當(dāng),14,的調(diào)整。此外,ΜVISION3調(diào)試器具有符號(hào)調(diào)試特性以及歷史跟蹤,代碼覆蓋,復(fù)雜斷點(diǎn)等功能。KEILΜVISION環(huán)境下還有串口調(diào)試器軟件COMDEBUGEXE,用于在電腦端能夠看到單片機(jī)發(fā)出的數(shù)據(jù),串口調(diào)試器軟件無(wú)需安裝,可直接運(yùn)行這個(gè)軟件。若讀者需要最新版,可到有關(guān)搜索網(wǎng)站輸入關(guān)鍵詞“串口調(diào)試器”,找到一個(gè)合適的下載網(wǎng)站,可即下載“串口調(diào)試器”的最新版本。當(dāng)然,使用WINDOWS自帶的“超級(jí)終端”也是不錯(cuò)的選擇。,15,322KEILΜVISION3軟件的安裝、啟動(dòng)和運(yùn)行1軟件安裝集成開發(fā)環(huán)境安裝,同大多數(shù)軟件安裝一樣,根據(jù)提示進(jìn)行。安裝完畢后,可在桌面上看到KEILΜVISION3的快捷圖標(biāo)。2軟件啟動(dòng)點(diǎn)擊桌面上的KEILΜVISION3軟件的快捷圖標(biāo),即可啟動(dòng)該軟件,幾秒種后,出現(xiàn)編輯界面。3軟件的運(yùn)行KEILΜVISION3把用戶的每一個(gè)應(yīng)用程序設(shè)計(jì)都當(dāng)作一個(gè)項(xiàng)目,,16,用項(xiàng)目管理方法可把一個(gè)應(yīng)用程序設(shè)計(jì)中所用到的、互相關(guān)聯(lián)的程序鏈接在同一項(xiàng)目中。打開一個(gè)項(xiàng)目時(shí),所需要的關(guān)聯(lián)程序也都進(jìn)入了調(diào)試窗口,方便用戶對(duì)項(xiàng)目中各程序的編寫、調(diào)試和存儲(chǔ)。用戶也可能開發(fā)了多個(gè)項(xiàng)目,每個(gè)項(xiàng)目用到了相同或不同的程序文件和庫(kù)文件,采用項(xiàng)目管理,就很容易區(qū)分不同項(xiàng)目中所用到的程序文件和庫(kù)文件,非常容易管理。因此,在編寫一個(gè)新的應(yīng)用程序前,一定先要建立項(xiàng)目。下面首先介紹如何建立一個(gè)新的項(xiàng)目。在編輯界面下,首先要建立一個(gè)點(diǎn)擊“PROJECT”菜單,選擇下拉式菜單中的“NEWPROJECT”,彈出文件對(duì)話窗口,選擇要,17,保存的路徑,在“文件名”中輸入一個(gè)程序項(xiàng)目名稱,保存后的文件擴(kuò)展名為“UV2”,這是KEILΜVISION3項(xiàng)目文件的擴(kuò)展名,以后可直接點(diǎn)擊此文件就可打開先前做的項(xiàng)目。點(diǎn)擊“保存”后,這是會(huì)彈出一個(gè)對(duì)話框,要求選擇單片機(jī)的型號(hào),用戶可根據(jù)所使用的單片機(jī)來(lái)選擇。KEILΜVISION3支持幾乎所有的51內(nèi)核單片機(jī)。然后編寫第一個(gè)程序。點(diǎn)擊“FILE”菜單,單擊“NEW”。這時(shí),用戶可輸入代碼。輸入完畢,單擊菜單上的“FILE”,在下拉菜單中單擊“SAVEAS”,在“文件名”欄的編輯框中,鍵入文件名,同時(shí),必須鍵入正確的擴(kuò)展名(C或ASM,然后,單擊“保存”按鈕。,18,上述工作完成后,還有有關(guān)項(xiàng)目的設(shè)置,程序的編譯,鏈接,調(diào)試。這些內(nèi)容,可按照KEILΜVISION3開發(fā)環(huán)境的幫助功能。33C51語(yǔ)言程序設(shè)計(jì)基礎(chǔ)在標(biāo)準(zhǔn)C的基礎(chǔ)上了解掌握C51的數(shù)據(jù)類型和存儲(chǔ)類型、基本運(yùn)算與流程控制語(yǔ)句、C51語(yǔ)言構(gòu)造數(shù)據(jù)類型、C51函數(shù)以及C51程序設(shè)計(jì)的其它問(wèn)題,為C51程序設(shè)計(jì)打下基礎(chǔ)。331C51語(yǔ)言中的數(shù)據(jù)類型與存儲(chǔ)類型1數(shù)據(jù)類型數(shù)據(jù)是單片機(jī)操作的對(duì)象,是具有一定格式的數(shù)字或數(shù)值,,19,數(shù)據(jù)的不同格式就稱為數(shù)據(jù)類型。KEILC51支持的基本數(shù)據(jù)類型如表31所示。針對(duì)AT89S51單片機(jī)的硬件特點(diǎn),C51在標(biāo)準(zhǔn)C的基礎(chǔ)上,擴(kuò)展了4種數(shù)據(jù)類型(表31中最后4行)。注意擴(kuò)展的4種數(shù)據(jù)類型,不能使用指針對(duì)它們存取。,20,2C51的擴(kuò)展數(shù)據(jù)類型對(duì)擴(kuò)展的4種數(shù)據(jù)類型說(shuō)明。(1)位變量BITBIT的值可以是1(TRUE),也可以是0(FALSE)。(2)特殊功能寄存器SFR特殊功能寄存器分布在片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)的地址單元80HFFH之間,“SFR”數(shù)據(jù)類型占用一個(gè)內(nèi)存單元。利用它可以訪問(wèn)AT89S51單片機(jī)內(nèi)部的所有特殊功能寄存器。例如SFRP10X90這一語(yǔ)句定義了P1端口在片內(nèi)的寄存器,在程序后續(xù)的語(yǔ)句中可以用“P10XFF”使P1的所有引腳輸出為高電平之類的語(yǔ)句來(lái)操作特殊功能寄存器。,22,(3)特殊功能寄存器SFR16“SFR16”數(shù)據(jù)類型占兩個(gè)內(nèi)存單元。它用于操作占兩個(gè)字節(jié)的特殊功能寄存器。例如“SFR16DPTR0X82”語(yǔ)句定義了片內(nèi)16位數(shù)據(jù)指針寄存器DPTR,其低8位字節(jié)地址為82H,高8位字節(jié)地址為83H。(4)特殊功能位SBITSBIT片內(nèi)特殊功能寄存器的可尋址位。例如SFRPSW0XD0;/定義PSW寄存器地址為0XD0/SBITPSW20XD2;/定義OV位為PSW2/符號(hào)“”前是特殊功能寄存器的名字,“”的后面數(shù)字是特殊功能寄存器可尋址位在寄存器中的位置,取值必須是07。,23,注意,不要把BIT與SBIT混淆。BIT是定義普通的位變量,值只能是二進(jìn)制的0或1。而SBIT定義的是特殊功能寄存器的可尋址位,它的值是可進(jìn)行位尋址的特殊功能寄存器的某位的絕對(duì)地址,例如,PSW寄存器OV位的絕對(duì)地址0XD2。3數(shù)據(jù)存儲(chǔ)類型在討論C51的數(shù)據(jù)類型時(shí),必須同時(shí)提及它的存儲(chǔ)類型,以及它與51單片機(jī)存儲(chǔ)器結(jié)構(gòu)的關(guān)系,因?yàn)镃51定義的任何數(shù)據(jù)類型必須以一定的方式定位在51單片機(jī)的某一存儲(chǔ)區(qū)中,否則沒(méi)有任何實(shí)際意義。51單片機(jī)有片內(nèi)、外數(shù)據(jù)存儲(chǔ)區(qū),還有程序存儲(chǔ)區(qū)。51單片機(jī)片內(nèi)的數(shù)據(jù)存儲(chǔ)區(qū)是可讀寫的,51單片機(jī)的衍生系列最多可,24,有256個(gè)字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),其中低128字節(jié)可直接尋址,高128字節(jié)(80H~FFH)只能間接尋址,從20H開始的16字節(jié)可位尋址。內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)可分為3個(gè)不同的數(shù)據(jù)存儲(chǔ)類型DATA、IDATA和BDATA。訪問(wèn)片外數(shù)據(jù)存儲(chǔ)區(qū)比訪問(wèn)片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)慢,因?yàn)槠鈹?shù)據(jù)存儲(chǔ)區(qū)是通過(guò)數(shù)據(jù)指針加載地址來(lái)間接尋址訪問(wèn)的。C51提供兩種不同數(shù)據(jù)存儲(chǔ)類型XDATA和PDATA來(lái)訪問(wèn)片外數(shù)據(jù)存儲(chǔ)區(qū)。程序存儲(chǔ)區(qū)只能讀不能寫,可能在51單片機(jī)內(nèi)部或者外部,或者外部和內(nèi)部都有,由51單片機(jī)的硬件決定,C51提供了CODE存儲(chǔ)類型來(lái)訪問(wèn)程序存儲(chǔ)區(qū)。,25,C51存儲(chǔ)類型與AT89S51單片機(jī)實(shí)際的存儲(chǔ)空間的對(duì)應(yīng)關(guān)系如表32所示。,26,下面對(duì)表32中的各種存儲(chǔ)區(qū)作以說(shuō)明。(1)DATA區(qū)。尋址是最快的,應(yīng)該把經(jīng)常使用的變量放在DATA區(qū),但是DATA區(qū)的存儲(chǔ)空間是有限的,DATA區(qū)除了包含程序變量外,還包含了堆棧和寄存器組。DATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為DATA,通常指片內(nèi)RAM的128字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)的變量,可直接尋址。聲明舉例如下UNSIGNEDCHARDATASYSTEM_STATUS0UNSIGNEDINTDATAUNIT_ID8CHARDATAINP_STRING20;,標(biāo)準(zhǔn)變量和用戶自聲明變量都可存儲(chǔ)在DATA區(qū)中,只要不超過(guò)DATA區(qū)的范圍即可。由于C51使用默認(rèn)的寄存器組來(lái)傳遞參數(shù),這樣DATA區(qū)至少失去了8字節(jié)的空間。另外,當(dāng)內(nèi)部堆棧溢出的時(shí)候,程序會(huì)莫名其妙地復(fù)位。這是因?yàn)?1單片機(jī)沒(méi)有報(bào)錯(cuò)的機(jī)制,堆棧的溢出只能以這種方式表示,因此要留有較大的堆??臻g來(lái)防止堆棧溢出。(2)BDATA區(qū)。是DATA中的位尋址區(qū),在這個(gè)區(qū)中聲明變量就可進(jìn)行位尋址。BDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為BDATA,指的是內(nèi)部RAM可位尋址的16字節(jié)存儲(chǔ)區(qū)(字節(jié)地址為20H~2FH)中的128個(gè)位。下面是在BDATA區(qū)中聲明的位變量和使用位變量的例子,28,UNSIGNEDCHARBDATASTATUS_BYTEUNSIGNEDINTBDATASTATUS_WORDSBITSTAT_FLAGSTATUS_BYTE4IFSTATUS_WORD15{}STAT_FLAG1C51編譯器不允許在BDATA區(qū)中聲明FLOAT和DOUBLE型變量。(3)IDATA區(qū)。IDATA區(qū)使用寄存器作為指針來(lái)進(jìn)行間接尋址,常用來(lái)存放使用比較頻繁的變量。與外部存儲(chǔ)器尋址相比,它的指令執(zhí)行周期和代碼長(zhǎng)度相對(duì)較短。IDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為IDATA,指的是片內(nèi)RAM的256字節(jié)的存儲(chǔ)區(qū),只能間接尋址,速度比直接尋址慢。聲明舉例如下,29,UNSIGNEDCHARIDATASYSTEM_STATUS0UNSIGNEDINTIDATAUNIT_ID8CHARIDATAINP_STRING16;FLOATIDATAOUT_VALUE(4)PDATA區(qū)和XDATA區(qū)。PDATA區(qū)和XDATA區(qū)位于片外存儲(chǔ)區(qū),PDATA區(qū)和XDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符分別為PDATA和XDATA。PDATA區(qū)只有256字節(jié),僅指定256字節(jié)的外部數(shù)據(jù)存儲(chǔ)區(qū)。但XDATA區(qū)最多可達(dá)64KB,對(duì)應(yīng)的XDATA存儲(chǔ)類型標(biāo)識(shí)符可以指定外部數(shù)據(jù)區(qū)64KB內(nèi)的任何地址。對(duì)PDATA區(qū)的尋址要比對(duì)XDATA區(qū)尋址快,因?yàn)閷?duì)PDATA區(qū),尋址,只需要裝入8位地址,而對(duì)XDATA區(qū)尋址要裝入16位地址,所以要盡量把外部數(shù)據(jù)存儲(chǔ)在PDATA區(qū)中。對(duì)PDATA區(qū)和XDATA區(qū)的聲明舉例如下UNSIGNEDCHARXDATASYSTEM_STATUS0UNSIGNEDINTPDATAUNIT_ID8CHARXDATAINP_STRING16;FLOATPDATAOUT_VALUE由于外部數(shù)據(jù)存儲(chǔ)器與外部I/O口是統(tǒng)一編址的,外部數(shù)據(jù)存儲(chǔ)器地址段中除了包含存儲(chǔ)器地址外,還包含外部I/O口的地址。對(duì)外部數(shù)據(jù)存儲(chǔ)器及外部I/O口的尋址將在后面的絕對(duì)地址尋址中詳細(xì)介紹。,31,(5)程序存儲(chǔ)區(qū)CODE。程序存儲(chǔ)區(qū)CODE聲明的標(biāo)識(shí)符為CODE,儲(chǔ)存的數(shù)據(jù)是不可改變的。在C51編譯器中可以用存儲(chǔ)區(qū)類型標(biāo)識(shí)符CODE來(lái)訪問(wèn)程序存儲(chǔ)區(qū)。聲明舉例如下UNSIGNEDCHARCODEA{0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08}以上介紹了C51的數(shù)據(jù)存儲(chǔ)類型,C51的數(shù)據(jù)存儲(chǔ)類型及其大小和值域如表33所示。,32,33,單片機(jī)訪問(wèn)片內(nèi)RAM比訪問(wèn)片外RAM相對(duì)快一些,所以應(yīng)當(dāng)盡量把頻繁使用的變量置于片內(nèi)RAM。即采用DATA、BDATA或IDATA存儲(chǔ)類型,而將容量較大的或使用不太頻繁的那些變量置于片外RAM,即采用PDATA或XDATA存儲(chǔ)類型。常量只能采用CODE存儲(chǔ)類型。變量存儲(chǔ)類型定義舉例(1)CHARDATAA1/字符變量A1被定義為DATA型,分配在片內(nèi)RAM低128字節(jié)中/(2)FLOATIDATAX,Y/浮點(diǎn)型變量X和Y被定義為IDATA型,定位在片內(nèi)RAM中,只能用間接尋址方式尋址/,34,(3)BITBDATAP/位變量P被定義為BDATA型,定位在片內(nèi)RAM中的位尋址區(qū)/(4)UNSIGNEDINTPDATAVAR1/無(wú)符號(hào)整型變量VAR1被定義為PDATA型,定位在片外RAM中,相當(dāng)于使用RI間接尋址/(5)UNSIGNEDCHARXDATAA24/無(wú)符號(hào)字符型二維數(shù)組變量A24被定義為XDATA存儲(chǔ)類型,定位在片外RAM中,占據(jù)2?48個(gè)字節(jié),相當(dāng)于使用DPTR間接尋址/,35,4.?dāng)?shù)據(jù)存儲(chǔ)模式如在變量定義時(shí)略去存儲(chǔ)類型標(biāo)識(shí)符,編譯器會(huì)自動(dòng)默認(rèn)存儲(chǔ)類型。默認(rèn)的存儲(chǔ)類型進(jìn)一步由SMALL、COMPACT和LARGE存儲(chǔ)模式指令限制。例如,若聲明CHARVAR1,則在使用SMALL存儲(chǔ)模式下,VAR1被定位在DATA存儲(chǔ)區(qū),在使用COMPACT模式下,VAR1被定位在IDATA存儲(chǔ)區(qū);在LARGE模式下,VAR1被定位在XDATA存儲(chǔ)區(qū)中。在固定的存儲(chǔ)器地址上進(jìn)行變量的傳遞,是C51標(biāo)準(zhǔn)特征之一。在SMALL模式下,參數(shù)傳遞是在片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)中完成的。LARGE和COMPACT模式允許參數(shù)在外部存儲(chǔ)器中傳遞。C51也支持混合模式。例如,在LARGE模式下,生成的程序,36,可以將一些函數(shù)放入SMALL模式中,從而加快執(zhí)行速度。下面對(duì)存儲(chǔ)模式作進(jìn)一步的說(shuō)明。(1)SMALL模式。本模式,所有變量都默認(rèn)位于51單片機(jī)內(nèi)部的數(shù)據(jù)存儲(chǔ)器,這與使用DATA指定存儲(chǔ)器類型的方式一樣。本模式,變量訪問(wèn)的效率高,但所有數(shù)據(jù)對(duì)象和堆棧必須使用內(nèi)部RAM。(2)COMPACT模式。本模式,所有變量都默認(rèn)在外部數(shù)據(jù)存儲(chǔ)器的1頁(yè)內(nèi),這與使用PDATA指定存儲(chǔ)器類型是一樣的。該存儲(chǔ)器類型適用于變量不超過(guò)256字節(jié)的情況,此限制是由尋址方式?jīng)Q定,相當(dāng)用數(shù)據(jù)指針RI進(jìn)行尋址。與SMALL模式相比,該存儲(chǔ)模式的效率比較低,對(duì)變量訪問(wèn)的速度也慢一些,但比LARGE模式快。,37,(3)LARGE模式。在LARGE模式中,所有變量都默認(rèn)位于外部數(shù)據(jù)存儲(chǔ)器,相當(dāng)于使用數(shù)據(jù)指針DPTR進(jìn)行尋址。通過(guò)數(shù)據(jù)指針訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器的效率較低,特別是當(dāng)變量為2字節(jié)或更多字節(jié)時(shí),該模式要比SMALL和COMPACT產(chǎn)生更多的代碼。332C51語(yǔ)言的特殊功能寄存器及位變量定義介紹C51如何對(duì)特殊功能寄存器以及位變量進(jìn)行定義并訪問(wèn)。1.特殊功能寄存器的C51定義C51語(yǔ)言允許使用關(guān)鍵字SFR、SBIT或直接引用編譯器提供的頭文件來(lái)對(duì)特殊功能寄存器(SFR)進(jìn)行訪問(wèn),特殊功能寄存器在片內(nèi)RAM的高128字節(jié),只能采用直接尋址方式。,38,1使用關(guān)鍵字定義SFR為了能直接訪問(wèn)特殊功能寄存器SFR,C51語(yǔ)言提供了一種定義方法,即引入關(guān)鍵字SFR,語(yǔ)法如下SFR特殊功能寄存器名字特殊功能寄存器地址;例如SFRIE0XA8/中斷允許寄存器地址A8H/SFRTCON0X88/定時(shí)器/計(jì)數(shù)器控制寄存器地址88H/SFRSCON0X98/串行口控制寄存器地址98H/例如要訪問(wèn)16位SFR,可使用關(guān)鍵字SFR16。16位SFR的低,39,字節(jié)地址必須作為“SFR16”的定義地址,例如SFR16DPTR0X82/數(shù)據(jù)指針DPTR的低8位地址為82H,高8位地址為83H/2通過(guò)頭文件訪問(wèn)SFR各種衍生型的51單片機(jī)的特殊功能寄存器的數(shù)量與類型有時(shí)是不相同的,對(duì)單片機(jī)特殊功能寄存器的訪問(wèn)可以通過(guò)頭文件的訪問(wèn)來(lái)進(jìn)行。為了用戶處理方便,C51語(yǔ)言把51單片機(jī)(或52單片機(jī))的常用的特殊功能寄存器和其中的可尋址位進(jìn)行了定義,放在一個(gè)REG51H(或REG52H)的頭文件中。當(dāng)用戶要使用,40,時(shí),只需在使用之前用一條預(yù)處理命令I(lǐng)NCLUDE把這個(gè)頭文件包含到程序中,就可以使用特殊功能寄存器名和其中的可尋址位名稱了。用戶可以通過(guò)文本編輯器對(duì)頭文件進(jìn)行增減。頭文件引用舉例如下INCLUDE/頭文件為51型單片機(jī)的頭文件/VOIDMAINVOID{TL00XF0/給定時(shí)器T0低字節(jié)TL0設(shè)置時(shí)間常數(shù),已在REG51H中定義/TH00X3F/給T0高字節(jié)TH0設(shè)時(shí)間常數(shù)/TR01/啟動(dòng)定時(shí)器0/},41,3特殊功能寄存器中的位定義對(duì)SFR中的可尋址位的訪問(wèn),要使用關(guān)鍵字來(lái)定義可尋址位,共有3種方法。①SBIT位名特殊功能寄存器位置;例如SFRPSW0XD0;/定義PSW寄存器的字節(jié)地址0XD0H/SBITCYPSW7;/定義CY位為PSW7,地址為0XD0/SBITOVPSW2;/定義OV位為PSW2,地址為0XD2/②SBIT位名字節(jié)地址位置;例如SBITCY0XD07;/CY位地址為0XD7/SBITOV0XD02;/OV位地址為0XD2/,42,③SBIT位名位地址;這種方法將位的絕對(duì)地址賦給變量,位地址必須在0X80~0XFF之間。例如SBITCY0XD7;/CY位地址為0XD7/SBITOV0XD2;/OV位地址為0XD2/【例】片內(nèi)I/O口P1口的各尋址位的定義如下SFRP10X90;SBITP1_7P17;SBITP1_6P16;SBITP1_5P15;SBITP1_4P14;,43,SBITP1_3P13;SBITP1_2P12;SBITP1_1P11;SBITP1_0P10;2位變量的C51定義1位變量的C51定義由于51單片機(jī)能夠進(jìn)行位操作,C51擴(kuò)展的“BIT”數(shù)據(jù)類型用來(lái)定義位變量,這是C51與標(biāo)準(zhǔn)C的不同之處。C51采用關(guān)鍵字“BIT”來(lái)定義位變量,一般格式為BITBIT_NAME;例如,44,BITOV_FLAG;/將OV_FLAG定義為位變量/BITLOCK_POINTER;/將LOCK_POINTER定義為位變量/2函數(shù)可以包含類型為BIT的參數(shù),也可將其作為返回值C51程序函數(shù)可以包含類型為“BIT”的參數(shù),也可將其作為返回值。例如BITFUNCBITB0,BITB1;/位變量B0與B1作為函數(shù)FUNC的參數(shù)/{RETURNB1;/位變量B1作為函數(shù)的返回值/},45,3位變量定義的限制位變量不能用來(lái)定義指針和數(shù)組。例如BITPTR;/錯(cuò)誤,不能用位變量來(lái)定義指針/BITARRAY;/錯(cuò)誤,不能用位變量來(lái)定義數(shù)組A
下載積分: 4 賞幣
上傳時(shí)間:2024-01-06
頁(yè)數(shù): 136
大小: 0.89(MB)
子文件數(shù):
-
簡(jiǎn)介:全國(guó)青少年軟件編程等級(jí)考試C語(yǔ)言練習(xí)題(基礎(chǔ)篇),習(xí)題與相應(yīng)答案都給出。同學(xué)進(jìn)行自我練習(xí)測(cè)試,有需要老師檢查或還需其他練習(xí)的,有問(wèn)題都可以在群里咨詢機(jī)器人包老師。當(dāng)然,我在的時(shí)候盡可能會(huì)回復(fù)的,湊硬幣,請(qǐng)編程求出用1角、2角和5角的硬幣湊出10元的所有組合程序思路如果單獨(dú)用1角的湊足10元錢,需要1010/1個(gè)如果單獨(dú)用2角的湊足10元錢,需要1010/2個(gè)如果單獨(dú)用5角的湊足10元錢,需要1010/5個(gè)S,求最大公約數(shù)輾轉(zhuǎn)相除法,使用輾轉(zhuǎn)相除法求最大公約數(shù)程序思路第一步如果B0,計(jì)算結(jié)束A就是最大公約數(shù);第二步如果B0,計(jì)算A除以B的余數(shù),然后把B的值給A,把余數(shù)的值給B;第三步回到第一步重復(fù)執(zhí)行以上過(guò)程。ABR12181218126126060,求金幣,國(guó)王將金幣作為工資,發(fā)放給忠誠(chéng)的騎士。第一天,騎士收到一枚金幣;之后兩天(第二天和第三天),每天收到兩枚金幣;之后三天(第四、五、六天),每天收到三枚金幣;之后四天(第七、八、九、十天),每天收到四枚金幣;這種工資發(fā)放模式會(huì)一直這樣延續(xù)下去當(dāng)連續(xù)N天每天收到N枚金幣后,騎士會(huì)在之后的連續(xù)N1天里,每天收到N1枚金幣。請(qǐng)編程計(jì)算在前K天里,騎士一共獲得了多少金幣。1≤K≤10,000,示例,如3天里騎士收到的金幣數(shù)量為12254天里騎士收到的金幣數(shù)量為122385天里騎士收到的金幣數(shù)量為12233116天里騎士收到的金幣數(shù)量為122333147天里騎士收到的金幣數(shù)量為122333418,請(qǐng)使用FOR循環(huán)輸出一個(gè)9X9的加法表請(qǐng)使用FOR循環(huán)輸出一個(gè)9X9的乘法表,猴子吃桃,猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè)第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見(jiàn)只剩下一個(gè)桃子了。求第一天共摘了多少個(gè)桃子TOTALN1/2–1TOTALN,數(shù)字特征值,對(duì)數(shù)字求特征值是常用的編碼算法,奇偶特征是一種簡(jiǎn)單的特征值。對(duì)于一個(gè)整數(shù),從個(gè)位開始對(duì)每一位數(shù)字編號(hào),個(gè)位是1號(hào),十位是2號(hào),以此類推。這個(gè)整數(shù)在第N位上的數(shù)字記作X,如果X和N的奇偶性相同,則記下一個(gè)1,否則記下一個(gè)0。按照整數(shù)的順序把對(duì)應(yīng)位的表示奇偶性的0和1都記錄下來(lái),就形成了一個(gè)二進(jìn)制數(shù)字。比如,對(duì)于342315,這個(gè)二進(jìn)制數(shù)字就是001101。這里的計(jì)算可以用下面的表格來(lái)表示按照二進(jìn)制位值將1的位的位值加起來(lái)就得到了結(jié)果13。,數(shù)字特征值,你的程序要讀入一個(gè)非負(fù)整數(shù),整數(shù)的范圍是0,100000,然后按照上述算法計(jì)算出表示奇偶性的那個(gè)二進(jìn)制數(shù)字,輸出它對(duì)應(yīng)的十進(jìn)制值。提示將整數(shù)從右向左分解,數(shù)位每次加1,而二進(jìn)制值每次乘2。輸入格式一個(gè)非負(fù)整數(shù),整數(shù)的范圍是0,100000。輸出格式一個(gè)整數(shù),表示計(jì)算結(jié)果。輸入樣例342315輸出樣例13,
下載積分: 4 賞幣
上傳時(shí)間:2024-01-07
頁(yè)數(shù): 9
大小: 0.36(MB)
子文件數(shù):
-
簡(jiǎn)介:C語(yǔ)言程序設(shè)計(jì),大學(xué)計(jì)算機(jī)公共基礎(chǔ)課,2,課程介紹,課程性質(zhì)大學(xué)計(jì)算機(jī)公共基礎(chǔ)課(必修)課程內(nèi)容C語(yǔ)言程序設(shè)計(jì)的基本方法和技巧預(yù)備知識(shí)計(jì)算機(jī)基礎(chǔ)教材C語(yǔ)言程序設(shè)計(jì)教程汪同慶張華楊先娣主編機(jī)械工業(yè)出版社C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)教程汪同慶關(guān)煥梅湯潔主編機(jī)械工業(yè)出版社,C語(yǔ)言程序設(shè)計(jì),3,授課計(jì)劃,C語(yǔ)言程序設(shè)計(jì),4,考試與考核辦法,學(xué)分3學(xué)分學(xué)時(shí)72(講課36實(shí)驗(yàn)36)總評(píng)成績(jī)平時(shí)成績(jī)期末考試成績(jī)平時(shí)成績(jī)(實(shí)驗(yàn),單元測(cè)驗(yàn)期末考試成績(jī),C語(yǔ)言程序設(shè)計(jì),第一講C語(yǔ)言概述,C語(yǔ)言程序設(shè)計(jì),6,第一講C語(yǔ)言概述,預(yù)備知識(shí)計(jì)算機(jī)組成和工作原理計(jì)算機(jī)語(yǔ)言和程序C語(yǔ)言的簡(jiǎn)史為什么學(xué)習(xí)和使用C語(yǔ)言C語(yǔ)言程序的開發(fā)過(guò)程C語(yǔ)言編程環(huán)境C語(yǔ)言編程實(shí)驗(yàn)環(huán)境,C語(yǔ)言程序設(shè)計(jì),7,計(jì)算機(jī),計(jì)算機(jī)(COMPUTER)能進(jìn)行計(jì)算和邏輯判斷的設(shè)備在一組指令(INSTRUCTIONS)程序(PROGRAMS)的控制下處理數(shù)據(jù)硬件(HARDWARE)組成計(jì)算機(jī)的各種物理部件鍵盤、鼠標(biāo)、顯示器、內(nèi)存、硬盤、光驅(qū)等等軟件(SOFTWARE)計(jì)算機(jī)中運(yùn)行的程序和數(shù)據(jù),C語(yǔ)言概述,8,計(jì)算機(jī)的組成,計(jì)算機(jī)包括六大部件輸入單元(INPUTUNIT)從輸入設(shè)備(鍵盤、鼠標(biāo))獲得數(shù)據(jù)輸出單元(OUTPUTUNIT)把數(shù)據(jù)輸出到輸出設(shè)備(顯示器、打印機(jī)等)內(nèi)存(MEMORYUNIT)臨時(shí)存儲(chǔ)正在處理的數(shù)據(jù)和運(yùn)行的程序可以快速地訪問(wèn)容量不大,C語(yǔ)言概述,9,計(jì)算機(jī)的組成,中央處理單元(CENTRALPROCESSINGUNIT,CPU)算術(shù)邏輯單元(ARITHMETICANDLOGICUNIT,ALU)進(jìn)行算術(shù)運(yùn)算和邏輯判斷控制器(CONTROLUNIT)管理和協(xié)調(diào)計(jì)算機(jī)的其它部件輔助存儲(chǔ)器(SECONDARYSTORAGEUNIT)保存需長(zhǎng)期存儲(chǔ)的數(shù)據(jù)和非活動(dòng)的程序保存時(shí)間長(zhǎng)價(jià)格便宜、容量大例如硬盤、光盤、磁帶,C語(yǔ)言概述,10,計(jì)算機(jī)的工作原理,六大部件緊密協(xié)作,C語(yǔ)言概述,,,,,11,計(jì)算機(jī)的工作原理,CPU負(fù)責(zé)執(zhí)行程序從內(nèi)存中讀取一條指令執(zhí)行該指令從內(nèi)存中讀取下一條指令并執(zhí)行一個(gè)主頻為1GHZ的CPU可以在一秒鐘內(nèi)進(jìn)行大約一億次這樣的操作CPU有自己的工作區(qū)包括若干個(gè)寄存器(REGISTERS)CPU只能理解有限的指令(CPU的指令集)指令能夠完成的任務(wù)是具體的例如,把一個(gè)數(shù)從內(nèi)存移動(dòng)到某一個(gè)寄存器,C語(yǔ)言概述,12,計(jì)算機(jī)程序和語(yǔ)言,存儲(chǔ)在計(jì)算機(jī)中的一切內(nèi)容都是二進(jìn)制的數(shù)字形式數(shù)據(jù)數(shù)、字符、圖片、聲音、動(dòng)畫等等指令計(jì)算機(jī)程序確切告訴計(jì)算機(jī)如何完成某項(xiàng)任務(wù)的指令序列就是一套程序計(jì)算機(jī)語(yǔ)言用來(lái)編寫程序,C語(yǔ)言概述,INCLUDEINCLUDEVOIDMAIN{FLOATA,B,C,P,DISC,Q,X1,X2SCANF“FFF“,PB/2ADISCBB4ACQSQRTDISC/2AX1PQX2PQPRINTF“X1F,X2F“,X1,X2},011000110000011001100101110011000000110000011011011000110000011001100101110011000000110000011011,13,機(jī)器語(yǔ)言,數(shù)字形式的指令碼就是機(jī)器語(yǔ)言(MACHINELANGUAGE)用機(jī)器語(yǔ)言編寫的程序能夠被計(jì)算機(jī)直接理解和執(zhí)行但是,編寫程序非常費(fèi)力例如,編寫程序完成兩個(gè)數(shù)相加的任務(wù)需要以下幾步把地址為2000的內(nèi)存單元中的數(shù)復(fù)制到寄存器1;把地址為2004的內(nèi)存單元中的數(shù)復(fù)制到寄存器2;把寄存器2中的數(shù)與寄存器1中的數(shù)相加,結(jié)果保留在寄存器1中;把寄存器1中的數(shù)復(fù)制到地址為2008的內(nèi)存單元中。,C語(yǔ)言概述,011000110000011001100101110011000000110000011011,14,匯編語(yǔ)言,符號(hào)化的指令碼就是匯編語(yǔ)言(ASSEMBLYLANGUAGE)例如,完成兩個(gè)數(shù)相加的匯編語(yǔ)言程序匯編語(yǔ)言程序必須被翻譯成機(jī)器語(yǔ)言程序才能被執(zhí)行匯編程序(ASSEMBLER)充當(dāng)“翻譯”,C語(yǔ)言概述,LDREGN1,R1把變量N1的值復(fù)制到寄存器1(R1);LDREGN2,R2把變量N2的值復(fù)制到寄存器2(R2);ADDR1,R2把R2中的數(shù)與R1中的數(shù)相加,結(jié)果保留在R1中;STORER1,SUM把R1中的數(shù)復(fù)制到變量SUM。,15,高級(jí)語(yǔ)言,高級(jí)語(yǔ)言(HIGHLEVELLANGUAGE)使用數(shù)學(xué)符號(hào)和類似英語(yǔ)的單詞例如,完成兩個(gè)數(shù)相加的C語(yǔ)言程序從多方面提高了編程效率不必考慮CPU的指令集不必考慮CPU實(shí)現(xiàn)特定任務(wù)的精確步驟采用接近人類思考問(wèn)題的方式去書寫程序高級(jí)語(yǔ)言程序必須被編譯程序(COMPILER)翻譯成機(jī)器語(yǔ)言程序才能被執(zhí)行,C語(yǔ)言概述,SUMN1N2,16,C語(yǔ)言的簡(jiǎn)史,C語(yǔ)言的起源美國(guó)貝爾實(shí)驗(yàn)室的DENNISRITCHIE在1972年開發(fā)的用于設(shè)計(jì)UNIX操作系統(tǒng)其前身是B語(yǔ)言(KENTHOMPSON于1970年為第一個(gè)UNIX系統(tǒng)開發(fā)的語(yǔ)言)C語(yǔ)言的標(biāo)準(zhǔn)美國(guó)國(guó)家標(biāo)準(zhǔn)化組織(ANSI)于1983年成立了一個(gè)委員會(huì)(X3J11),以確定C語(yǔ)言的標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)(ANSIC)于1989年被正式采用,即C89。最新的標(biāo)準(zhǔn)是C99標(biāo)準(zhǔn)。目前,大多數(shù)C語(yǔ)言編譯器沒(méi)有完全實(shí)現(xiàn)C99的所有修改。,C語(yǔ)言概述,17,為什么學(xué)習(xí)和使用C語(yǔ)言,C語(yǔ)言的特點(diǎn)C語(yǔ)言是一種強(qiáng)大而靈活的語(yǔ)言,可以用來(lái)編寫任意復(fù)雜的程序。C語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。C語(yǔ)言程序效率高、運(yùn)行速度快。C語(yǔ)言是可移植的。C語(yǔ)言很適合結(jié)構(gòu)化程序設(shè)計(jì),因而要求用戶以功能模塊的方式來(lái)思考問(wèn)題。C語(yǔ)言具有自我擴(kuò)展能力。,C語(yǔ)言概述,18,為什么學(xué)習(xí)和使用C語(yǔ)言,C與C(C加加,SEEPLUSPLUS)貝爾實(shí)驗(yàn)室于二十世紀(jì)八十年代在C語(yǔ)言的基礎(chǔ)上開發(fā)的。C是C語(yǔ)言的超集,包含了C語(yǔ)言的所有內(nèi)容,同時(shí)增加了面向?qū)ο缶幊谭矫娴膬?nèi)容。C與JAVA(爪哇)SUN公司于1995年發(fā)布的面向?qū)ο缶幊陶Z(yǔ)言。JAVA也是基于C語(yǔ)言的。C與C(SEESHARP)微軟在2000年6月與NET平臺(tái)一同推出。C也是從C語(yǔ)言派生的一種面向?qū)ο笳Z(yǔ)言。,C語(yǔ)言概述,19,C語(yǔ)言程序的開發(fā)過(guò)程,一般分成五個(gè)步驟定義程序目標(biāo)設(shè)計(jì)程序編寫代碼編譯運(yùn)行、測(cè)試和調(diào)試程序,C語(yǔ)言概述,20,C語(yǔ)言程序的開發(fā)過(guò)程,定義程序目標(biāo)在開始解決問(wèn)題之前,程序的開發(fā)人員必須徹底了解問(wèn)題的是什么,對(duì)即將要?jiǎng)?chuàng)建的程序要做的事情有個(gè)清晰的想法。這需要仔細(xì)考慮以下問(wèn)題程序需要什么信息程序需要執(zhí)行哪些計(jì)算和操作程序應(yīng)該報(bào)告什么信息例如,計(jì)算任意一個(gè)圓環(huán)的面積提出問(wèn)題,明確目標(biāo)圓環(huán)是什么如何計(jì)算計(jì)算精度,C語(yǔ)言概述,21,C語(yǔ)言程序的開發(fā)過(guò)程,設(shè)計(jì)程序決定程序如何去解決問(wèn)題。需要考慮如何給程序提供必要的數(shù)據(jù)程序中如何表示數(shù)據(jù)用什么方法來(lái)處理數(shù)據(jù)程序如何組織程序怎樣報(bào)告結(jié)果完成這個(gè)程序需要多長(zhǎng)時(shí)間應(yīng)該用一般的概念考慮設(shè)計(jì)中的問(wèn)題,而不是考慮具體的代碼。,C語(yǔ)言概述,22,C語(yǔ)言程序的開發(fā)過(guò)程,編寫代碼編寫代碼來(lái)實(shí)現(xiàn)前面的設(shè)計(jì),即用某一門語(yǔ)言來(lái)表示程序設(shè)計(jì)。需要開發(fā)人員熟練掌握該語(yǔ)言的知識(shí)??梢栽诓莞寮埳瞎串嬜约旱南敕ɑ驎鴮懘a,但最終必須將代碼輸入計(jì)算機(jī)。輸入代碼所采用的機(jī)制則取決于具體的編程環(huán)境。一般來(lái)說(shuō),需要使用文本編輯器(例如WINDOWS的記事本程序)來(lái)創(chuàng)建一種文件,稱為源文件源文件包含程序設(shè)計(jì)的C語(yǔ)言表示形式(稱為源程序或源代碼),C語(yǔ)言概述,23,C語(yǔ)言程序的開發(fā)過(guò)程,編譯把C語(yǔ)言源程序轉(zhuǎn)換成機(jī)器語(yǔ)言表示的程序。這種程序可以直接被計(jì)算機(jī)理解和執(zhí)行,所以稱之為可執(zhí)行程序,放在可執(zhí)行文件中。編譯的具體細(xì)節(jié)取決于使用的編程環(huán)境。C語(yǔ)言分兩步完成這一工作編譯和鏈接。編譯器將源代碼轉(zhuǎn)換為目標(biāo)代碼,并存在目標(biāo)文件中。鏈接器將目標(biāo)代碼與其他代碼結(jié)合起來(lái)生成可執(zhí)行文件。這種把編譯和鏈接分開來(lái)做的方法便于程序的模塊化。可以分別編譯程序的各個(gè)模塊,然后用鏈接器把編譯過(guò)的模塊結(jié)合起來(lái)。這樣,如果需要改變一個(gè)模塊,則不需要重新編譯所有其他模塊。,C語(yǔ)言概述,24,C語(yǔ)言程序的開發(fā)過(guò)程,運(yùn)行、測(cè)試和調(diào)試程序運(yùn)行包含可執(zhí)行程序的文件,觀察運(yùn)行的結(jié)果。在不同的系統(tǒng)中運(yùn)行程序的方式可能不同。例如,WINDOWS的控制臺(tái)和資源管理器。應(yīng)該對(duì)程序進(jìn)行仔細(xì)的檢查,看程序是否在做該做的事。比較好的做法是為驗(yàn)證程序的正確性設(shè)計(jì)一個(gè)測(cè)試計(jì)劃。越早做越好,因?yàn)樗兄诶砬宄绦騿T的思路。程序中的錯(cuò)誤被稱為BUG,調(diào)試(DEBUG)就是要發(fā)現(xiàn)并修正錯(cuò)誤。,C語(yǔ)言概述,25,C語(yǔ)言的編程環(huán)境,開發(fā)程序的具體操作取決于使用的編程環(huán)境因?yàn)镃語(yǔ)言是可移植的,所以它在許多環(huán)境中都是可用的。例如UNIX、LINUX、WINDOWS和MSDOS。C語(yǔ)言編程環(huán)境包括一系列程序。編輯器編譯器鏈接器運(yùn)行和調(diào)試環(huán)境,C語(yǔ)言概述,26,C語(yǔ)言的編程環(huán)境,編輯器使用一個(gè)文本編輯器程序輸入源代碼,并將代碼保存在源文件中。一般,C程序的源文件名稱的擴(kuò)展名是C例如WELCOMETOYOUC和HELLOC。該名稱應(yīng)該遵循特定的操作系統(tǒng)的命名規(guī)則。例如,MSDOS要求基本名包含的字符數(shù)不能大于8,所以WELCOMETOYOUC不是合法的DOS文件名。WINDOWS允許長(zhǎng)文件名,所以WELCOMETOYOUC是合法的WINDOWS文件名。,C語(yǔ)言概述,27,C語(yǔ)言的編程環(huán)境,編譯器編譯器接收源文件,生成目標(biāo)文件,擴(kuò)展名為OBJ或O。編譯器還會(huì)檢查輸入的程序是否是有效的C語(yǔ)言程序。如果編譯器發(fā)現(xiàn)錯(cuò)誤,就會(huì)報(bào)告出錯(cuò),且不能生成可執(zhí)行程序。這時(shí)就必須修改錯(cuò)誤,然后再編譯。顯然,為了能迅速找到錯(cuò)誤,理解特定編譯器的報(bào)錯(cuò)信息是一項(xiàng)有用的技能。,C語(yǔ)言概述,28,C語(yǔ)言的編程環(huán)境,鏈接器目標(biāo)代碼雖然已經(jīng)是機(jī)器代碼,但還不能被執(zhí)行。缺少下面兩個(gè)東西啟動(dòng)代碼相當(dāng)于程序和操作系統(tǒng)之間的接口。庫(kù)函數(shù)的代碼庫(kù)文件中包含許多函數(shù)的目標(biāo)代碼。鏈接器的作用就是將這三個(gè)元素(目標(biāo)代碼、啟動(dòng)代碼和庫(kù)代碼)結(jié)合起來(lái),并將它們放在一個(gè)文件中,即可執(zhí)行文件,擴(kuò)展名為EXE或OUT。,C語(yǔ)言概述,29,WINDOWS的C語(yǔ)言編程環(huán)境,WINDOWS的C語(yǔ)言編程環(huán)境WINDOWS并不包含C編譯器,所以需要獲得并安裝一個(gè)C編譯器。許多現(xiàn)代的編譯器都是集成開發(fā)環(huán)境(或叫IDE)的一部分。包括一個(gè)編輯器、編譯器、鏈接器和包括一個(gè)符號(hào)調(diào)試程序在內(nèi)的運(yùn)行支持系統(tǒng)。許多軟件廠商都提供了基于WINDOWS的集成開發(fā)環(huán)境MICROSOFT公司的VISUALC/CBORLAND公司的C/CBUILDERMETROWERKS公司的CODEWARRIOR目前,大多數(shù)IDE把C和C編譯器結(jié)合在一起。,C語(yǔ)言概述,30,DOS的C語(yǔ)言編程環(huán)境,DOS的C語(yǔ)言編程環(huán)境基于DOS的IDEBORLAND公司的TURBOCBORLAND公司的BORLANDC許多WINDOWS上的IDE也提供了在DOS命令行環(huán)境中編程的命令行工具。,C語(yǔ)言概述,31,C語(yǔ)言編程實(shí)驗(yàn)環(huán)境簡(jiǎn)介,上機(jī)實(shí)驗(yàn)環(huán)境簡(jiǎn)介舉例演示VISUALC60的基本操作啟動(dòng)創(chuàng)建源文件構(gòu)建工程(編譯、鏈接)運(yùn)行程序,C語(yǔ)言概述,32,小結(jié),C是一種通用的程序設(shè)計(jì)語(yǔ)言,具有許多突出的優(yōu)點(diǎn)。程序設(shè)計(jì)的初學(xué)者應(yīng)該嚴(yán)格按照C語(yǔ)言程序的開發(fā)過(guò)程進(jìn)行訓(xùn)練,以便盡快掌握程序設(shè)計(jì)的基本原則。C是一種需要編譯的高級(jí)語(yǔ)言。進(jìn)行C語(yǔ)言編程的具體操作依賴于所使用的編程環(huán)境。程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,在學(xué)習(xí)過(guò)程中必須十分重視實(shí)驗(yàn)環(huán)節(jié)。,C語(yǔ)言概述,第二講C語(yǔ)言快速入門,34,第二講C語(yǔ)言快速入門,C語(yǔ)言程序的基本結(jié)構(gòu)C語(yǔ)言的字符集和關(guān)鍵字VISUALC60編程環(huán)境,C語(yǔ)言程序設(shè)計(jì),35,C語(yǔ)言程序的基本結(jié)構(gòu),一個(gè)簡(jiǎn)單的C語(yǔ)言程序問(wèn)題在屏幕上顯示一行文字“HELLOWORLD”源程序運(yùn)行結(jié)果,C語(yǔ)言快速入門,/在屏幕上顯示HELLOWORLD/INCLUDEVOIDMAIN/定義主函數(shù)/{PRINTF“HELLOWORLD\N“},HELLOWORLD,36,C語(yǔ)言程序的基本結(jié)構(gòu),一個(gè)簡(jiǎn)單的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,/在屏幕上顯示HELLOWORLD/INCLUDEVOIDMAIN/定義主函數(shù)/{PRINTF“HELLOWORLD\N“},注釋部分以增加程序的可讀性。不被執(zhí)行。,37,C語(yǔ)言程序的基本結(jié)構(gòu),一個(gè)簡(jiǎn)單的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,/在屏幕上顯示HELLOWORLD/INCLUDEVOIDMAIN/定義主函數(shù)/{PRINTF“HELLOWORLD\N“},預(yù)處理命令程序中包含某一文件內(nèi)容?!癝TDIOH”為標(biāo)準(zhǔn)輸入輸出函數(shù)頭文件名。,38,C語(yǔ)言程序的基本結(jié)構(gòu),一個(gè)簡(jiǎn)單的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,/在屏幕上顯示HELLOWORLD/INCLUDEVOIDMAIN/定義主函數(shù)/{PRINTF“HELLOWORLD\N“},函數(shù)C程序由函數(shù)組成。一個(gè)C程序有且僅有一個(gè)主函數(shù)(MAIN函數(shù))。,39,C語(yǔ)言程序的基本結(jié)構(gòu),一個(gè)簡(jiǎn)單的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,/在屏幕上顯示HELLOWORLD/INCLUDEVOIDMAIN/定義主函數(shù)/{PRINTF“HELLOWORLD\N“},函數(shù)說(shuō)明說(shuō)明函數(shù)類型、函數(shù)名和函數(shù)參數(shù)。,40,C語(yǔ)言程序的基本結(jié)構(gòu),一個(gè)簡(jiǎn)單的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,/在屏幕上顯示HELLOWORLD/INCLUDEVOIDMAIN/定義主函數(shù)/{PRINTF“HELLOWORLD\N“},函數(shù)體包括變量說(shuō)明和語(yǔ)句執(zhí)行部分。,41,C語(yǔ)言程序的基本結(jié)構(gòu),一個(gè)簡(jiǎn)單的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,/在屏幕上顯示HELLOWORLD/INCLUDEVOIDMAIN/定義主函數(shù)/{PRINTF“HELLOWORLD\N“},函數(shù)調(diào)用語(yǔ)句格式輸出函數(shù)PRINTF。輸出“HELLOWORLD”。,HELLOWORLD,42,C語(yǔ)言程序的基本結(jié)構(gòu),含有算術(shù)運(yùn)算的C語(yǔ)言程序問(wèn)題求方程的根(設(shè))。源程序,C語(yǔ)言快速入門,INCLUDEINCLUDEVOIDMAIN{FLOATA,B,C,P,DISC,Q,X1,X2SCANF“FFF“,PB/2ADISCBB4ACQSQRTDISC/2AX1PQX2PQPRINTF“X1F,X2F“,X1,X2},43,C語(yǔ)言程序的基本結(jié)構(gòu),含有算術(shù)運(yùn)算的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,INCLUDEINCLUDEVOIDMAIN{FLOATA,B,C,P,DISC,Q,X1,X2SCANF“FFF“,PB/2ADISCBB4ACQSQRTDISC/2AX1PQX2PQPRINTF“X1F,X2F“,X1,X2},預(yù)處理命令,44,C語(yǔ)言程序的基本結(jié)構(gòu),含有算術(shù)運(yùn)算的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,INCLUDEINCLUDEVOIDMAIN{FLOATA,B,C,P,DISC,Q,X1,X2SCANF“FFF“,PB/2ADISCBB4ACQSQRTDISC/2AX1PQX2PQPRINTF“X1F,X2F“,X1,X2},函數(shù)一個(gè)主函數(shù)(MAIN函數(shù))。,45,C語(yǔ)言程序的基本結(jié)構(gòu),含有算術(shù)運(yùn)算的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,INCLUDEINCLUDEVOIDMAIN{FLOATA,B,C,P,DISC,Q,X1,X2SCANF“FFF“,PB/2ADISCBB4ACQSQRTDISC/2AX1PQX2PQPRINTF“X1F,X2F“,X1,X2},函數(shù)說(shuō)明部分,46,C語(yǔ)言程序的基本結(jié)構(gòu),含有算術(shù)運(yùn)算的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,INCLUDEINCLUDEVOIDMAIN{FLOATA,B,C,P,DISC,Q,X1,X2SCANF“FFF“,PB/2ADISCBB4ACQSQRTDISC/2AX1PQX2PQPRINTF“X1F,X2F“,X1,X2},函數(shù)體變量說(shuō)明部分執(zhí)行部分,47,C語(yǔ)言程序的基本結(jié)構(gòu),含有算術(shù)運(yùn)算的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,INCLUDEINCLUDEVOIDMAIN{FLOATA,B,C,P,DISC,Q,X1,X2SCANF“FFF“,PB/2ADISCBB4ACQSQRTDISC/2AX1PQX2PQPRINTF“X1F,X2F“,X1,X2},運(yùn)行程序鍵盤輸入A、B、C的值;屏幕顯示X1和X2的值。,104X12000000,X22000000,48,C語(yǔ)言程序的基本結(jié)構(gòu),包含多個(gè)函數(shù)的C語(yǔ)言程序問(wèn)題求|A||B|的值。源程序,C語(yǔ)言快速入門,INCLUDEFLOATABSVFLOATX{FLOATYYX0XXRETURNY}VOIDMAIN{FLOATA,B,CPRINTF“INPUTA,B\N“SCANF“FF“,CABSVAABSVBPRINTF“|A||B|F\N“,C},49,C語(yǔ)言程序的基本結(jié)構(gòu),包含多個(gè)函數(shù)的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,INCLUDEFLOATABSVFLOATX{FLOATYYX0XXRETURNY}VOIDMAIN{FLOATA,B,CPRINTF“INPUTA,B\N“SCANF“FF“,CABSVAABSVBPRINTF“|A||B|F\N“,C},程序由兩個(gè)函數(shù)組成ABSV函數(shù)MAIN函數(shù),50,C語(yǔ)言程序的基本結(jié)構(gòu),包含多個(gè)函數(shù)的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,INCLUDEFLOATABSVFLOATX{FLOATYYX0XXRETURNY}VOIDMAIN{FLOATA,B,CPRINTF“INPUTA,B\N“SCANF“FF“,CABSVAABSVBPRINTF“|A||B|F\N“,C},調(diào)用ABSV函數(shù)求絕對(duì)值。,51,C語(yǔ)言程序的基本結(jié)構(gòu),包含多個(gè)函數(shù)的C語(yǔ)言程序程序結(jié)構(gòu)分析,C語(yǔ)言快速入門,INCLUDEFLOATABSVFLOATX{FLOATYYX0XXRETURNY}VOIDMAIN{FLOATA,B,CPRINTF“INPUTA,B\N“SCANF“FF“,CABSVAABSVBPRINTF“|A||B|F\N“,C},運(yùn)行程序屏幕顯示提示信息;鍵盤輸入A、B的值;屏幕顯示A、B絕對(duì)值之和。,INPUTA,B513|A||B|18000000,52,C語(yǔ)言程序的基本結(jié)構(gòu),C語(yǔ)言程序的基本結(jié)構(gòu)小結(jié),C語(yǔ)言快速入門,⑴一個(gè)C程序由一個(gè)或多個(gè)函數(shù)組成,但有且僅有一個(gè)主函數(shù)(MAIN函數(shù));MAIN函數(shù)是程序執(zhí)行的入口,可置于程序的任何位置。⑵程序中可以有預(yù)處理命令如INCLUDE命令。預(yù)處理命令通常放在程序的最前面。⑶每個(gè)語(yǔ)句以分號(hào)結(jié)尾;預(yù)處理命令、函數(shù)頭和花括號(hào)“}”之后不能加分號(hào)。⑷函數(shù)包括函數(shù)的說(shuō)明部分和函數(shù)體;函數(shù)體包括變量說(shuō)明部分和執(zhí)行部分;函數(shù)體由一對(duì)花括號(hào)“{}”括起來(lái)。⑸括在//內(nèi)的文本為注釋。⑹一行可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以寫在多行上。⑺程序區(qū)分大小寫字母。一般變量、語(yǔ)句等用小寫字母書寫;符號(hào)常量、宏名等用大寫字母書寫。⑻標(biāo)識(shí)符和保留字之間須加空格以示分隔。,53,C語(yǔ)言的字符集,C語(yǔ)言源程序中使用的字符來(lái)自C語(yǔ)言的字符集。字符集(CHARACTERSET)來(lái)自ASCII表52個(gè)大小寫字母(LETTERS)ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ10個(gè)數(shù)字(DIGITS)0123456789空白符(BLANKS)空格符、制表符、回車符、換行符圖形符號(hào)(GRAPHICCHARACTERS)“{},/,C語(yǔ)言快速入門,54,C語(yǔ)言的關(guān)鍵字,關(guān)鍵字(KEYWORDS)是C語(yǔ)言中的詞匯。也稱為保留字(RESERVEDWORDS)類型說(shuō)明INT、LONG、SHORT、FLOAT、DOUBLE、CHAR、UNSIGNED、SIGNED、CONST、VOID、VOLATILE、ENUM、STRUCT、UNION語(yǔ)句定義IF、ELSE、GOTO、SWITCH、CASE、DO、WHILE、FOR、CONTINUE、BREAK、RETURN、DEFAULT、TYPEDEF存儲(chǔ)類別說(shuō)明AUTO、REGISTER、EXTERN、STATIC長(zhǎng)度運(yùn)算符SIZEOF,C語(yǔ)言快速入門,55,C語(yǔ)言的標(biāo)識(shí)符,標(biāo)識(shí)符(IDENTIFIERS)是程序中引用對(duì)象的名稱。用來(lái)標(biāo)識(shí)變量、符號(hào)常量、數(shù)組、函數(shù)、結(jié)構(gòu)體、共用體、自定義類型等。命名規(guī)則只能包括大小寫字母、數(shù)字和下劃線;首字符必須是字母或下劃線;一般內(nèi)部標(biāo)識(shí)符的前31個(gè)字符有效,而外部標(biāo)識(shí)符的前6個(gè)字符有效;(視具體編譯器的規(guī)定)不能與關(guān)鍵字相同。,C語(yǔ)言快速入門,56,VISUALC60編程環(huán)境,舉例演示VISUALC60的基本操作創(chuàng)建工作區(qū)創(chuàng)建工程(程序)并添加到工作區(qū)創(chuàng)建源文件并添加到工程構(gòu)建工程(編譯、鏈接)運(yùn)行程序,C語(yǔ)言快速入門,57,程序的測(cè)試與調(diào)試,程序錯(cuò)誤語(yǔ)法錯(cuò)誤未遵循C的語(yǔ)法規(guī)則。編譯器可以檢查。運(yùn)行時(shí)錯(cuò)誤在程序運(yùn)行時(shí)執(zhí)行了無(wú)法處理的操作。邏輯錯(cuò)誤程序不能按照預(yù)期的方式運(yùn)行,不能產(chǎn)生預(yù)期的結(jié)果。,C語(yǔ)言快速入門,58,程序的測(cè)試與調(diào)試,程序測(cè)試審查和運(yùn)行程序,檢測(cè)程序是否存在錯(cuò)誤。測(cè)試步驟在編譯前仔細(xì)檢查程序的源代碼,看看是否有明顯的錯(cuò)誤。查看編譯器發(fā)現(xiàn)的語(yǔ)法錯(cuò)誤。對(duì)于運(yùn)行時(shí)錯(cuò)誤和邏輯錯(cuò)誤可以采用正確輸出測(cè)試。想找出所有錯(cuò)誤是不切實(shí)際的。,C語(yǔ)言快速入門,59,程序的測(cè)試與調(diào)試,程序調(diào)試隔離和修正錯(cuò)誤。調(diào)試方法采用手工方式來(lái)跟蹤程序。在程序中的關(guān)鍵點(diǎn)放置輸出語(yǔ)句來(lái)顯示變量的值。使用調(diào)試器。,C語(yǔ)言快速入門,60,小結(jié),C程序的基本結(jié)構(gòu)C語(yǔ)言程序是由一個(gè)或多個(gè)函數(shù)組成的。函數(shù)可以是標(biāo)準(zhǔn)庫(kù)函數(shù)和自定義的函數(shù)。C語(yǔ)言的語(yǔ)句可以包含一個(gè)表達(dá)式,也可以包含一個(gè)函數(shù)調(diào)用,以一個(gè)分號(hào)作為結(jié)束標(biāo)志。C語(yǔ)言中的變量在使用之前必須先聲明,通過(guò)聲明語(yǔ)句中為變量指定一個(gè)名字和數(shù)據(jù)類型??梢酝ㄟ^(guò)賦值運(yùn)算改變變量的值。C語(yǔ)言可以使用SCANF函數(shù)和PRINTF函數(shù)輸入和輸出數(shù)據(jù)。,C語(yǔ)言快速入門,61,小結(jié),編譯器可以發(fā)現(xiàn)程序中的語(yǔ)法錯(cuò)誤,但是程序中的運(yùn)行時(shí)錯(cuò)誤和邏輯錯(cuò)誤只有在程序運(yùn)行時(shí)才表現(xiàn)出來(lái)。檢測(cè)運(yùn)行時(shí)錯(cuò)誤和邏輯錯(cuò)誤的一種簡(jiǎn)單實(shí)用的方法是跟蹤程序的運(yùn)行狀態(tài),即程序每執(zhí)行一步之后所有或主要變量的值。,C語(yǔ)言快速入門,第三講基本數(shù)據(jù)類型,63,第三講基本數(shù)據(jù)類型,引例變量與常量預(yù)備知識(shí)內(nèi)儲(chǔ)存器的組織數(shù)據(jù)類型基本數(shù)據(jù)類型整數(shù)類型字符浮點(diǎn)類型,C語(yǔ)言程序設(shè)計(jì),64,引例,引例問(wèn)題計(jì)算任意一個(gè)圓的面積。源程序(CW0201C),基本數(shù)據(jù)類型,INCLUDEVOIDMAIN{FLOATR,AREA//定義變量SCANF“F”,//讀取輸入的半徑AREA314RR//計(jì)算圓的面積PRINTF“AREAF”,AREA//輸出},1AREA3140000,,,AREA,R,AREAЛR2,65,變量與常量,數(shù)據(jù)(DATA)程序需要使用數(shù)據(jù)。數(shù)據(jù)是信息的載體。數(shù)據(jù)有多種形式數(shù)、字符、圖片等。常量(CONSTANTS)在程序運(yùn)行之前可以預(yù)先設(shè)定,并在整個(gè)運(yùn)行過(guò)程中沒(méi)有變化的數(shù)據(jù)。例如引例中的圓周率314。變量(VARIABLES)在程序運(yùn)行過(guò)程中可能變化或被賦值的數(shù)據(jù)。例如引例中的半徑和面積。,基本數(shù)據(jù)類型,66,數(shù)據(jù)類型,數(shù)據(jù)類型的作用決定數(shù)據(jù)的存儲(chǔ)方式和占用的存儲(chǔ)空間的大小。決定可以進(jìn)行的操作。C語(yǔ)言的數(shù)據(jù)類型基本類型整型(INTEGER),字符型(CHARACTER),浮點(diǎn)型(FLOATINGPOINT),枚舉類型(ENUMERATION)構(gòu)造類型結(jié)構(gòu)體(STRUCTURE),共用體(UNION),數(shù)組(ARRAY)指針類型(POINTER)空類型(VOID),基本數(shù)據(jù)類型,67,,位、字節(jié)和字,內(nèi)存儲(chǔ)器的組織,基本數(shù)據(jù)類型,,位(BIT)最小的存儲(chǔ)單位,可以容納兩個(gè)值之一,即0或1。,,,,2000,2001,2002,字節(jié)(BYTE)基本的存儲(chǔ)單位,8位。,字(WORD)自然的存儲(chǔ)單位,包含若干個(gè)字節(jié)。例如32位機(jī)的一個(gè)字就是32位。,,地址以字節(jié)為單位從0開始編號(hào)。,68,整數(shù)的存儲(chǔ)方式,有符號(hào)的正整數(shù)在內(nèi)存中以二進(jìn)制補(bǔ)碼形式存放。正整數(shù)的補(bǔ)碼與原碼相同。例如10,基本數(shù)據(jù)類型
下載積分: 4 賞幣
上傳時(shí)間:2024-01-06
頁(yè)數(shù): 605
大?。?3.53(MB)
子文件數(shù):
-
簡(jiǎn)介:教材朱戰(zhàn)立編著,數(shù)據(jù)結(jié)構(gòu)使用C語(yǔ)言(第3版),西安交通大學(xué)出版社,2003年,數(shù)據(jù)結(jié)構(gòu),2,學(xué)時(shí)數(shù)70(50學(xué)時(shí)授課+20學(xué)時(shí)上機(jī))教材朱戰(zhàn)立編著,數(shù)據(jù)結(jié)構(gòu)(使用C語(yǔ)言)第3版,西安交通大學(xué)出版社,2003年參考書1嚴(yán)蔚敏等,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版),清華大學(xué)出版社2數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)指導(dǎo)與典型題解,朱戰(zhàn)立等編著,西安交通大學(xué)出版社,2002年,3,內(nèi)容安排,4,1、上課認(rèn)真聽(tīng)講,適當(dāng)做好筆記。2、考試成績(jī)分兩部分平時(shí)成績(jī)(包括出勤和上機(jī)實(shí)驗(yàn))占20,期末成績(jī)占80。3、課后需要多讀課文和參考書,上網(wǎng)查看相關(guān)內(nèi)容,在理解基本內(nèi)容的基礎(chǔ)上,多看、多做習(xí)題。4、上機(jī)實(shí)驗(yàn)十分重要,一定要在上機(jī)前做好充分準(zhǔn)備,多采用不同的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)和不同的實(shí)現(xiàn)算法解決一個(gè)問(wèn)題。,對(duì)學(xué)生的幾點(diǎn)要求,5,第1章緒論,討論5個(gè)問(wèn)題,11數(shù)據(jù)結(jié)構(gòu)的基本概念12抽象數(shù)據(jù)類型和軟件構(gòu)造方法14算法和算法的時(shí)間復(fù)雜度15算法書寫規(guī)范,6,11數(shù)據(jù)結(jié)構(gòu)的基本概念,1、舉例建立一個(gè)學(xué)生檔案系統(tǒng)。學(xué)生表包括學(xué)號(hào)、姓名、性別、籍貫。要求查找“王紅”是否存在。解決的方法步驟如何記錄所有學(xué)生記錄(及選擇何種邏輯數(shù)據(jù)結(jié)構(gòu))選擇何種存儲(chǔ)結(jié)構(gòu)若把所有記錄依次存儲(chǔ)在一個(gè)數(shù)組中采用順序存儲(chǔ)結(jié)構(gòu)若采用指針鏈表采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),7,為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)什么是程序、軟件N沃思(NIKLAUSWIRTH教授提出程序算法數(shù)據(jù)結(jié)構(gòu)以上公式說(shuō)明了如下兩個(gè)問(wèn)題(1)數(shù)據(jù)上的算法決定如何構(gòu)造和組織數(shù)據(jù)(算法→數(shù)據(jù)結(jié)構(gòu))。(2)算法的選擇依賴于作為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)結(jié)構(gòu)→算法)。軟件程序文檔(軟件工程的觀點(diǎn)),8,電子計(jì)算機(jī)的主要用途?早期主要用于數(shù)值計(jì)算。?后來(lái)處理逐漸擴(kuò)大到非數(shù)值計(jì)算領(lǐng)域(能處理多種復(fù)雜的具有一定結(jié)構(gòu)關(guān)系的數(shù)據(jù))。,數(shù)值計(jì)算解決問(wèn)題的一般步驟數(shù)學(xué)模型→選擇計(jì)算機(jī)語(yǔ)言→編出程序→測(cè)試→最終解答。數(shù)值計(jì)算的關(guān)鍵是如何得出數(shù)學(xué)模型(方程)程序設(shè)計(jì)人員比較關(guān)注程序設(shè)計(jì)的技巧。非數(shù)值計(jì)算問(wèn)題數(shù)據(jù)元素之間的相互關(guān)系一般無(wú)法用數(shù)學(xué)方程加以描述,10,例11電話號(hào)碼查詢問(wèn)題(1)按順序存儲(chǔ)方式須遍歷表(2)按姓氏索引方式索引要寫出好的查找算法,取決于這張表的結(jié)構(gòu)及存儲(chǔ)方式。電話號(hào)碼表的結(jié)構(gòu)和存儲(chǔ)方式?jīng)Q定了查找(算法)的效率。,,?非數(shù)值計(jì)算問(wèn)題,11,例12田徑賽的時(shí)間安排問(wèn)題(無(wú)向圖的著色問(wèn)題)設(shè)有六個(gè)比賽項(xiàng)目,規(guī)定每個(gè)選手至多可參加三個(gè)項(xiàng)目,有五人報(bào)名參加比賽(如下表所示)設(shè)計(jì)比賽日程表,使得在盡可能短的時(shí)間內(nèi)完成比賽。,,?非數(shù)值計(jì)算問(wèn)題,12,(1)設(shè)用如下六個(gè)不同的代號(hào)代表不同的項(xiàng)目跳高跳遠(yuǎn)標(biāo)槍鉛球100米200米ABCDEF(2)用頂點(diǎn)代表比賽項(xiàng)目不能同時(shí)進(jìn)行比賽的項(xiàng)目之間連上一條邊。(3)某選手比賽的項(xiàng)目必定有邊相連(不能同時(shí)比賽)。,,?非數(shù)值計(jì)算問(wèn)題田徑賽的時(shí)間安排問(wèn)題解法,13,只需安排四個(gè)單位時(shí)間進(jìn)行比賽,14,非數(shù)值計(jì)算問(wèn)題主要考慮的是設(shè)計(jì)出合適的數(shù)據(jù)結(jié)構(gòu)及相應(yīng)的算法。即首先要考慮對(duì)相關(guān)的各種信息如何表示、組織和存儲(chǔ)因此,可以認(rèn)為數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計(jì)算的程序設(shè)計(jì)問(wèn)題中計(jì)算機(jī)的操作對(duì)象以及它們之間的關(guān)系和操作的學(xué)科。,15,數(shù)據(jù)結(jié)構(gòu)課程的形成和發(fā)展形成階段60年代初期,“數(shù)據(jù)結(jié)構(gòu)”有關(guān)的內(nèi)容散見(jiàn)于操作系統(tǒng)、編譯原理和表處理語(yǔ)言等課程。1968年,“數(shù)據(jù)結(jié)構(gòu)”被列入美國(guó)一些大學(xué)計(jì)算機(jī)科學(xué)系的教學(xué)計(jì)劃。發(fā)展階段數(shù)據(jù)結(jié)構(gòu)的概念不斷擴(kuò)充,包括了網(wǎng)絡(luò)、集合代數(shù)論、關(guān)系等“離散數(shù)學(xué)結(jié)構(gòu)”的內(nèi)容。70年代后期,我國(guó)高校陸續(xù)開設(shè)該課程。,16,,,,17,數(shù)據(jù)結(jié)構(gòu)課程的地位,它是計(jì)算機(jī)專業(yè)及相關(guān)專業(yè)的核心課程之一,是計(jì)算機(jī)及相關(guān)專業(yè)的重要骨干基礎(chǔ)課程。它針對(duì)非數(shù)值計(jì)算的程序設(shè)計(jì)問(wèn)題,研究計(jì)算機(jī)的操作對(duì)象以及它們之間的關(guān)系和操作。即其研究目的是研究有效地組織和處理非數(shù)值類型數(shù)據(jù)的理論、技術(shù)和方法。,18,數(shù)據(jù)結(jié)構(gòu)課程所處的地位,19,數(shù)據(jù)結(jié)構(gòu)的核心研究?jī)?nèi)容,數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及它們之間的關(guān)系和相應(yīng)的基本操作運(yùn)算的定義和實(shí)現(xiàn)。本書圍繞數(shù)據(jù)結(jié)構(gòu)的三種基本結(jié)構(gòu)線性結(jié)構(gòu)(第25章)、樹形結(jié)構(gòu)(第7章)和圖形結(jié)構(gòu)(第8章)展開討論,研究解決如下問(wèn)題一個(gè)具體問(wèn)題的邏輯數(shù)據(jù)結(jié)構(gòu)是什么適宜選用什么樣的存儲(chǔ)結(jié)構(gòu)采用什么樣的操作實(shí)現(xiàn)算法效率更高,20,2、基本術(shù)語(yǔ),1數(shù)據(jù)所有能被計(jì)算機(jī)識(shí)別、存儲(chǔ)和處理的符號(hào)的集合(包括數(shù)字、字符、聲音、圖像等信息)。2數(shù)據(jù)元素是數(shù)據(jù)的基本單位,具有完整確定的實(shí)際意義。在計(jì)算機(jī)程序中通常作為一個(gè)整體進(jìn)行考慮和處理。一個(gè)數(shù)據(jù)元素可由若干個(gè)數(shù)據(jù)項(xiàng)組成。3數(shù)據(jù)項(xiàng)構(gòu)成數(shù)據(jù)元素的項(xiàng)目。它是數(shù)據(jù)不可分割的最小單位。4數(shù)據(jù)類型指一個(gè)類型和定義在這個(gè)類型上的操作集合。例C語(yǔ)言(基本類型整型、浮點(diǎn)型、字符型等構(gòu)造類型數(shù)組、結(jié)構(gòu)、聯(lián)合、指針、枚舉等),5抽象數(shù)據(jù)類型(ABSTRUCTDATATYPE,簡(jiǎn)稱ADT)是指一個(gè)數(shù)學(xué)模型以及定義在該模型上的一組操作。抽象數(shù)據(jù)類型的定義取決于它的一組邏輯特性,而與其在計(jì)算機(jī)內(nèi)部如何表示和實(shí)現(xiàn)無(wú)關(guān)。即不論其內(nèi)部結(jié)構(gòu)如何變化,只要它的數(shù)學(xué)特性不變,都不影響其外部的使用。6抽象數(shù)據(jù)元素抽象定義的、沒(méi)有實(shí)際含義的數(shù)據(jù)元素。,21,22,2、基本術(shù)語(yǔ)續(xù)),7數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。或按照一定邏輯關(guān)系組織,并按一定存儲(chǔ)方法存儲(chǔ)的數(shù)據(jù)的集合,且需要定義一系列運(yùn)算。邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和運(yùn)算合稱為三要素。表示為DATA_STRUCTURE(D,R)其中,D元素有限集,R關(guān)系有限集,23,,,,,,,,,,數(shù)據(jù)結(jié)構(gòu)涵蓋的內(nèi)容,24,集合結(jié)構(gòu)僅同屬一個(gè)集合線性結(jié)構(gòu)一對(duì)一(11樹結(jié)構(gòu)一對(duì)多(1N圖結(jié)構(gòu)多對(duì)多MN,,非線性,線性,,邏輯結(jié)構(gòu)可細(xì)分為4類,答指數(shù)據(jù)元素之間的邏輯關(guān)系。即從邏輯關(guān)系上描述數(shù)據(jù),它與數(shù)據(jù)的存儲(chǔ)無(wú)關(guān),是獨(dú)立于計(jì)算機(jī)的。,解釋1什么叫數(shù)據(jù)的邏輯結(jié)構(gòu),25,(1)SD,RD{A,B,C,D,E,F}R{A,E,B,C,C,A,E,F,F,D},解上述表達(dá)式可用圖形表示為,BCAEFD,此結(jié)構(gòu)為線性的。,,,,,,例用圖形表示下列數(shù)據(jù)結(jié)構(gòu),并指出它們是屬于線性結(jié)構(gòu)還是非線性結(jié)構(gòu)。,26,D1D5D2D4D3,,,,,,,,,,,該結(jié)構(gòu)是非線性的。,解上述表達(dá)式可用圖形表示為,(2)SD,RD{DI|1≤I≤5}R{DI,DJ,I0205040603線性結(jié)構(gòu),29,2、設(shè)有數(shù)據(jù)邏輯結(jié)構(gòu)為TREE{D,R},其中D{01,02,03,04,05,06,07,08}R{R};R{,,,,,,}試分析該數(shù)據(jù)結(jié)構(gòu)屬于哪種邏輯結(jié)構(gòu)樹型,30,作業(yè),什么是邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu),他們之間的關(guān)系如何,31,,設(shè)有數(shù)據(jù)邏輯結(jié)構(gòu)為L(zhǎng)INED,R其中D{A,B,C,D,E,F(xiàn),G};R{R};R{,,,,,}試畫出對(duì)應(yīng)的圖形并說(shuō)明屬于哪種邏輯結(jié)構(gòu),32,,將上述關(guān)系改為R{,,,,,}試畫出對(duì)應(yīng)的圖形并說(shuō)明屬于哪種邏輯結(jié)構(gòu),33,34,14什么是抽象數(shù)據(jù)類型,1數(shù)據(jù)類型與抽象數(shù)據(jù)類型的區(qū)別2抽象數(shù)據(jù)類型如何定義3抽象數(shù)據(jù)類型如何表示和實(shí)現(xiàn),討論,,35,1數(shù)據(jù)類型與抽象數(shù)據(jù)類型的區(qū)別,數(shù)據(jù)類型是一個(gè)值的集合和定義在該值上的一組操作的總稱。,抽象數(shù)據(jù)類型由用戶定義,用以表示應(yīng)用問(wèn)題的數(shù)據(jù)模型。它由基本的數(shù)據(jù)類型構(gòu)成,并包括一組相關(guān)的服務(wù)(或稱操作),它與數(shù)據(jù)類型實(shí)質(zhì)上是一個(gè)概念,但其特征是使用與實(shí)現(xiàn)分離,實(shí)行封裝和信息隱蔽(獨(dú)立于計(jì)算機(jī)),,36,2抽象數(shù)據(jù)類型如何定義,抽象數(shù)據(jù)類型可以用以下的三元組來(lái)表示ADT(D,R,P),ADT抽象數(shù)據(jù)類型名{數(shù)據(jù)對(duì)象數(shù)據(jù)關(guān)系基本操作}ADT抽象數(shù)據(jù)類型名,ADT常用定義格式,,,,,數(shù)據(jù)對(duì)象,D上的關(guān)系集,D上的操作集,37,143抽象數(shù)據(jù)類型如何表示和實(shí)現(xiàn),抽象數(shù)據(jù)類型可以通過(guò)固有的數(shù)據(jù)類型(如整型、實(shí)型、字符型等)來(lái)表示和實(shí)現(xiàn)。(參看課本P28,線性表的抽象數(shù)據(jù)類型,思考用具體C語(yǔ)言如何實(shí)現(xiàn)),注意上機(jī)時(shí)要必須用具體語(yǔ)言實(shí)現(xiàn),如C或C等,隊(duì)列的抽象數(shù)據(jù)類型定義ADTQUEUE{數(shù)據(jù)對(duì)象D{AI|AI∈ELEMSET,I1,2,,N,N≥0}數(shù)據(jù)關(guān)系R1{|AI1,AI∈D,I1,2,,N}約定A1為隊(duì)列頭,AN為隊(duì)列尾。基本操作INITQUEUE2執(zhí)行算法所消耗的存儲(chǔ)空間,其中主要考慮輔助存儲(chǔ)空間3算法應(yīng)該易于理解,易于編碼,易于調(diào)試等,43,時(shí)間復(fù)雜度TIMECOMPLEXITY,語(yǔ)句頻度FREQUENCYCOUNT語(yǔ)句重復(fù)執(zhí)行的次數(shù)語(yǔ)句的執(zhí)行時(shí)間語(yǔ)句頻度執(zhí)行一次所需時(shí)間算法的執(zhí)行時(shí)間所有語(yǔ)句執(zhí)行時(shí)間的總和算法的漸近時(shí)間復(fù)雜度ASYMPTOTICTIMECOMPLEXITY,簡(jiǎn)稱時(shí)間復(fù)雜度因?yàn)檎Z(yǔ)句的執(zhí)行時(shí)間取決于機(jī)器的硬件速度、指令類型、以及編譯所產(chǎn)生的代碼質(zhì)量,所以將算法中基本操作的最大語(yǔ)句頻度作為算法執(zhí)行時(shí)間的量度,它是問(wèn)題規(guī)模N的某個(gè)函數(shù)FN,44,時(shí)間復(fù)雜度表示法記作TNOFN(稱為大O表示法,表示隨問(wèn)題規(guī)模N的增大,算法執(zhí)行時(shí)間的增長(zhǎng)率和FN的增長(zhǎng)率相同。時(shí)間復(fù)雜度往往不是精確的執(zhí)行次數(shù),而是估算的數(shù)量級(jí),它著重體現(xiàn)的是隨著問(wèn)題規(guī)模N的增大,算法執(zhí)行時(shí)間的變化趨勢(shì)時(shí)間復(fù)雜度的數(shù)量級(jí)O1OLOG2NONONLOG2NON2ON3O2NO3NON,例如在下列三個(gè)程序段中AXX1;BFORI1INIXX1CFORJ1JNJFORK1KNKXX1基本語(yǔ)句均為XX1程序段A中頻度為1,則TNO1;程序段B中頻度為N,則TNON;程序段C中頻度為N2,則TNON2。,時(shí)間復(fù)雜度的求解,,算法11的時(shí)間復(fù)雜度VOIDSORTELEMTYPESMAXSIZE,INTN/對(duì)數(shù)組S中的N個(gè)數(shù)據(jù)按由大到小的順序排序并輸出,NMAXSIZE/{FORI1INIFORJI;JN;JIFSI.SCORE<SJ.SCORE{TSI;SISJ;SJT;}FORI1;IN;IPRINTF“???\N”,I,SINO,SISCORE}/SORT/∵算法中IF語(yǔ)句的執(zhí)行頻度為NN1N2321NN1/2∴TNON2,加法規(guī)則針對(duì)并列程序段TN,MT1NT2MOMAXFN,GM乘法規(guī)則針對(duì)嵌套程序段TN,MT1NT2MOFNGM算法11中既有并列程序段又有嵌套程序段并列程序段TNOMAXN2,NON2嵌套程序段TNOFNGNON2,有的情況下,算法中基本操作重復(fù)執(zhí)行的次數(shù)還隨問(wèn)題的輸入數(shù)據(jù)集不同而不同。例如VOIDBUBBLESORTINTA,INTNFORI1IAJ1{FLAG1AJ←→AJ1}}},分析算法復(fù)雜度最好情況0次最壞情況123N1NN1/2平均時(shí)間復(fù)雜度為ON2,50,空間復(fù)雜度度量(SPACECOMPLEXITY),空間是指執(zhí)行算法所需用的存儲(chǔ)空間存儲(chǔ)空間的固定部分程序指令代碼的空間,常數(shù)、簡(jiǎn)單變量、定長(zhǎng)成分如數(shù)組元素、結(jié)構(gòu)成員等變量所占的空間可變部分遞歸棧所用的空間、通過(guò)MALLOC和FREE等函數(shù)動(dòng)態(tài)使用的空間與問(wèn)題規(guī)模N的函數(shù)關(guān)系表示為S(N)O(FN),52,本章小結(jié),數(shù)據(jù)結(jié)構(gòu)課程數(shù)據(jù)結(jié)構(gòu)+算法=程序,涉及數(shù)學(xué)、計(jì)算機(jī)硬件和軟件。數(shù)據(jù)結(jié)構(gòu)定義指互相有關(guān)聯(lián)的數(shù)據(jù)元素的集合,可用DATA_STRUCTURED,R表示。數(shù)據(jù)結(jié)構(gòu)內(nèi)容數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和基本運(yùn)算。數(shù)據(jù)結(jié)構(gòu)描述工具抽象數(shù)據(jù)類型和C語(yǔ)言。算法效率時(shí)間效率和空間效率。,53,作業(yè),①課本P2512,13,14,17,110,111題。②建議獨(dú)立完成輔導(dǎo)材料第1章自測(cè)卷。③復(fù)習(xí)C語(yǔ)言,重點(diǎn)是結(jié)構(gòu)類型、指針和數(shù)組概念等。,
下載積分: 4 賞幣
上傳時(shí)間:2024-01-06
頁(yè)數(shù): 53
大?。?1.42(MB)
子文件數(shù):
-
簡(jiǎn)介:阿拉教你輕松學(xué)阿拉教你輕松學(xué)51系列(作者就抽精品)系列(作者就抽精品)發(fā)布20102051603|作者TIANKAI|來(lái)源電子園51單片機(jī)學(xué)習(xí)網(wǎng)阿拉教你輕松學(xué)51液晶篇1602寫在開始借此灌下水_之前,發(fā)了一個(gè)帖子,大意是看見(jiàn)殺手和水劍寫的帖子,心里也癢癢了,想寫一寫以前學(xué)習(xí)單片機(jī)過(guò)程中的一些經(jīng)歷,希望能給大家一點(diǎn)參考。無(wú)奈最近時(shí)間很是緊張,因此,一直都沒(méi)能著手整理。本打算星期六寫的,但是接到一個(gè)朋友的電話,說(shuō)想買CPLD的開發(fā)板。于是,計(jì)劃被迫打亂,只好先陪他去電子市場(chǎng)買板子?;貋?lái)之后,雖然頭很暈坐車的原因,但是不能再拖了,否則留給大家一個(gè)只說(shuō)不做的印象就不好了。雖然頭暈,但是下面的寫出來(lái)的東西可不暈。OK,LET’SGO1602字符液晶在實(shí)際的產(chǎn)品中運(yùn)用的也比較多了,前幾天留意了一下,發(fā)現(xiàn)宿舍門前的自動(dòng)售水機(jī)就是采用的1602液晶進(jìn)行顯示的。而且對(duì)于單片機(jī)的學(xué)習(xí)而言,掌握1602的用法是每一個(gè)學(xué)習(xí)者必然要經(jīng)歷的過(guò)程。在此,我將使用1602過(guò)程中遇到的問(wèn)題以及感受記錄下來(lái),希望能夠給初學(xué)者帶來(lái)一點(diǎn)指導(dǎo),少走一點(diǎn)彎路。所謂1602是指顯示的內(nèi)容為162即可以顯示兩行,每行16個(gè)字符。目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶。1602液晶的正面綠色背光,黑色字體HD44780內(nèi)置了DDRAM、CGROM和CGRAM。DDRAM就是顯示數(shù)據(jù)RAM,用來(lái)寄存待顯示的字符代碼。共80個(gè)字節(jié),其地址和屏幕的對(duì)應(yīng)關(guān)系如下表也就是說(shuō)想要在LCD1602屏幕的第一行第一列顯示一個(gè)“A“字就要向DDRAM的00H地址寫入“A”字的代碼就行了。但具體的寫入是要按LCD模塊的指令格式來(lái)進(jìn)行的,
下載積分: 9 賞幣
上傳時(shí)間:2024-03-15
頁(yè)數(shù): 68
大?。?1.64(MB)
子文件數(shù):
-
簡(jiǎn)介:第四課第四課數(shù)據(jù)類型數(shù)據(jù)類型先來(lái)簡(jiǎn)單說(shuō)說(shuō)C語(yǔ)言的標(biāo)識(shí)符和關(guān)鍵字。標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)源程序中某個(gè)對(duì)象的名字的,這些對(duì)象可以是語(yǔ)句、數(shù)據(jù)類型、函數(shù)、變量、數(shù)組等等。C語(yǔ)言是大小字敏感的一種高級(jí)語(yǔ)言,如果我們要定義一個(gè)定時(shí)器1,可以寫做“TIMER1“,如果程序中有“TIMER1“,那么這兩個(gè)是完全不同定義的標(biāo)識(shí)符。標(biāo)識(shí)符由字符串,數(shù)字和下劃線等組成,注意的是第一個(gè)字符必須是字母或下劃線,如“1TIMER“是錯(cuò)誤的,編譯時(shí)便會(huì)有錯(cuò)誤提示。有些編譯系統(tǒng)專用的標(biāo)識(shí)符是以下劃線開頭,所以一般不要以下劃線開頭命名標(biāo)識(shí)符。標(biāo)識(shí)符在命名時(shí)應(yīng)當(dāng)簡(jiǎn)單,含義清晰,這樣有助于閱讀理解程序。在C51編譯器中,只支持標(biāo)識(shí)符的前32位為有效標(biāo)識(shí),一般情況下也足夠用了,除非你要寫天書P。關(guān)鍵字則是編程語(yǔ)言保留的特殊標(biāo)識(shí)符,它們具有固定名稱和含義,在程序編寫中不允許標(biāo)識(shí)符與關(guān)鍵資亦同。在KEILUVISION2中的關(guān)鍵字除了有ANSIC標(biāo)準(zhǔn)的32個(gè)關(guān)鍵字外還根據(jù)51單片機(jī)的特點(diǎn)擴(kuò)展了相關(guān)的關(guān)鍵字。其實(shí)在KEILUVISION2的文本編輯器中編寫C程序,系統(tǒng)可以把保留字以不同顏色顯示,缺省顏色為天藍(lán)色。(標(biāo)準(zhǔn)和擴(kuò)展關(guān)鍵字請(qǐng)看附錄一中的附表11和附表12)先看表4-1,表中列出了KEILUVISION2C51編譯器所支持的數(shù)據(jù)類型。在標(biāo)準(zhǔn)C語(yǔ)言中基本的數(shù)據(jù)類型為INTSHTLONGFLOAT和DOUBLE,而在C51編譯器中INT和SHT相同,F(xiàn)LOAT和DOUBLE相同,這里就不列出說(shuō)明了。下面來(lái)看看它們的具體定義數(shù)據(jù)類型長(zhǎng)度值域UNSIGNED單字節(jié)0~255SIGNED單字節(jié)128~127UNSIGNEDINT雙字節(jié)0~65535SIGNEDINT雙字節(jié)32768~32767UNSIGNEDLONG四字節(jié)0~4294967295SIGNEDLONG四字節(jié)2147483648~2147483647FLOAT四字節(jié)1175494E38~3402823E381~3字節(jié)對(duì)象的地址BIT位0或1SFR單字節(jié)0~255SFR16雙字節(jié)0~65535SBIT位0或1表4-1KEILUVISION2C51編譯器所支持的數(shù)據(jù)類型1字符類型圖4-1第4課實(shí)驗(yàn)用電路我們把這個(gè)項(xiàng)目稱為TWOLED實(shí)驗(yàn)程序如下INCLUDE預(yù)處理命令VOIDMAINVOID主函數(shù)名UNSIGNEDINTA定義變量A為UNSIGNEDINT類型UNSIGNEDB定義變量B為UNSIGNED類型DODOWHILE組成循環(huán)FA0A65535AP1_0065535次設(shè)P10口為低電平,點(diǎn)亮LED
下載積分: 6 賞幣
上傳時(shí)間:2024-03-15
頁(yè)數(shù): 6
大?。?0.03(MB)
子文件數(shù):
-
簡(jiǎn)介:一、圖形操作基本簡(jiǎn)介一、圖形操作基本簡(jiǎn)介1必要的頭文件INCLUDEINCLUDEINCLUDEINCLUDEINCLUDE2必須的系統(tǒng)變量INTGRAPHDRIVERINTGRAPHMODEDOUBLEASPECTRATIOINTMAXXMAXYINTMAXCOLSINTERRCODESTRUCTPALETTETYPEPALETTE3初始化圖形界面初始化出錯(cuò)處理關(guān)閉圖形界面GRAPHDRIVERDETECTINITGRAPHINITGRAPHERRCODEGRAPHRESULTIFERRCODEGROKPRINTF“GRAPHICSSYSTEMERRSN“GRAPHERRMSGERRCODEEXIT1CLOSEGRAPHRETURNTHESYSTEMTOTEXTMODE4取得必須的信息GETPALETTEMAXCOLSGETMAXCOL1MAXXGETMAXXMAXYGETMAXYASPECTRATIODOUBLEXASPDOUBLEYASP5一些常用的畫圖函數(shù)OUTTEXTBUFFEROUTTEXTXYXYBUFFERLINEX0Y0X1Y1LINERELLIOCIRCLEINTXINTYINTRADIUSARCBARINTLINTTINTRINTBBAR3D本程序中的輸出全部是在圖形模式下,用到了畫點(diǎn)(PUTPIXLEINTXINTYINTCOL)畫線(LINEINTX1INTY1INTX2INTY2LIOINTXINTY)坐標(biāo)移動(dòng)及提取(MOVETOINTXINTYGETXGETYGETMAXXGETMAXY)設(shè)置顏色(SETCOLINTCOLSETBKCOLINTCOLGETCOLGETMAXCOL)畫框、設(shè)置點(diǎn)線的樣式等等。圖形系統(tǒng)的退出用CLOSEGRAPH函數(shù)實(shí)現(xiàn)。二、鼠標(biāo)操作簡(jiǎn)介二、鼠標(biāo)操作簡(jiǎn)介1鼠標(biāo)簡(jiǎn)介鼠標(biāo)系統(tǒng)實(shí)際上由兩個(gè)主要元素組成鼠標(biāo)機(jī)制和稱作鼠標(biāo)驅(qū)動(dòng)程序的內(nèi)存駐留程序。鼠標(biāo)驅(qū)動(dòng)程序提供與鼠標(biāo)通信所需的全部低級(jí)支持。此外,它自動(dòng)維持鼠標(biāo)光標(biāo)位置和發(fā)現(xiàn)是否按下了某個(gè)鍵。一旦裝入驅(qū)動(dòng)程序,鼠標(biāo)就可以被隨后執(zhí)行的任意程序使用。2鼠標(biāo)驅(qū)動(dòng)程序的主要功能可以通過(guò)PC中斷33H訪問(wèn)鼠標(biāo)和鼠標(biāo)驅(qū)動(dòng)程序的各種功能。所選擇的特定函數(shù)依賴于中斷時(shí)AX寄存器的值。三個(gè)其它寄存器(BX、CX和DX)用于把各種參數(shù)傳送給鼠標(biāo)例程。同樣,鼠標(biāo)函數(shù)使用這四個(gè)寄存器把鼠標(biāo)的位置和按鈕的狀態(tài)返回給調(diào)用函數(shù)。功能輸入值輸出值功能調(diào)用初始化無(wú)AXBXAX0000顯示光標(biāo)無(wú)無(wú)AX0001隱藏光標(biāo)無(wú)無(wú)AX0002讀取狀態(tài)無(wú)BXCXDXAX0003設(shè)置位置CX、DX無(wú)AX0004設(shè)置光標(biāo)BXCXDX無(wú)AX0009X范圍CXDX無(wú)AX0007Y范圍CXDX無(wú)AX0008光標(biāo)范圍CXDXSIDI無(wú)AX0010中斷程序CXESDX無(wú)AX000C3鼠標(biāo)功能調(diào)用方法用TC通過(guò)INT33H中斷來(lái)編制基本函數(shù),有三種常用方法嵌入?yún)R編程序,如ASMCLI清中斷利用全程變量賦予寄存器值,然后通過(guò)函數(shù)GENINTERRUPT調(diào)用中斷實(shí)現(xiàn)利用聯(lián)合類型REGS,SREGS通過(guò)函數(shù)INT86INT86X調(diào)用中斷,原型在在DOSH注意一下例程中預(yù)定義了如下全局變量DEFINETRUE1DEFINEFALSE0INTVISUALFALSETOTELLWHETHERTHEMOUSEICONISVISUALINITASFALSE4鼠標(biāo)的初始化INITMOUSE
下載積分: 6 賞幣
上傳時(shí)間:2024-03-10
頁(yè)數(shù): 6
大?。?0.06(MB)
子文件數(shù):
-
簡(jiǎn)介:實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康?熟練掌握函數(shù)的定義與使用實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容1有如下的一段程序,程序調(diào)用MAXT函數(shù)將兩個(gè)數(shù)中的最大值輸出,并根據(jù)最大值打印相應(yīng)行的號(hào)請(qǐng)定義PRINTAT函數(shù)、MAXT函數(shù)與PRINTNX函數(shù)并將主程序補(bǔ)充完整,使之正常運(yùn)行。INCLUDEVOIDMAININTA3B4MAXPRINTAT打印一行號(hào)PRINTF“打印AB行的號(hào)N“MAXMAXTABPRINTNXMAX打印MAX行號(hào)1無(wú)參無(wú)返回值函數(shù)無(wú)參無(wú)返回值函數(shù)函數(shù)名PRINTAT函數(shù)返回值無(wú)返回值函數(shù)參數(shù)無(wú)參數(shù)函數(shù)功能打印一行號(hào)2有參無(wú)返回值函數(shù)有參無(wú)返回值函數(shù)函數(shù)名PRINTNX函數(shù)返回值無(wú)返回值函數(shù)參數(shù)有一個(gè)參數(shù),(形式參數(shù)),是整型函數(shù)功能打印N行號(hào)3有參有返回值函數(shù)有參有返回值函數(shù)函數(shù)名MAXT函數(shù)返回值有返回值,函數(shù)類型為整型函數(shù)參數(shù)有兩個(gè)整型的參數(shù)函數(shù)功能返回A與B中的最大值閱讀知識(shí)閱讀知識(shí)如何在主函數(shù)中使用用戶自定義的函數(shù)如何在主函數(shù)中使用用戶自定義的函數(shù)VOIDPRINTNXINTNFINTI1IBZAELSEZBRETURNZ2有如下的一段程序,程序調(diào)用MAX3T函數(shù)將三個(gè)數(shù)中的最大值輸出,請(qǐng)定義MAX3T并將主程序補(bǔ)充完整,使之正常運(yùn)行。INCLUDEVOIDMAININTA3B4C8MAX
下載積分: 6 賞幣
上傳時(shí)間:2024-03-15
頁(yè)數(shù): 10
大?。?0.03(MB)
子文件數(shù):