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