版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、郝斌老師的C 語言:課堂講解全程動手敲代碼,講解細(xì)致,對于重要知識點(diǎn)的講解不厭其煩,是一個(gè)難得的C 語言入門教程。在這里對老師的辛勤付出表示感謝。郝斌 c 語言視頻教程概述:課程計(jì)劃為什么學(xué)習(xí) c 語言:Fortran 語言主要用于科學(xué)計(jì)算,在第三代語言中,以1980 年為分水嶺,分為結(jié)構(gòu)化和面向?qū)ο笳Z言。Basic 語言是 vb 的前生, pascal 語言一般是用于教學(xué)。C語言是最重要的,其他的語言一般很少用了。結(jié)構(gòu)化的代表語言是 c 語言。 結(jié)構(gòu)化語言 的數(shù)據(jù)和操作是分離的,導(dǎo)致在寫大項(xiàng)目的時(shí)候,會出現(xiàn)各種各樣莫名其妙的問題。在面向?qū)ο蟮恼Z言中 c+是最復(fù)雜的語言。由于 c+語言太復(fù)雜,
2、 sun 公司對 c+進(jìn)行了改裝,產(chǎn)生了 java 語言。而 c#是由微軟開發(fā)的,和java 相似,幾乎一模一樣。在高級語言的 執(zhí)行速度 上, c 是最快的, c+其次,而 java 和c#是最后的。 Java 和 c#流行,主要的一個(gè)原因是可以跨平臺。C語言的發(fā)展和過程:C語言的特點(diǎn) :優(yōu)點(diǎn):代碼量小,速度快,功能強(qiáng)大。缺點(diǎn):危險(xiǎn)性高,開發(fā)周期長,可移植性弱。危險(xiǎn)性高:寫同一個(gè)程序,在 java 中會報(bào)錯(cuò),而在 c 中不會報(bào)錯(cuò),為什么呢,因?yàn)?c 認(rèn)為程序你想怎么寫就怎么寫, c 語言認(rèn)為你寫的程序不是很離譜,他都認(rèn)為你寫的這個(gè)程序有特殊的含義??梢灾苯油ㄟ^,而 java 則不可以。開發(fā)周期
3、長: c 語言是面向過程的語言,面向過程的語言的特點(diǎn)就是在開發(fā)大項(xiàng)目的時(shí)候,很容易崩潰,好比蓋大樓, C 語言還要造大量的磚塊、鋼筋等結(jié)構(gòu)原材料,而 C+C#JAVA則進(jìn)行了一定的繼承封裝等操作,相當(dāng)于原材料直接給你,你只需要用它蓋樓即可。現(xiàn)在市場上的語言分三塊C/c+: 單純的學(xué)習(xí) c 是什么都做不了的。JavaC#可移植性不強(qiáng):這是針對java 來說的,因?yàn)閖ava 的可移植性太強(qiáng)了,所以就感覺說c 的可移植性不強(qiáng)。金山公司最主要是靠wps 辦公軟件來發(fā)展的。Wps是 c 語言開發(fā)的,其安裝包比Office少了 10 多倍。三大操作系統(tǒng) :windows, unix ,linuxWindo
4、ws內(nèi)核是 c 語言寫的,而外殼是c+寫的。 Java 永遠(yuǎn)不可能寫操作系統(tǒng)。因?yàn)閖ava 運(yùn)行速度太慢了。而 linux 和 unix 都是純 c 寫的。操作系統(tǒng)控制了硬件,如果說操作系統(tǒng)的運(yùn)行速度慢,那么當(dāng)我們在運(yùn)行軟件的時(shí)候,運(yùn)行速度會更慢。為什么使用 c 語言寫操作系統(tǒng) 呢,首先是因?yàn)?c 的運(yùn)行速度快,然后是因?yàn)?c 可以直接控制硬件,而其他語言不可以。 沒有指針的語言是不能直接訪問硬件的 。C語言的應(yīng)用領(lǐng)域 :驅(qū)動一般是用c 和匯編來寫的。數(shù)據(jù)庫一般是用c 和 c+來寫的C語言的重要性 :雖然應(yīng)用場合相對較窄,但貼近系統(tǒng)內(nèi)核,較底層。病毒最基本的是要感染系統(tǒng),數(shù)據(jù)結(jié)構(gòu), c,c+這
5、三門語言是必須要學(xué)習(xí)的。牛人牛語:怎樣學(xué)習(xí) c 語言要將編程當(dāng)成一項(xiàng)事業(yè)來經(jīng)營,而不是糊口的工具。多思考,多上機(jī)。不能光看,光聽,而要排錯(cuò),調(diào)試。在犯錯(cuò)誤中成長。參考資料王爽寫的 c+也很不錯(cuò)學(xué)習(xí)的目標(biāo) :掌握簡單的算法 - 解決問題的方法和步驟。熟悉語法規(guī)則。能看懂程序并調(diào)試程序。C語言的 關(guān)鍵字 :C語言程序的 格式:一定要養(yǎng)成良好的習(xí)慣:代碼規(guī)范邊寫邊保存,括號成對出現(xiàn),應(yīng)用空格軟件操作:新建保存關(guān)閉(關(guān)閉空間).cpp 是原始文件,可單獨(dú)拷貝到其它電腦。第二講:( 14)c 語言編程 必備知識Cpu,內(nèi)存條,硬盤,顯卡,主板,顯示器之間關(guān)系。Cpu不能直接處理硬盤上的數(shù)據(jù),必須要先調(diào)入
6、內(nèi)存Helloword 程序是如何運(yùn)行起來的。什么是數(shù)據(jù)類型數(shù)據(jù)類型 - 數(shù)據(jù)的分類,對編程而言,首要考慮問題是數(shù)據(jù)的輸入和存儲??梢苑譃锳:基本數(shù)據(jù)類型:整型整型 int-4 字節(jié)一字節(jié) byte=8 位 bit短整型 shortint-2長整型 longint-8浮點(diǎn)型單精度浮點(diǎn)數(shù) float :存儲范圍小 -4 雙精度浮點(diǎn)數(shù) double :存儲范圍大 -8Float和 Double 都不能保證將小數(shù)完全準(zhǔn)確保存。字符 char :c 語言中是沒有字符串string-1(區(qū)別于 JAVA、C#中有 string且 C#中 char 為 2 字節(jié))B:復(fù)合類型:就是把基本類型拼湊在一起結(jié)構(gòu)
7、體枚舉 - 實(shí)用共用體基本淘汰4什么是變量變量的本質(zhì) 是內(nèi)存中一段存儲空間。IntI;i=5;I是變量,程序向系統(tǒng)申請了一個(gè)內(nèi)存單元,在程序運(yùn)行中, i 的值可以改變,但程序結(jié)束后,其所占的空間不是釋放,而是被系統(tǒng)收回權(quán)限。Cpu,內(nèi)存條, vc+,操作系統(tǒng)之間的關(guān)系。6 變量為什么必須初始(即賦值)軟件在運(yùn)行前需要向操作系統(tǒng)申請存儲空間,在內(nèi)存空間足夠空閑時(shí),操作系統(tǒng)將分配一段內(nèi)存空間并將該外存中軟件拷貝一份存入該內(nèi)存空間中,并啟動該軟件運(yùn)行。在軟件運(yùn)行期間,該軟件所占內(nèi)存空間不再分配給其他軟件。當(dāng)該軟件運(yùn)行完畢后, 操作系統(tǒng)將回收該內(nèi)存空間 (注意:操作系統(tǒng)并不清空該內(nèi)存空間遺留下來的數(shù)據(jù)
8、) ,以便再次分配給其他軟件使用。操作系統(tǒng) 一門課中系統(tǒng)分配表中會講到,用 1 標(biāo)記表示內(nèi)在是被占用的,用0 標(biāo)記表示是空閑的。綜上所述,一個(gè)軟件所分配到的空間中極可能存在著以前其他軟件使用過后的殘留數(shù)據(jù),這些數(shù)據(jù)被稱之為 垃圾數(shù)據(jù),所以通常情況下我們?yōu)橐粋€(gè)變量,為一個(gè)數(shù)組,分配好存儲空間之前都要對該內(nèi)存空間初始化。如何定義變量數(shù)據(jù)類型變量名稱 =賦予的值;等價(jià)于數(shù)據(jù)類型變量名;變量名 =要賦予的值;舉例子:inti=3; 等價(jià)于 inti ;i=3 ; Inti ,j ;等價(jià)于 inti ; intj ;Inti,j=3 等價(jià)于 inti;intj;j=3;IntI=3 , j=5 ;等價(jià)于
9、 inti;intj;I=3 ; j=5 ;什么是進(jìn)制 逢幾進(jìn)一我們規(guī)定八進(jìn)制前面加 0(零),十六進(jìn)制前面加 0 x。常用計(jì)數(shù)制對照表:Printf 的基本用法:常量在 c 中是如何表示的當(dāng)個(gè)字符使用單引號括起來,多個(gè)字符串使用雙引號括起來(指針、數(shù)組)。在 c 中,默認(rèn)是 double 類型的。在后面加 F 表示當(dāng)做 float來處理,否則會有警告提示- 丟失部分字節(jié)。10常量以什么樣的二進(jìn)制代碼存儲在計(jì)算機(jī)中?編碼:整數(shù)是以補(bǔ)碼的形式轉(zhuǎn)換為二進(jìn)制代碼存儲在計(jì)算機(jī)浮點(diǎn)數(shù)是以 ieee754 標(biāo)準(zhǔn)轉(zhuǎn)換為二進(jìn)制代碼存儲字符本質(zhì)實(shí)際是與整數(shù)的存儲方式相同,ASII 碼標(biāo)準(zhǔn)。第三次課:代碼規(guī)范化可
10、以參考林銳高質(zhì)量c/c+ 編程代碼的規(guī)范化非常的重要,是學(xué)習(xí)一門編程語言的基礎(chǔ),代碼可以允許錯(cuò)誤,但不能不規(guī)范。例如:成對敲括號 ()加空格于運(yùn)算符和數(shù)字之間I=1+2;加縮進(jìn)分清上下級地位。換行 - 進(jìn)行功能區(qū)域分隔or 括號單獨(dú)成一行。代碼規(guī)范化的好處1:整齊,別人和自己都容易看懂。2:代碼規(guī)范了,代碼不容易出錯(cuò)。3:一般的程序可以分為三塊:定義變量b:對變量進(jìn)行操作輸出值什么是字節(jié)存儲數(shù)據(jù)的單位,并且是 硬件所能訪問的最小單位 。內(nèi)存中存儲的最小單位是位bit(0或 1) ,但是硬件控制的時(shí)候不能精確到位,只能精確到字節(jié)(8 位),是通過地址總線來控制的,而精確到位是通過軟件來控制的,叫
11、做位運(yùn)算符來精確到位的。1 字節(jié) =8 位 1K=1024字節(jié)1M=1024K1G=1024 M1T=1024 G2G的內(nèi)存條 的總空間: 2*1024*1024*1024*8=4*10 32不同類型數(shù)據(jù)之間相互賦值的問題不同數(shù)據(jù)類型之間最好不要相互轉(zhuǎn)換。如果需要明白這個(gè)知識點(diǎn),那么需要明白補(bǔ)碼 。什么是 ASCII 碼以 char 定義變量的時(shí)候,只能使用單引號括起一個(gè)字符才是正確的。在上圖中注釋的最后一樣是重復(fù)定義了ch 的值,是錯(cuò)誤的,而下面的 ch=c是指把 c 賦值給 ch,是正確的。上圖中輸出的值是98( 將字符以整數(shù) %d的形式輸出 )Ascll碼規(guī)定了 ch 是以哪個(gè)值去保存,
12、ascii碼不是一個(gè)值,而是一種規(guī)定,規(guī)定了不同的字符是以哪個(gè)整數(shù)值去表示。其它規(guī)定還有 GB2312UTF-8等。字符本質(zhì)上與整數(shù)的存儲方式相同【字符的存儲】基本的輸入和輸出函數(shù)的用法:第三次課Printf()將變量的內(nèi)容輸出到顯示器上。四種用法輸什么是輸出控制符,什么是非輸出控制符輸出控制符包含如下:Printf為什么需要輸出控制符:01 組成的代碼可以表示數(shù)據(jù)也可以表示指令。必須要有輸出控制符告訴他怎么去解讀。如果 01 組成的代碼表示的是數(shù)據(jù)的話,那么同樣的01 代碼組合以不同的格式輸出就會有不同的輸出結(jié)果,所以必須要有輸出控制符。在上圖中, intx=47 ,如果前面加0(零)048
13、 表示的是八進(jìn)制,如果前面加 0 x(零 x)0X47則表示的是十六進(jìn)制,而在輸出的時(shí)候,則是 o( 字母 o) 表示八進(jìn)制 , ox(字母 o, x)表示十六進(jìn)制。非輸出控制符 :非輸出控制符在輸出的時(shí)候會原樣輸出。Scanf ()通過鍵盤將數(shù)據(jù)輸入到變量中有兩種用法:示例:非輸入控制符:在輸入的時(shí)候也會原樣輸入。但是強(qiáng)烈建議:在使用scanf 的時(shí)候,不使用非輸入控制符。給多個(gè)變量賦值:需要記住,非控制符需要原樣輸入。如何使用 scanf 編寫出高質(zhì)量代碼運(yùn)算符:算術(shù)運(yùn)算符:加( +),減()乘( * )除( / )取余( %)關(guān)系運(yùn)算符:,=,關(guān)系 邏輯 賦值 。取余的結(jié)果的正負(fù)只和被除
14、數(shù)有關(guān)。第四節(jié)流程控制(第一個(gè)重點(diǎn)):1 什么是流程控制程序代碼執(zhí)行的順序。2 流程控制的 分類順序執(zhí)行選擇執(zhí)行定義:某些代碼可能執(zhí)行,可能不執(zhí)行,有選擇的執(zhí)行某些代碼。分類: ifIf最簡單的用法:如果想控制多個(gè)語句的執(zhí)行或者不執(zhí)行,那么需要使用 括起來。else 的用法:if elseifelse的用法:C錯(cuò)誤的 if elseifelse語句:在上圖中,當(dāng)執(zhí)行到哈哈那句時(shí),下面的else 將會被算作另外一個(gè)語句來執(zhí)行,而在我們的c 語言中,沒有以else 開頭的語句。所以會出錯(cuò)。If實(shí)例:If常見的問題:變量的替換 :求三個(gè)數(shù)字的大小:C語言常見誤區(qū) :紙老虎素?cái)?shù):只能被1 和自己整除的
15、數(shù),如1,5,9 等?;匚臄?shù):正著寫和倒著寫一樣的數(shù)。如1221,121 ,等編程實(shí)現(xiàn)求一個(gè)十進(jìn)制數(shù)字的二進(jìn)制形式:求一個(gè)數(shù)字的每位是奇數(shù)的數(shù)字取出來組合形成的新數(shù)字。求一個(gè)數(shù)字到過來的數(shù)字。1:如果不懂,那么就看答案??炊鸢冈谇谩]錯(cuò)誤了,在嘗試改。如何看懂一個(gè)程序 :流程:每個(gè)語句的功能:試數(shù):對一些小算法的程序 :嘗試自己編程結(jié)局。解決不了,看答案。關(guān)鍵是把答案看懂??炊髧L試自己修改程序, 且知道修改之后程序的不同輸出結(jié)果的含義。照著答案去敲調(diào)試錯(cuò)誤不看答案,自己獨(dú)立把程序編出如果程序?qū)嵲谑菑氐谉o法了解,就把他背會。空語句的問題:在上圖中,最終的結(jié)果會是AAAA,BBBB,程序也不
16、會報(bào)錯(cuò),為什么呢,因?yàn)樵诔绦驁?zhí)行的時(shí)候,會在;哪里認(rèn)為是一個(gè)空語句。也就是說,如果if成立,那么執(zhí)行空語句。If常見錯(cuò)誤解析(重點(diǎn))上面這個(gè)程序是錯(cuò)誤的,為什么呢,在該程序中,總的有 4 個(gè)語句,而在以 else 開頭的那個(gè)語句中是有錯(cuò)誤的,因?yàn)樵?c 語言中是沒有以 else 開頭的這種語法。在上面這個(gè)程序中,最終的值是AAAA,雖說后面的 31 也滿足條件,但是當(dāng) 32 滿足條件后,該if 語句就會終止,后面的語句是不會在執(zhí)行的。既然 7 行要寫表達(dá)式,就要寫if 。循環(huán)的定義、分類。定義:某些代碼會被重復(fù)執(zhí)行。分類: forwhiledo while在上圖中,先執(zhí)行 1,在執(zhí)行 2,2
17、如果成立,標(biāo)志著循環(huán)成立,那么在執(zhí)行 4,最后在執(zhí)行 3,3 執(zhí)行完后代表一次循環(huán)完成,然后在執(zhí)行 2. 以此類推。 1 永遠(yuǎn)只執(zhí)行一次。+I 等價(jià)于 i+1求 1-10 的所有奇數(shù)的和:求 1-12 之間的所有能被3 整除的數(shù)字之和:For 所控制的語句:在上圖中, for 默認(rèn)只能控制一個(gè)語句,但是如果要控制多個(gè)語句時(shí)候,那么需要使用 把語句括起來。求 1+1/2+1/3 .1/100 的和在上圖中,重點(diǎn)是強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換也就是 (float)(i)那句:如果把 print那句換為下面這句會怎么樣呢:也是錯(cuò)的,為什么呢,因?yàn)閕 是整型, 1 也是整型,所以不管你怎么轉(zhuǎn)換也是整型啊,如果想要
18、這樣寫的話,那么我們需要把 1 改成也可以的。也就是:試數(shù)詳細(xì)步驟舉例:浮點(diǎn)數(shù)存取 :求 1-100 之間所有奇數(shù)的和:求 1-100 之間的奇數(shù)的個(gè)數(shù):求 1-100 之間奇數(shù)的平均值:求 1-100 之間的奇數(shù)之和,在求 1-100 之間的偶數(shù)之和:多個(gè) for 循環(huán)的嵌套 使用:整體是兩個(gè)語句。上圖中,先執(zhí)行 1,在執(zhí)行 2,如果 2 成立,執(zhí)行 4,在執(zhí)行5,如果 5 成立執(zhí)行 A, 在執(zhí)行 6,在執(zhí)行 5,如果 5 不成立,意味著里面的循環(huán)結(jié)束,然后執(zhí)行3,在執(zhí)行 2,如果 2 成立又執(zhí)行 4,在執(zhí)行 5,如果 5 成立在執(zhí)行 6,在執(zhí)行 5,如果 5 不成立,在執(zhí)行 3,在執(zhí)行 2
19、,如果 2 不成立,意味著本次循環(huán)結(jié)束,在執(zhí)行 B,在上圖中,需要注意的是,如果 2 成立的話,那么每次 4 都需要執(zhí)行。進(jìn)制之間的轉(zhuǎn)換 :如 234 為 5 進(jìn)制,那么轉(zhuǎn)換成 10 進(jìn)制是多少:2x5x5+3x5+4 的值就是轉(zhuǎn)換成的10 進(jìn)制。234e 是 16 進(jìn)制,轉(zhuǎn)換成2 進(jìn)制是多少:2x16x16x16+3x16x16+4x16+12 的值就是轉(zhuǎn)換成10 進(jìn)制的值。注意上面的規(guī)律。那么把十進(jìn)制轉(zhuǎn)換成 r 進(jìn)制呢,其實(shí)很簡單,就是把 10 進(jìn)制數(shù)除以 r ,直到商是 0 的時(shí)候。然后取余數(shù),余數(shù)倒序排列:瑣碎的運(yùn)算符:自增:自減:和自增一樣。三目運(yùn)算符:最終的輸出結(jié)果是1.逗號表達(dá)式
20、 :最終結(jié)果是 6.上圖中,逗號是個(gè)順序點(diǎn),即所有的副作用必須在下個(gè)語句前生效,其最后結(jié)果為 1,j+2 只是產(chǎn)生臨時(shí)值,并沒有把 j+2 的值賦個(gè) j 。如果寫成 j+=2 ,那最后的值則變?yōu)?5.For 的嵌套使用舉例:上例中輸出的結(jié)果是9 個(gè)哈哈, 1 個(gè)嘻嘻。在上圖中,整個(gè)程序分成3 個(gè)語句,輸出的結(jié)果是3 個(gè)嘿嘿, 3個(gè)哈哈, 1 個(gè)嘻嘻。其結(jié)果是:While (先付錢后吃飯)1:執(zhí)行的順序:2:與 for 的相互比較:用 for 來求 1-100 之和:用 while實(shí)現(xiàn) 1-100 之和。只需要把for 語句替換為:For 和 while 是可以相互轉(zhuǎn)換 的,可以用下面的表達(dá)式來
21、表示:While 和 for 在邏輯上完全等價(jià),但是for 在邏輯上更強(qiáng)。更容易理解,更不容易出錯(cuò)。推薦多使用for 。3:while 舉例:試數(shù):通過上面的試數(shù),應(yīng)該能很快的理解回文數(shù)的算法。4:什么時(shí)候使用while ,什么時(shí)候使用for :沒法說,用多了就自然而然知道了Dowhile (先吃飯后付錢)一元二次方程:Switch 的用法 :電梯程序:Case是程序的入口,當(dāng)進(jìn)入程序后,程序會從上往下執(zhí)行,如果有 break ,那么會中斷程序,如果沒有,那么會一直執(zhí)行。Break 的用法:在多層循環(huán)中, Break 只能終止他最近的循環(huán)。在多層 switch 中, break 也是只能終止距
22、離他最近的 switch 。 Break 只能用于循環(huán)和 switch ,不能用于 if 。如果用于 if ,必須要當(dāng)循環(huán)中嵌套if的時(shí)候。Continue 的用法 :上圖中,如果執(zhí)行continue ,那么 C,D 將不會被執(zhí)行,會執(zhí)行3.在上圖中,如果執(zhí)行了continue ,那么后面的C,D 將不再執(zhí)行,而會去執(zhí)行表達(dá)式。數(shù)組: - 非重點(diǎn)數(shù)組的使用:為什么需要數(shù)組1:為了解決大量同類型數(shù)據(jù)的存儲和使用問題。2:用數(shù)組可以模擬現(xiàn)實(shí)世界。Inta25:Inta86:一維數(shù)組,可以當(dāng)做一個(gè)線性結(jié)構(gòu)。可以當(dāng)做一個(gè)平面,意思是 8 行6 列。有48 個(gè)元素。Inta345:可以當(dāng)做一個(gè)三維立體。
23、Inta3456:可以當(dāng)做一個(gè)四維空間。數(shù)組的分類一維數(shù)組怎樣定義一維數(shù)組:為 n 個(gè)變量分配存儲空間:數(shù)組內(nèi)存空間是連續(xù)的。所有的 變量類型必須相同 :數(shù)組不可能第一個(gè)元素是整形,第二個(gè)元素是浮點(diǎn)型。所有變量所占用的字節(jié)必須相等 。例子:int5數(shù)組不是學(xué)習(xí)重點(diǎn)的原因?數(shù)組一旦定義,其長度是死的。有關(guān)一維數(shù)組的操作 - 都需要自己另外編程序?qū)崿F(xiàn)而我們通常用第三方軟件(工具)如數(shù)據(jù)庫等方便直接地實(shí)現(xiàn)。對數(shù)組的操作:初始化賦值排序求最大/ 小值倒置查找插入刪除初始化:上圖中 a5 前面如果沒有加上數(shù)據(jù)類型,那么這里的a5不是指一個(gè)數(shù)組,其中的5 只的是下標(biāo)。上圖中,數(shù)組的 5 個(gè)元素不是用 a
24、來代表的,是用 a0,a1 a4 來代表的,所以說數(shù)組名 a 代表的不是數(shù)組的 5 個(gè)元素, 數(shù)組名代表的是數(shù)組的第一個(gè)元素的地址 。賦值把一個(gè)數(shù)組元素給全部倒過來:排序求最大 / 小值倒置查找插入刪除二維數(shù)組:二維數(shù)組的初始化:輸出二維數(shù)組內(nèi)容:多維數(shù)組 :是否存在多維數(shù)組 :不存在因?yàn)閮?nèi)存是線性一維 的,在內(nèi)存中是不分行不分列的。N維數(shù)組可以當(dāng)做每個(gè)元素是n-1 維數(shù)組的一維數(shù)組。函數(shù)(第二個(gè)重點(diǎn)):為什么需要函數(shù):避免了重復(fù)性操作。有利于程序的模塊化。(自上而下,逐步細(xì)化,大問題分解成小問題)用它作為參照,可以對比JAVA和 C#面向?qū)ο蟮乃枷?。C語言基本單位是函數(shù),C#、C+和 JAV
25、A基本單位是類。什么叫做函數(shù)邏輯上:能夠完成特定功能的獨(dú)立的代碼塊。物理上:能夠接收數(shù)據(jù)【也可以不接收數(shù)據(jù)】,能夠?qū)邮盏臄?shù)據(jù)進(jìn)行處理【也可以不對數(shù)據(jù)進(jìn)行處理】,能夠?qū)?shù)據(jù)處理的結(jié)果返【也可以沒有返回值】??偨Y(jié): 函數(shù)是個(gè)工具,他是為了解決大量類似問題而設(shè)計(jì)的,函數(shù)可以當(dāng)做黑匣子(內(nèi)部原理不用管)。如何定義函數(shù)函數(shù)的返回值,函數(shù)的名字(函數(shù)的形參列表)函數(shù)的執(zhí)行體函數(shù)定義的本質(zhì):詳細(xì)描述函數(shù)之所以能夠?qū)崿F(xiàn)某個(gè)特定功能的具體方法。函數(shù)中的變量叫做形參;數(shù)組中的變量叫元素。一旦函數(shù)執(zhí)行完畢,其內(nèi)部的形參所占空間就被收回。 return表達(dá)式的含義 :Return 是終止被調(diào)函數(shù),向主調(diào)函數(shù)返回表達(dá)
26、式的值,如果表達(dá)式為空,則只終止函數(shù),不向被主函數(shù)返回任何值。Break 是用來終止(就近的)循環(huán)和switch 語句。而 return是用來終止被調(diào)函數(shù)的。 函數(shù)返回值的類型 ,也稱為函數(shù)的類型,因?yàn)槿绻瘮?shù)名前的返回值類型和函數(shù)執(zhí)行體中的return表達(dá)式中表達(dá)式的類型不同的話,則最終函數(shù)返回值的類型以函數(shù)名前的返回值類型為準(zhǔn)。例:在上圖中,函數(shù)的返回值以函數(shù)前的數(shù)值類型為準(zhǔn)。函數(shù)的分類有參函數(shù)和無參函數(shù)。有返回值和無返回值。庫函數(shù)和用戶自定義函數(shù)。普通函數(shù)和主函數(shù)(main 函數(shù))1:一個(gè)程序有且只有一個(gè)主函數(shù)。2:主函數(shù)可以調(diào)用普通函數(shù),普通不能調(diào)用主函數(shù)。3:普通函數(shù)可以相互調(diào)用。4
27、:主函數(shù)是程序的入口,也是函數(shù)的出口。5:值傳遞函數(shù)和地址傳遞函數(shù)。判斷一個(gè)數(shù)是否是素?cái)?shù):使用函數(shù)判斷一個(gè)數(shù)是否是素?cái)?shù):函數(shù)和程序的調(diào)用應(yīng)該注意的地方:函數(shù)的聲明:當(dāng)函數(shù)沒有返回值時(shí),那么規(guī)范的寫法是要在函數(shù)中寫明 void 的。在上圖中,第一個(gè) void 表示沒有返回值,而第二個(gè) void 表示不接收形參,也就是函數(shù)不接收數(shù)據(jù)。如果想把函數(shù)寫在程序的后面,那么需要寫函數(shù)聲明:函數(shù)聲明的含義 是告訴編譯器 f() 是個(gè)函數(shù)名。如果不加函數(shù)聲明,那么編譯器在編譯到 f 的時(shí)候,不知道 f 是個(gè)什么,如果加了函數(shù)聲明,那么編譯器編譯到 f 的時(shí)候,就知道 f 是個(gè)函數(shù)。需要注意的是,調(diào)用語句需要放
28、在定義語句的后面,也就是說,定義函數(shù)的語句要放在調(diào)用語句的前面。如果函數(shù)調(diào)用寫在了函數(shù)定義的前面,則必須加函數(shù)前置聲明,函數(shù)前置聲明的作用是:1:告訴編譯器即將可能出現(xiàn)的若干個(gè)字母代表的是一個(gè)函數(shù)?!按蛘泻簟?:告訴編譯器即將可能出現(xiàn)的若干個(gè)字母所代表的函數(shù)的形參和返回值的具體情況。3:函數(shù)聲明必須是一個(gè)語句,也就是在函數(shù)聲明后需加分號。4:對庫函數(shù)的聲明也就是系統(tǒng)函數(shù)。是通過#include 來實(shí)現(xiàn)的。如形參和實(shí)參要求:1:形參和實(shí)參個(gè)數(shù)是一一對應(yīng)的。2:形參和實(shí)參的位置也是一一對應(yīng)的。形參和實(shí)參的數(shù)據(jù)類型需要相互兼容。如何在軟件開發(fā)中合理的設(shè)計(jì)函數(shù)來解決實(shí)際問題。求 1 到某個(gè)數(shù)字之間的數(shù)
29、是否是素?cái)?shù),并將他輸出:合理設(shè)計(jì)函數(shù) 1合理設(shè)計(jì)函數(shù)2:合理設(shè)計(jì)函數(shù)3:合理的設(shè)計(jì)函數(shù)4:合理設(shè)計(jì)函數(shù)5:常用的系統(tǒng)函數(shù) 和如何通過書籍來學(xué)習(xí)函數(shù):實(shí)用大全機(jī)械工業(yè)出版社遞歸:(略)棧:相當(dāng)于一個(gè)杯子(容器)變量的作用域和存儲方式:全局變量和局部變量:局部變量:局部變量的使用范圍只能在本函數(shù)內(nèi)部使用。全部變量:全局變量和局部變量命名沖突的問題:在同一個(gè)范圍之內(nèi)不能定義兩個(gè)一樣的局部變量:在一個(gè)函數(shù)內(nèi)部,如果定義的局部函數(shù)的名字和全局變量名一樣時(shí),局部變量會屏蔽掉全局變量 :上例中最終的輸出結(jié)果是 8,因?yàn)榫植孔兞堪讶肿兞拷o屏蔽掉了。指針:( C語言的靈魂)內(nèi)存的存儲是以一個(gè)字節(jié)為一個(gè)編號,也
30、就是8 位合在一起給一個(gè)編號,不是0,1 就給編號。內(nèi)存分為很多個(gè)單元,每個(gè)單元就會分配一個(gè)編號。地址:內(nèi)存單元的一個(gè)編號。而指針和地址一個(gè)概念的。也就是說指針就是地址 。普通變量:只能存放一個(gè)值。指針變量:同樣是一個(gè)變量,但是指針變量存放其他變量的地址。*p 代表的是 p 所指向的那個(gè)變量。在上圖中*p 和 i 是同一個(gè)東西,但是 *p 和 p 不是同一個(gè)東西。在上圖中, int*p是一個(gè)聲明,開頭的int* 是他的數(shù)據(jù)類型。是變量的名字。不能理解我定義了一個(gè)整形變量,這個(gè)整形變量的名字叫做 *p 。所謂 int* 類型,實(shí)際就是存放 int 變量地址的類型。*p 代表的是以 p 的內(nèi)容為地
31、址的變量。解析: p 的內(nèi)容是一個(gè)地址,在上圖中, p 的內(nèi)容就是 i 的地址, *p 其指向的變量當(dāng)然就是 i 變量了。指針和指針變量:指針就是地址,地址就是指針。地址就是內(nèi)存單元的編號。指針變量:存放地址的變量。而指針只是一個(gè)值,這個(gè)值是內(nèi)存單元的一個(gè)編號。指針變量才是一個(gè)變量,他里面才可以存放數(shù)據(jù)。指針和指針變量是兩個(gè)不同的概念,但是需要注意的是,通常我們在敘述時(shí)會把指針變量簡稱為指針,實(shí)際他們含義并不一樣。指針的重要性:指針的分類 :指針的定義: 地址:內(nèi)存單元的編號,是一個(gè)從 0 開始的非負(fù)整數(shù) 。范圍: cpu 對內(nèi)存是通過 控制、數(shù)據(jù)、地址三條總線 來進(jìn)行控制的??刂疲?cup
32、會先把內(nèi)存中的數(shù)據(jù)讀入,進(jìn)行處理后,在返回給內(nèi)存,然后內(nèi)存在把數(shù)據(jù)寫入硬盤。數(shù)據(jù):用于數(shù)據(jù)的傳輸,不管是把內(nèi)存中的數(shù)據(jù)發(fā)送給 cpu,還是把 cpu 的數(shù)據(jù)寫如內(nèi)存條,都是由數(shù)據(jù)線來完成的,但是數(shù)據(jù)傳輸?shù)姆较騽t是由控制線來控制的。地址:地址線 則是確定數(shù)據(jù)要寫入內(nèi)存中的那個(gè)單元。所謂的一個(gè)單元就是一個(gè)字節(jié)。一條地址總線能控制 2 的 1 次方,一般的機(jī)器有 32 個(gè)地址線,最終能夠控制 2 的 32 個(gè)單元,而每個(gè)單元是八位,而最終我們的內(nèi)存能夠存儲 2 的 32 次方 *8 位。則換算為 G的話,最終大小為 4G.那么地址總線的范圍則是 4G 大。指針:指針就是地址,地址就是指針。指針變量就
33、是存放內(nèi)存單元編號的變量。指針變量和指針是兩個(gè)不同的概念。指針的本質(zhì)就是一個(gè)操作受限的非負(fù)整數(shù)。指針不能進(jìn)行算術(shù)運(yùn)算- 相加乘除。但是能相減。如果兩個(gè)指針變量指向的是同一塊連續(xù)空間的不同存儲單元,則這兩個(gè)指針變量才可以相減。類似于同一個(gè)小區(qū)同一樓層六牌號相減表示兩房間隔。這時(shí)才有現(xiàn)實(shí)意義?;绢愋偷闹羔槪篒nt*p :p 只能存放 int類型的地址。P=&i:把 i 的地址賦給 p。然后 p 就指向了 i ,*p 就等于 i 。其實(shí)就是1:該語句保存了i 的地址。2:p 保存了 i 的地址,所以p 指向 i 。3:p 既然指向 i ,*p 就是 i 。*p :表示以 p 的內(nèi)容為地址的變量。*
34、p :p 是有指向的, p 里面是個(gè)垃圾值, *p 則是說以 p 的內(nèi)容為地址的變量。因?yàn)椴恢?p 的值是多少,所以不知道 *p 到底代表的是那個(gè)變量。而 *p=i ,i=5 ,最終的結(jié)果就是把 5 賦給了一個(gè)所不知道的單元。上圖中,第一個(gè)error是數(shù)據(jù)類型不符合,不能相互轉(zhuǎn)換。 *q 代表的是整形,因?yàn)?*q 代表的是以 q 的地址為內(nèi)容的變量。而 p 是地址( int* )類型。第二個(gè) error同樣有錯(cuò),因?yàn)閝 沒有賦值。經(jīng)典指針程序 - 互換兩個(gè)數(shù)字 :1:先用函數(shù)來互換:最終的輸出結(jié)果沒有互換,因?yàn)楹瘮?shù)的a,b 已經(jīng)執(zhí)行完成,分配給內(nèi)存的空間已經(jīng)釋放了,所以最終a,b的值還是主函
35、數(shù)a,b 的值。互換的是形參的a,b。和主函數(shù)沒有關(guān)系。在上圖中,輸出的值也是沒有互換的,輸出的同樣是3,5 ,需要注意的是,互換的只是p、q 的內(nèi)容,局部函數(shù)變化了,但是主函數(shù)是沒有變化的。最終正確的程序:號的三種含義 :1:乘法2:定義指針變量。 Int*p ,定義了一個(gè)名字叫 p 的變量, int* 表示 p 只能存放 int 變量的地址。3:指針運(yùn)算符。該運(yùn)算符是放在已經(jīng)定義好的指針變量的前面。如果p 是一個(gè)已經(jīng)定義好的指針變量,則*P 表示以 p 的內(nèi)容為地址的變量。注意理解形參,實(shí)參,和局部變量的關(guān)系。指針可以是函數(shù)返回一個(gè)以上的值:不使用指針的話,只能使用用return來返回一個(gè)
36、值。如何通過被調(diào)函數(shù)修改主調(diào)函數(shù)普通變量的值指針和數(shù)組 :指針和一維數(shù)組:(數(shù)組名下標(biāo)與指針關(guān)系指針變量的運(yùn)算) 一維數(shù)組名 :一維數(shù)組名是個(gè)指針常量,他存放的是一維數(shù)組第一個(gè)元素的地址。常量是不能被改變的,也就是說,一維數(shù)組名是不能被改變的。數(shù)組名 a 存放的是一維數(shù)組第一個(gè)元素的 地址,也就是a=&a。printf(“ %#Xn” ,&a0);=printf(“ %#Xn”,a);指針和二維數(shù)組:下標(biāo)和指針的關(guān)系 : 如果 p 是個(gè)指針變量,則pi永遠(yuǎn)等價(jià)于 *(p+i)確定一個(gè)一維數(shù)組需要幾個(gè)參數(shù),【如果一個(gè)函數(shù)要處理一個(gè)一維數(shù)組,則形參需要接收該數(shù)組的哪些信息。】確定一個(gè)一維數(shù)組需要兩
37、個(gè)參數(shù),1:數(shù)組名,從數(shù)組的名稱就可以知道數(shù)組的第一個(gè)值,因?yàn)橐痪S數(shù)組的名稱就是數(shù)組的第一個(gè)元素的地址。2:是數(shù)組的個(gè)數(shù)。來計(jì)算該數(shù)組有多少個(gè)值。區(qū)別于字符串(只需要一個(gè)參數(shù)首地址)因?yàn)樽址J(rèn)其后面都有一個(gè)“/0 ”作為結(jié)束標(biāo)志。而數(shù)組并沒有相關(guān)約定。在上圖中, a 是個(gè)指針變量,所以上面局部函數(shù)f 的 pArr 則要定義成指針函數(shù)才可以,而len 則是 int類型。代表接收的是整型的數(shù)字。在上圖中因?yàn)閿?shù)組a 的名稱代表的是a 的第一個(gè)元素的地址,所以在函數(shù) f 中所定義的指針變量pArr 和 a 是相同的,因?yàn)閍也是指針類型。也就是說pArr=a=a0 ,pArr1=a1=*(pArr+
38、1)=*(a+1),pArr2=a2=*(pArr+2)=*(a+2). 所以在 f 函數(shù)中 pArr3=a3,所以第二個(gè) printf輸出的結(jié)果是 88.總結(jié): pArri=ai=*(pArr+i)=*(a+i)在沒有學(xué)習(xí)指針時(shí),可將 a3 認(rèn)為是數(shù)組中第 4 個(gè)元素,但現(xiàn)在應(yīng)該對其內(nèi)部原理有更深刻認(rèn)識。這里下標(biāo)也當(dāng)成指針了,從首元素開始向后移動 3 個(gè),即指向第 4 個(gè)元素。在上圖中因?yàn)閿?shù)組 a 的名稱代表的是a 的第一個(gè)元素的地址,所以在函數(shù) f 中所定義的指針變量pArr 和 a 是相同的,因?yàn)閍 也是指針變量類型。也就是說pArr=a=a0 ,pArr1=a1=*(pArr+1)=*
39、(a+1),pArr2=a2=*(pArr+2)=*(a+2).通過上圖,我們知道,我們在f 函數(shù)中修改數(shù)組的值,相當(dāng)于修改主函數(shù)中相對應(yīng)的值。何謂變量地址 / 一個(gè)指針占幾個(gè)字節(jié)Sizeof( 變量名 / 數(shù)據(jù)類型 ) 其返回值就是該變量或數(shù)據(jù)類型所占字節(jié)數(shù)。一個(gè)指針變量無論其指向變量占幾個(gè)字節(jié),其本身所占大小都是4字節(jié)。*p 具體指向幾個(gè)字節(jié),要靠前面類型確定,如果為字節(jié),如果 double 則占 8 字節(jié)。CPU與內(nèi)存交互時(shí)有32 根線,每根線只能是1 或int則為 40 兩個(gè)狀態(tài),所有總共有232 個(gè)狀態(tài)。1 個(gè)狀態(tài)對應(yīng)一個(gè)單元。如全為0 全為1 等。內(nèi)存中第一個(gè)單元,即32 根線狀態(tài)
40、全為0。00000000000000000000000000000000其大小為 4 字節(jié)所有每個(gè)地址(硬件所能訪問)的用4 個(gè)字節(jié)保存(而不是一位 bit )一個(gè)變量的地址用該變量首字節(jié)的地址表示。這也就是為什么指針變量始終只占 4 字節(jié)的原因。接下來是: 138 課動態(tài)分配內(nèi)存(很重要)專題: 138講動態(tài)內(nèi)存分配 ( 所有高級語言,沒有 C里深刻,對 JAVA、C#理解有益 )傳統(tǒng)數(shù)組的缺點(diǎn):數(shù)組長度必須事先指定,而且只能是常整數(shù) ,不能是變量例子inta5;統(tǒng)形式定義的數(shù)組,該數(shù)組的內(nèi)存程序員無法手動釋放數(shù)組一旦定義,系統(tǒng)為數(shù)組分配的內(nèi)存空間就會一直存在,除非數(shù)組所在的函數(shù)運(yùn)行終止。在
41、一個(gè)函數(shù)運(yùn)行期間,系統(tǒng)為該函數(shù)中的數(shù)組分配的空間會一直存在。直到該函數(shù)運(yùn)行完畢時(shí),數(shù)組的空間才會被系統(tǒng)自動釋放(不是清零)。例子: voidf(void)inta5=1,2,3,4,5;.組的長度一旦定義,數(shù)組長度就不能再更改。數(shù)組的長度不能在函數(shù)運(yùn)行的過程中動態(tài)的擴(kuò)充或縮小傳統(tǒng)方式定義的數(shù)組不能跨函數(shù)使用A函數(shù)定義的數(shù)組,只有在 A函數(shù)運(yùn)行期間才可以被其他函數(shù)使用,但A函數(shù)運(yùn)行完畢后, A函數(shù)中的數(shù)組將無法在被其他函數(shù)使用。#includevoidg(int*pArr,intlen)pArr2=88;2011-05-01 使用 malloc 函數(shù),必須要添加頭文件函數(shù)只有一個(gè)形參,并且形參是
42、整型表示請求系統(tǒng)為本程序分配100個(gè)字節(jié)函數(shù)只能返回第一個(gè)字節(jié)的地址 ,但此時(shí)并不能確定該變量的類型,只有將這個(gè)地址被強(qiáng)制類型轉(zhuǎn)化 成存放整型變量的地址,這時(shí)才傳達(dá)出指向整型變量的信息。系統(tǒng)總共分配了 104個(gè)字節(jié)的內(nèi)存空間 ,p 變量本身占 4個(gè)字節(jié)(靜態(tài)分配) ,p所指向的內(nèi)存占 100個(gè)字節(jié)(動態(tài)分配)若為 int 則可存 25個(gè),若為 char 則可存 100個(gè)變量。本身所占的內(nèi)存是靜態(tài)分配的, p所指向的內(nèi)存是動態(tài)分配的*/free(p);2011-05-012011-05-02 態(tài)數(shù)組長度不需要事先給定;內(nèi)存空間可以手動釋放;在程序運(yùn)行中,動態(tài)內(nèi)存空間大小可以通過 realloc
43、函數(shù)手動擴(kuò)充或縮小靜態(tài)內(nèi)存和動態(tài)內(nèi)存的比較靜態(tài)內(nèi)存是由系統(tǒng)自動分配,有系統(tǒng)自動釋放靜態(tài)內(nèi)存是在棧分配的動態(tài)內(nèi)存是由程序員手動分配、手動釋放動態(tài)內(nèi)存是在堆分配的/*2011-05-02目的:多級指針 - 自己畫幾個(gè)示意圖就會豁然開朗。/#includeintmain(void)2011-05-022011-05-021214 17 32c 4G截留inti=10;2011-05-042011-05-0432c后者類型所占的字節(jié)數(shù)。例如: int 類型轉(zhuǎn)化為 char 則高 3位字節(jié)被截取。只保留最后一位字節(jié)。結(jié)構(gòu)體(非重點(diǎn))為什么需要結(jié)構(gòu)體為了表示一些復(fù)雜的事物,而普通的基本類型無法滿足實(shí)際要求
44、。什么叫結(jié)構(gòu)體把一些基本類型數(shù)據(jù)組合在一起形成的一個(gè)新的復(fù)合數(shù)據(jù)類型。如何定義結(jié)構(gòu)體3種方式:員名2指針變量名 - 成員名(更常用)它會在計(jì)算機(jī)內(nèi)部轉(zhuǎn)化成(* 指針變量名 ). 成員名的方式來執(zhí)行。所以兩者是等價(jià)的。例子:StructStudentIntage;Floatscore;Charsex;Intmain(void)StructStudentst=80,66.6f,F;的方式來執(zhí)行 , 沒有為什么,這就是 - 的含義,這也是一種硬性規(guī)定。2所以 pst-age 等價(jià)于 (*pst).age也等價(jià)于3pst- 的含義: pst 所指向的那個(gè)結(jié)構(gòu)體變量中的age這個(gè)成員。結(jié)構(gòu)體變量的大小略
45、大于其內(nèi)部成員類型所占字節(jié)數(shù)之和。試:sizeof(struct)若想通過函數(shù)對主函數(shù)結(jié)構(gòu)體變量進(jìn)行修改,則主函數(shù)必須發(fā)送地址,外函數(shù)定義指針結(jié)構(gòu)體變量,通過外函數(shù)內(nèi)部語句完成對變量的修改。而僅想輸出、讀取操作,則不用傳地址,定義指針過程。例:/*2009年11月 24日9:17:43通過函數(shù)完成對結(jié)構(gòu)體變量的輸入和輸出*/#include#includestructStudentintage;charsex;charname100;ge=10;ame=張三豐 ; 都是 error ,提示錯(cuò)誤信息:cannotconvertfromchar5tochar100 strcpy(pstu-name
46、, 張三豐 );2009 年11月24日 ge=10; strcpy(pstu-name, 張三 );pstu-sex=F;結(jié)構(gòu)體變量的運(yùn)算不能加減乘除操作,只能相互賦值。例如: structStudentIntage;Charsex;Char100;StructStudentstr1,str2;Str1=str2/str2=str1;都是正確的。舉例:動態(tài)構(gòu)造存放學(xué)生信息的結(jié)構(gòu)體數(shù)組#include#includege);printf(name=);scanf(%s,pA);ame不能改成 &pAprintf(score=);scanf(%f,&pArri.s
47、core);corepArrj+1.score)ge);printf(name=%sn,pA);printf(score=%fn,pArri.score);printf(n);return0;總結(jié):對于一個(gè)人事管理或圖書管理項(xiàng)目,分析流程:第一步;存儲第二步:操作第三步:輸出前兩個(gè)過程最難、最核心是“數(shù)據(jù)結(jié)構(gòu)”研究的重點(diǎn),一般都屏蔽了。數(shù)組和變量雖然都可以存儲,但都不完美。比如:人事關(guān)系圖、交通圖等,都不好用數(shù)組保存。從事關(guān)系結(jié)構(gòu)只能用“樹”還保存,而對于兩個(gè)起終點(diǎn):公交線路查詢,實(shí)現(xiàn)時(shí)間最小 / 距離最短 / 花費(fèi)最低等功能,只能用“圖”來存。而圖和樹都必須有指針知識,它們屬
48、于較高深的思想層次的東西。因此要學(xué)好數(shù)據(jù)結(jié)構(gòu)必須要懂得指針。若感興趣:可以繼續(xù)學(xué)習(xí)郝斌老師的數(shù)據(jù)結(jié)構(gòu)教學(xué)視頻。鏈表(較難)C語言和數(shù)據(jù)結(jié)構(gòu)的連接 ( 過渡 )鏈表是數(shù)據(jù)結(jié)構(gòu)第一部分而是 C語言最后一章內(nèi)容,由此可以比較兩者難度算法:通俗定義:解題的方法和步驟狹義定義:對存儲數(shù)據(jù)的操作對不同的存儲結(jié)構(gòu),要完成某一個(gè)功能所執(zhí)行的操作是不一樣比如:要輸出數(shù)組中所有的元素的操作和要輸出鏈表中所有的元素的操作是不一樣的這說明:算法是依附于存儲結(jié)構(gòu)的不同的存儲結(jié)構(gòu),所執(zhí)行的算法是不一樣的廣義定義:廣義的算法也叫 泛型 C+無論數(shù)據(jù)是如何存儲的,對該數(shù)據(jù)的操作都是一樣的分層思想,站在更高的層次看,把內(nèi)部的實(shí)
49、現(xiàn)給屏蔽數(shù)組和鏈表都是線性的,都是先輸出一個(gè)元素后,再輸出下一個(gè)元素我們至少可以通過兩種結(jié)構(gòu)來存儲數(shù)據(jù)數(shù)組優(yōu)點(diǎn):存取速度快缺點(diǎn):需要一整塊連續(xù)的空間插入和刪除元素效率很低( 插入和刪除中間某個(gè)元素,其后的所有都要前后移動)鏈表優(yōu)點(diǎn): 插入刪除元素效率高缺點(diǎn): 查找某個(gè)位置的元素效率低(由于不是連續(xù)的,不同由下標(biāo)直接找,必須由頭至尾逐一比對查找)兩者各有所長,至今沒有出現(xiàn)一個(gè)更優(yōu)的存儲方式,可集數(shù)組、鏈表優(yōu)點(diǎn)于一身。鏈表專業(yè)術(shù)語 :首結(jié)點(diǎn) :存放第一個(gè)有效數(shù)據(jù) 的結(jié)點(diǎn)尾結(jié)點(diǎn):存放最后一個(gè)有效數(shù)據(jù) 的結(jié)點(diǎn),指針域的指針為 NULL,尾結(jié)點(diǎn)的標(biāo)志頭結(jié)點(diǎn):頭結(jié)點(diǎn)的數(shù)據(jù)類型和首結(jié)點(diǎn)的類型是一模一樣的頭結(jié)
50、點(diǎn)是首結(jié)點(diǎn)前面的那個(gè)節(jié)點(diǎn)頭結(jié)點(diǎn)并 不存在有效數(shù)據(jù)設(shè)置頭結(jié)點(diǎn)的目的是為了方便對鏈表的操作頭指針:存放頭結(jié)點(diǎn)地址的指針變量確定一個(gè)鏈表需要一個(gè)參數(shù),頭指針對于每個(gè)鏈表元素,分為左右兩部分,左邊為數(shù)據(jù)單元,右邊為下一元素地址。例:#include#include#includestructNodeintdata;值零字符串結(jié)束標(biāo)記 0空指針 NULLNULL表示零,而這個(gè)零不代表數(shù)字零,而表示的內(nèi)存單元的編號零我們計(jì)算機(jī)規(guī)定了, 以零為編號的存儲單元的內(nèi)容不可讀,不可寫free(p);p=NULL;*p=0; 錯(cuò)!把 0號單元改寫! 0單元是非常重要的數(shù)據(jù)。程序員不可能讀寫出0號單元信息純C的知識
51、( 略)文件不是用 流 的思想,用函數(shù)實(shí)現(xiàn) , 于javaC+沒聯(lián)系宏typedef期末考試什么叫分配內(nèi)存,什么叫釋放內(nèi)存分配內(nèi)存:操作系統(tǒng)把某一塊內(nèi)存空間的使用權(quán)力分配給該程序內(nèi)存釋放:操作系統(tǒng)把分配給該程序的內(nèi)存空間的使用權(quán)力收回,該程序就不能使用這塊內(nèi)存空間附注:釋放內(nèi)存不是把該內(nèi)存的數(shù)據(jù)清零變量為什么必須初始化不初始化,變量通常是垃圾值,很可能是上次程序結(jié)束遺留下來的數(shù)據(jù)。詳細(xì)說明系統(tǒng)如何執(zhí)行: inti=5; 這條語句的1Vc+軟件請求操作系統(tǒng)為 i 分配存儲空間2操作系統(tǒng)會在內(nèi)存中尋找一塊空閑的區(qū)域,把該區(qū)域當(dāng)作i 來使用3Vc+會把 i 和這塊空間區(qū)域關(guān)聯(lián)起來,今后對字母i 操作就是對這塊空閑的區(qū)域操作。4把5存儲到字母 i 所關(guān)聯(lián)的內(nèi)存區(qū)域中附注:所謂內(nèi)存區(qū)域也就是內(nèi)存的一塊存儲單元4. 詳細(xì)列出 C語言所有基本類型intlongintshortintcharfloatdouble5. 在printf函數(shù)中,int用%d輸出,請問: longint chardoublefloat分別用什么輸出?%ld %c%lf%f函數(shù)的優(yōu)點(diǎn)1避免重復(fù)操作2有利于程序的模塊化談?wù)勀銓瘮?shù)的理解.什么是指針,什么是地址,什么是指針變量,三者之間的關(guān)系?地址是內(nèi)存單元的編號指針就是地址指針和地址是同一個(gè)概念指針變量是存放內(nèi)存單元編號的變量指針變量和指針是兩個(gè)完全不同的概念,只
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國純棉苫布行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 2025年度工地工人勞動保障及職業(yè)培訓(xùn)合同
- 2025年度新聞媒體攝影合作合同
- 2024年中國L-阿洛酮糖行業(yè)市場調(diào)查報(bào)告
- 2025年度婚禮現(xiàn)場化妝造型服務(wù)合同樣本
- 2025年中國淋浴器行業(yè)市場調(diào)查研究及投資戰(zhàn)略咨詢報(bào)告
- 2025年度智能家居體驗(yàn)館銷售管理合同
- 2025年度互聯(lián)網(wǎng)醫(yī)療平臺股權(quán)限制轉(zhuǎn)讓及合作開發(fā)合同
- 2025年度新型涂料研發(fā)與應(yīng)用勞務(wù)分包合同
- 2025年中國鍍鋁地暖膜生產(chǎn)線行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 北京市房山區(qū)2024-2025學(xué)年七年級上學(xué)期期末英語試題(含答案)
- 2025年南陽科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 加油站復(fù)工復(fù)產(chǎn)方案
- 2025-2030年中國增韌劑(MBS高膠粉)行業(yè)發(fā)展現(xiàn)狀及前景趨勢分析報(bào)告
- 2025年高考物理復(fù)習(xí)新題速遞之萬有引力與宇宙航行(2024年9月)
- 2025年首都機(jī)場集團(tuán)公司招聘筆試參考題庫含答案解析
- 2025云南省貴金屬新材料控股集團(tuán)限公司面向高校畢業(yè)生專項(xiàng)招聘144人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 蘇州市區(qū)2024-2025學(xué)年五年級上學(xué)期數(shù)學(xué)期末試題一(有答案)
- 暑期預(yù)習(xí)高一生物必修二知識點(diǎn)
- 醫(yī)院人體器官捐獻(xiàn)及獲取流程
- 結(jié)腸造瘺還納手術(shù)配合
評論
0/150
提交評論