




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
郝斌老師的C語(yǔ)言:課堂講解全程動(dòng)手敲代碼,講解細(xì)致,對(duì)于重要知識(shí)點(diǎn)的講解不厭其煩,是一個(gè)難得的C語(yǔ)言入門(mén)教程。在這里對(duì)老師的辛勤付出表示感謝。郝斌c語(yǔ)言視頻教程·概述:課程計(jì)劃為什么學(xué)習(xí)c語(yǔ)言:Fortran語(yǔ)言主要用于科學(xué)計(jì)算,在第三代語(yǔ)言中,以1980年為分水嶺,分為結(jié)構(gòu)化和面向?qū)ο笳Z(yǔ)言。Basic語(yǔ)言是vb的前生,pascal語(yǔ)言一般是用于教學(xué)。C語(yǔ)言是最重要的,其他的語(yǔ)言一般很少用了。結(jié)構(gòu)化的代表語(yǔ)言是c語(yǔ)言。結(jié)構(gòu)化語(yǔ)言的數(shù)據(jù)和操作是分離的,導(dǎo)致在寫(xiě)大項(xiàng)目的時(shí)候,會(huì)出現(xiàn)各種各樣莫名其妙的問(wèn)題?!驹诿嫦?qū)ο蟮恼Z(yǔ)言中c++是最復(fù)雜的語(yǔ)言。由于c++語(yǔ)言太復(fù)雜,sun公司對(duì)c++進(jìn)行了改裝,產(chǎn)生了java語(yǔ)言。而c#是由微軟開(kāi)發(fā)的,和java相似,幾乎一模一樣。在高級(jí)語(yǔ)言的執(zhí)行速度上,c是最快的,c++其次,而java和c#是最后的。Java和c#流行,主要的一個(gè)原因是可以跨平臺(tái)。C語(yǔ)言的發(fā)展和過(guò)程:
C語(yǔ)言的特點(diǎn):·優(yōu)點(diǎn):代碼量小,速度快,功能強(qiáng)大?!と秉c(diǎn):危險(xiǎn)性高,開(kāi)發(fā)周期長(zhǎng),可移植性弱。危險(xiǎn)性高:寫(xiě)同一個(gè)程序,在java中會(huì)報(bào)錯(cuò),而在c中不會(huì)報(bào)錯(cuò),為什么呢,因?yàn)閏認(rèn)為程序你想怎么寫(xiě)就怎么寫(xiě),c語(yǔ)言認(rèn)為你寫(xiě)的程序不是很離譜,他都認(rèn)為你寫(xiě)的這個(gè)程序有特殊的含義??梢灾苯油ㄟ^(guò),而java則不可以。開(kāi)發(fā)周期長(zhǎng):c語(yǔ)言是面向過(guò)程的語(yǔ)言,面向過(guò)程的語(yǔ)言的特點(diǎn)就是在開(kāi)發(fā)大項(xiàng)目的時(shí)候,很容易崩潰,好比蓋大樓,C語(yǔ)言還要造大量的磚塊、鋼筋等結(jié)構(gòu)原材料,而C++C#JAVA則進(jìn)行了一定的繼承封裝等操作,相當(dāng)于原材料直接給你,你只需要用它蓋樓即可。\現(xiàn)在市場(chǎng)上的語(yǔ)言分三塊C/c++:單純的學(xué)習(xí)c是什么都做不了的。JavaC#可移植性不強(qiáng):這是針對(duì)java來(lái)說(shuō)的,因?yàn)閖ava的可移植性太強(qiáng)了,所以就感覺(jué)說(shuō)c的可移植性不強(qiáng)。金山公司最主要是靠wps辦公軟件來(lái)發(fā)展的。Wps是c語(yǔ)言開(kāi)發(fā)的,其安裝包比Office少了10多倍。三大操作系統(tǒng):windows,unix,linuxWindows內(nèi)核是c語(yǔ)言寫(xiě)的,而外殼是c++寫(xiě)的。Java永遠(yuǎn)不可能寫(xiě)操作系統(tǒng)。因?yàn)閖ava運(yùn)行速度太慢了。而linux和unix都是純c寫(xiě)的。操作系統(tǒng)控制了硬件,如果說(shuō)操作系統(tǒng)的運(yùn)行速度慢,那么當(dāng)我們?cè)谶\(yùn)行軟件的時(shí)候,運(yùn)行速度會(huì)更慢。`為什么使用c語(yǔ)言寫(xiě)操作系統(tǒng)呢,首先是因?yàn)閏的運(yùn)行速度快,然后是因?yàn)閏可以直接控制硬件,而其他語(yǔ)言不可以。沒(méi)有指針的語(yǔ)言是不能直接訪(fǎng)問(wèn)硬件的。C語(yǔ)言的應(yīng)用領(lǐng)域:驅(qū)動(dòng)一般是用c和匯編來(lái)寫(xiě)的。數(shù)據(jù)庫(kù)一般是用c和c++來(lái)寫(xiě)的C語(yǔ)言的重要性:雖然應(yīng)用場(chǎng)合相對(duì)較窄,但貼近系統(tǒng)內(nèi)核,較底層。病毒最基本的是要感染系統(tǒng),數(shù)據(jù)結(jié)構(gòu),c,c++這三門(mén)語(yǔ)言是必須要學(xué)習(xí)的。牛人牛語(yǔ):[怎樣學(xué)習(xí)c語(yǔ)言要將編程當(dāng)成一項(xiàng)事業(yè)來(lái)經(jīng)營(yíng),而不是糊口的工具。多思考,多上機(jī)。不能光看,光聽(tīng),而要排錯(cuò),調(diào)試。在犯錯(cuò)誤中成長(zhǎng)。參考資料王爽寫(xiě)的c++也很不錯(cuò)學(xué)習(xí)的目標(biāo):掌握簡(jiǎn)單的算法--解決問(wèn)題的方法和步驟。!熟悉語(yǔ)法規(guī)則。能看懂程序并調(diào)試程序。C語(yǔ)言的關(guān)鍵字:C語(yǔ)言程序的格式:一定要養(yǎng)成良好的習(xí)慣:代碼規(guī)范邊寫(xiě)邊保存,括號(hào)成對(duì)出現(xiàn),應(yīng)用空格軟件操作:(新建保存關(guān)閉(關(guān)閉空間).cpp是原始文件,可單獨(dú)拷貝到其它電腦。第二講:(14)c語(yǔ)言編程必備知識(shí)Cpu,內(nèi)存條,硬盤(pán),顯卡,主板,顯示器之間關(guān)系。Cpu不能直接處理硬盤(pán)上的數(shù)據(jù),必須要先調(diào)入內(nèi)存Helloword程序是如何運(yùn)行起來(lái)的。什么是數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型--數(shù)據(jù)的分類(lèi),對(duì)編程而言,首要考慮問(wèn)題是數(shù)據(jù)的輸入和存儲(chǔ)??梢苑譃锳:基本數(shù)據(jù)類(lèi)型:'整型整型int --4字節(jié)一字節(jié)byte=8位bit短整型shortint -2長(zhǎng)整型longint -8浮點(diǎn)型 單精度浮點(diǎn)數(shù)float:存儲(chǔ)范圍小 -4 雙精度浮點(diǎn)數(shù)double:存儲(chǔ)范圍大 -8 Float和Double都不能保證將小數(shù)完全準(zhǔn)確保存。字符char:c語(yǔ)言中是沒(méi)有字符串string -1(區(qū)別于JAVA、C#中有string且C#中char為2字節(jié))*B:復(fù)合類(lèi)型:就是把基本類(lèi)型拼湊在一起結(jié)構(gòu)體枚舉---實(shí)用共用體—基本淘汰4.什么是變量 變量的本質(zhì)是內(nèi)存中一段存儲(chǔ)空間。IntI;i=5;I是變量,程序向系統(tǒng)申請(qǐng)了一個(gè)內(nèi)存單元,在程序運(yùn)行中,i的值可以改變,但程序結(jié)束后,其所占的空間不是釋放,而是被系統(tǒng)收回權(quán)限。Cpu,內(nèi)存條,vc++,操作系統(tǒng)之間的關(guān)系。變量為什么必須初始(即賦值)軟件運(yùn)行與內(nèi)存關(guān)系(垃圾數(shù)據(jù)-58);軟件在運(yùn)行前需要向操作系統(tǒng)申請(qǐng)存儲(chǔ)空間,在內(nèi)存空間足夠空閑時(shí),操作系統(tǒng)將分配一段內(nèi)存空間并將該外存中軟件拷貝一份存入該內(nèi)存空間中,并啟動(dòng)該軟件運(yùn)行。在軟件運(yùn)行期間,該軟件所占內(nèi)存空間不再分配給其他軟件。當(dāng)該軟件運(yùn)行完畢后,操作系統(tǒng)將回收該內(nèi)存空間(注意:操作系統(tǒng)并不清空該內(nèi)存空間遺留下來(lái)的數(shù)據(jù)),以便再次分配給其他軟件使用?!恫僮飨到y(tǒng)》一門(mén)課中系統(tǒng)分配表中會(huì)講到,用1標(biāo)記表示內(nèi)在是被占用的,用0標(biāo)記表示是空閑的。綜上所述,一個(gè)軟件所分配到的空間中極可能存在著以前其他軟件使用過(guò)后的殘留數(shù)據(jù),這些數(shù)據(jù)被稱(chēng)之為垃圾數(shù)據(jù),所以通常情況下我們?yōu)橐粋€(gè)變量,為一個(gè)數(shù)組,分配好存儲(chǔ)空間之前都要對(duì)該內(nèi)存空間初始化。如何定義變量數(shù)據(jù)類(lèi)型變量名稱(chēng)=賦予的值;等價(jià)于 數(shù)據(jù)類(lèi)型變量名; 變量名=要賦予的值;舉例子:$inti=3;等價(jià)于inti;i=3;Inti,j;等價(jià)于inti;intj;Inti,j=3等價(jià)于inti;intj;j=3;IntI=3,j=5;等價(jià)于inti;intj;I=3;j=5;什么是進(jìn)制–逢幾進(jìn)一我們規(guī)定八進(jìn)制前面加0(零),十六進(jìn)制前面加0x。常用計(jì)數(shù)制對(duì)照表:$Printf的基本用法:常量在c中是如何表示的當(dāng)個(gè)字符使用單引號(hào)括起來(lái),多個(gè)字符串使用雙引號(hào)括起來(lái)(指針、數(shù)組)。在c中,默認(rèn)是double類(lèi)型的。在后面加F表示當(dāng)做float來(lái)處理,否則會(huì)有警告提示--丟失部分字節(jié)。常量以什么樣的二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)中編碼:。整數(shù)是以補(bǔ)碼的形式轉(zhuǎn)換為二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)浮點(diǎn)數(shù)是以ieee754標(biāo)準(zhǔn)轉(zhuǎn)換為二進(jìn)制代碼存儲(chǔ)字符本質(zhì)實(shí)際是與整數(shù)的存儲(chǔ)方式相同,ASII碼標(biāo)準(zhǔn)。第三次課:代碼規(guī)范化 ·可以參考林銳《高質(zhì)量c/c++編程》·代碼的規(guī)范化非常的重要,是學(xué)習(xí)一門(mén)編程語(yǔ)言的基礎(chǔ),代碼可以允許錯(cuò)誤,但不能不規(guī)范。例如:成對(duì)敲括號(hào){}()加空格于運(yùn)算符和數(shù)字之間I=1+2;—加縮進(jìn)分清上下級(jí)地位。換行--進(jìn)行功能區(qū)域分隔or{}括號(hào)單獨(dú)成一行?!ごa規(guī)范化的好處1:整齊,別人和自己都容易看懂。2:代碼規(guī)范了,代碼不容易出錯(cuò)。3:一般的程序可以分為三塊: a:定義變量 b:對(duì)變量進(jìn)行操作 c:輸出值什么是字節(jié)/·存儲(chǔ)數(shù)據(jù)的單位,并且是硬件所能訪(fǎng)問(wèn)的最小單位。內(nèi)存中存儲(chǔ)的最小單位是位bit(0或1),但是硬件控制的時(shí)候不能精確到位,只能精確到字節(jié)(8位),是通過(guò)地址總線(xiàn)來(lái)控制的,而精確到位是通過(guò)軟件來(lái)控制的,叫做位運(yùn)算符來(lái)精確到位的。1字節(jié)=8位1K=1024字節(jié)1M=1024K1G=1024M1T=1024G2G的內(nèi)存條的總空間:2*1024*1024*1024*8=4*1032不同類(lèi)型數(shù)據(jù)之間相互賦值的問(wèn)題
不同數(shù)據(jù)類(lèi)型之間最好不要相互轉(zhuǎn)換。如果需要明白這個(gè)知識(shí)點(diǎn),那么需要明白補(bǔ)碼。什么是ASCII碼以char定義變量的時(shí)候,只能使用單引號(hào)括起一個(gè)字符才是正確的?!谏蠄D中注釋的最后一樣是重復(fù)定義了ch的值,是錯(cuò)誤的,而下面的ch=‘c’是指把c賦值給ch,是正確的。上圖中輸出的值是98(將字符以整數(shù)%d的形式輸出)Ascll碼規(guī)定了ch是以哪個(gè)值去保存,ascii碼不是一個(gè)值,而是一種規(guī)定,規(guī)定了不同的字符是以哪個(gè)整數(shù)值去表示。其它規(guī)定還有GB2312UTF-8等。字符本質(zhì)上與整數(shù)的存儲(chǔ)方式相同【字符的存儲(chǔ)】基本的輸入和輸出函數(shù)的用法:第三次課Printf()… 將變量的內(nèi)容輸出到顯示器上。 四種用法 輸什么是輸出控制符,什么是非輸出控制符輸出控制符包含如下:Printf為什么需要輸出控制符:·01組成的代碼可以表示數(shù)據(jù)也可以表示指令。必須要有輸出控制符告訴他怎么去解讀。·如果01組成的代碼表示的是數(shù)據(jù)的話(huà),那么同樣的01代碼組合以不同的格式輸出就會(huì)有不同的輸出結(jié)果,所以必須要有輸出控制符。`在上圖中,intx=47,如果前面加0(零)048表示的是八進(jìn)制,如果前面加0x(零x)0X47則表示的是十六進(jìn)制,而在輸出的時(shí)候,則是o(字母o)表示八進(jìn)制,ox(字母o,x)表示十六進(jìn)制。非輸出控制符:非輸出控制符在輸出的時(shí)候會(huì)原樣輸出。Scanf()通過(guò)鍵盤(pán)將數(shù)據(jù)輸入到變量中有兩種用法:示例:非輸入控制符:在輸入的時(shí)候也會(huì)原樣輸入。·但是強(qiáng)烈建議:在使用scanf的時(shí)候,不使用非輸入控制符。給多個(gè)變量賦值:需要記住,非控制符需要原樣輸入。如何使用scanf編寫(xiě)出高質(zhì)量代碼~運(yùn)算符: 算術(shù)運(yùn)算符: 加(+),減(—)乘(*)除(/)取余(%)關(guān)系運(yùn)算符:>,>=,<,<=,!=,邏輯運(yùn)算符:?。ǚ牵?&(且),||(或)`賦值運(yùn)算符:=,+=,*=,/=例如:a+=3是等價(jià)于a=a+3,a/=3等價(jià)于a=a/3其優(yōu)先級(jí)別是算術(shù)>關(guān)系>邏輯>賦值。取余的結(jié)果的正負(fù)只和被除數(shù)有關(guān)。第四節(jié)流程控制(第一個(gè)重點(diǎn)):什么是流程控制)程序代碼執(zhí)行的順序。流程控制的分類(lèi)順序執(zhí)行選擇執(zhí)行 定義:某些代碼可能執(zhí)行,可能不執(zhí)行,有選擇的執(zhí)行某些代碼。分類(lèi):ifIf最簡(jiǎn)單的用法:;如果想控制多個(gè)語(yǔ)句的執(zhí)行或者不執(zhí)行,那么需要使用{}括起來(lái)?!璭lse…的用法:if…elseif…else的用法:C錯(cuò)誤的if…elseif…else語(yǔ)句:.在上圖中,當(dāng)執(zhí)行到哈哈那句時(shí),下面的else將會(huì)被算作另外一個(gè)語(yǔ)句來(lái)執(zhí)行,而在我們的c語(yǔ)言中,沒(méi)有以else開(kāi)頭的語(yǔ)句。所以會(huì)出錯(cuò)。If實(shí)例:If常見(jiàn)的問(wèn)題:變量的替換:求三個(gè)數(shù)字的大?。篊語(yǔ)言常見(jiàn)誤區(qū):紙老虎~素?cái)?shù):只能被1和自己整除的數(shù),如1,5,9等?;匚臄?shù):正著寫(xiě)和倒著寫(xiě)一樣的數(shù)。如1221,121,等編程實(shí)現(xiàn)求一個(gè)十進(jìn)制數(shù)字的二進(jìn)制形式:求一個(gè)數(shù)字的每位是奇數(shù)的數(shù)字取出來(lái)組合形成的新數(shù)字。求一個(gè)數(shù)字到過(guò)來(lái)的數(shù)字。1:如果不懂,那么就看答案??炊鸢冈谇?。沒(méi)錯(cuò)誤了,在嘗試改。如何看懂一個(gè)程序:流程:每個(gè)語(yǔ)句的功能:試數(shù):/對(duì)一些小算法的程序:嘗試自己編程結(jié)局。解決不了,看答案。關(guān)鍵是把答案看懂??炊髧L試自己修改程序,且知道修改之后程序的不同輸出結(jié)果的含義。照著答案去敲調(diào)試錯(cuò)誤不看答案,自己獨(dú)立把程序編出如果程序?qū)嵲谑菑氐谉o(wú)法了解,就把他背會(huì)??照Z(yǔ)句的問(wèn)題:—在上圖中,最終的結(jié)果會(huì)是AAAA,BBBB,程序也不會(huì)報(bào)錯(cuò),為什么呢,因?yàn)樵诔绦驁?zhí)行的時(shí)候,會(huì)在;哪里認(rèn)為是一個(gè)空語(yǔ)句。也就是說(shuō),如果if成立,那么執(zhí)行空語(yǔ)句。If常見(jiàn)錯(cuò)誤解析(重點(diǎn))上面這個(gè)程序是錯(cuò)誤的,為什么呢,在該程序中,總的有4個(gè)語(yǔ)句,而在以else開(kāi)頭的那個(gè)語(yǔ)句中是有錯(cuò)誤的,因?yàn)樵赾語(yǔ)言中是沒(méi)有以else開(kāi)頭的這種語(yǔ)法。在上面這個(gè)程序中,最終的值是AAAA,雖說(shuō)后面的3>1也滿(mǎn)足條件,但是當(dāng)3>2滿(mǎn)足條件后,該if語(yǔ)句就會(huì)終止,后面的語(yǔ)句是不會(huì)在執(zhí)行的。《既然7行要寫(xiě)表達(dá)式,就要寫(xiě)if。循環(huán)的定義、分類(lèi)。定義:某些代碼會(huì)被重復(fù)執(zhí)行。分類(lèi):forwhiledo……while在上圖中,先執(zhí)行1,在執(zhí)行2,2如果成立,標(biāo)志著循環(huán)成立,那么在執(zhí)行4,最后在執(zhí)行3,3執(zhí)行完后代表一次循環(huán)完成,然后在執(zhí)行2.以此類(lèi)推。1永遠(yuǎn)只執(zhí)行一次。++I等價(jià)于i+1求1-10的所有奇數(shù)的和:
<求1-12之間的所有能被3整除的數(shù)字之和:For所控制的語(yǔ)句:在上圖中,for默認(rèn)只能控制一個(gè)語(yǔ)句,但是如果要控制多個(gè)語(yǔ)句時(shí)候,那么需要使用{}把語(yǔ)句括起來(lái)。求1+1/2+1/3….1/100的和在上圖中,重點(diǎn)是強(qiáng)制數(shù)據(jù)類(lèi)型轉(zhuǎn)換也就是(float)(i)那句:如果把print那句換為下面這句會(huì)怎么樣呢:/也是錯(cuò)的,為什么呢,因?yàn)閕是整型,1也是整型,所以不管你怎么轉(zhuǎn)換也是整型啊,如果想要這樣寫(xiě)的話(huà),那么我們需要把1改成也可以的。也就是:試數(shù)詳細(xì)步驟舉例:浮點(diǎn)數(shù)存?。呵?-100之間所有奇數(shù)的和:求1-100之間的奇數(shù)的個(gè)數(shù):!求1-100之間奇數(shù)的平均值:求1-100之間的奇數(shù)之和,在求1-100之間的偶數(shù)之和:多個(gè)for循環(huán)的嵌套使用:整體是兩個(gè)語(yǔ)句。上圖中,先執(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,如果2不成立,意味著本次循環(huán)結(jié)束,在執(zhí)行B,在上圖中,需要注意的是,如果2成立的話(huà),那么每次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í)很簡(jiǎn)單,就是把10進(jìn)制數(shù)除以r,直到商是0的時(shí)候。然后取余數(shù),余數(shù)倒序排列:瑣碎的運(yùn)算符:自增:^自減:和自增一樣。三目運(yùn)算符:最終的輸出結(jié)果是1.逗號(hào)表達(dá)式:
|最終結(jié)果是6.上圖中,逗號(hào)是個(gè)順序點(diǎn),即所有的副作用必須在下個(gè)語(yǔ)句前生效,其最后結(jié)果為1,j+2只是產(chǎn)生臨時(shí)值,并沒(méi)有把j+2的值賦個(gè)j。如果寫(xiě)成j+=2,那最后的值則變?yōu)?.For的嵌套使用舉例:上例中輸出的結(jié)果是9個(gè)哈哈,1個(gè)嘻嘻。在上圖中,整個(gè)程序分成3個(gè)語(yǔ)句,輸出的結(jié)果是3個(gè)嘿嘿,3個(gè)哈哈,1個(gè)嘻嘻。其結(jié)果是:]While(先付錢(qián)后吃飯) 1:執(zhí)行的順序: 2:與for的相互比較:用for來(lái)求1-100之和:
用while實(shí)現(xiàn)1-100之和。只需要把for語(yǔ)句替換為:
For和while是可以相互轉(zhuǎn)換的,可以用下面的表達(dá)式來(lái)表示:
While和for在邏輯上完全等價(jià),但是for在邏輯上更強(qiáng)。更容易理解,更不容易出錯(cuò)。推薦多使用for。
3:while舉例:[試數(shù):通過(guò)上面的試數(shù),應(yīng)該能很快的理解回文數(shù)的算法。 4:什么時(shí)候使用while,什么時(shí)候使用for:沒(méi)法說(shuō),用多了就自然而然知道了 Do…while(先吃飯后付錢(qián))&一元二次方程:
Switch的用法:電梯程序:Case是程序的入口,當(dāng)進(jìn)入程序后,程序會(huì)從上往下執(zhí)行,如果有break,那么會(huì)中斷程序,如果沒(méi)有,那么會(huì)一直執(zhí)行。Break的用法:—在多層循環(huán)中,Break只能終止他最近的循環(huán)。在多層switch中,break也是只能終止距離他最近的switch。Break只能用于循環(huán)和switch,不能用于if。如果用于if,必須要當(dāng)循環(huán)中嵌套if的時(shí)候。Continue的用法:上圖中,如果執(zhí)行continue,那么C,D將不會(huì)被執(zhí)行,會(huì)執(zhí)行3.在上圖中,如果執(zhí)行了continue,那么后面的C,D將不再執(zhí)行,而會(huì)去執(zhí)行表達(dá)式。-數(shù)組:--非重點(diǎn)數(shù)組的使用:為什么需要數(shù)組1:為了解決大量同類(lèi)型數(shù)據(jù)的存儲(chǔ)和使用問(wèn)題。2:用數(shù)組可以模擬現(xiàn)實(shí)世界。Inta[25]:一維數(shù)組,可以當(dāng)做一個(gè)線(xiàn)性結(jié)構(gòu)。Inta[8][6]:可以當(dāng)做一個(gè)平面,意思是8行6列。有48個(gè)元素。Inta[3][4][5]:可以當(dāng)做一個(gè)三維立體?!稩nta[3][4][5][6]:可以當(dāng)做一個(gè)四維空間。數(shù)組的分類(lèi)一維數(shù)組怎樣定義一維數(shù)組:·為n個(gè)變量分配存儲(chǔ)空間:數(shù)組內(nèi)存空間是連續(xù)的?!に械淖兞款?lèi)型必須相同:數(shù)組不可能第一個(gè)元素是整形,第二個(gè)元素是浮點(diǎn)型。·所有變量所占用的字節(jié)必須相等。例子: int[5]數(shù)組不是學(xué)習(xí)重點(diǎn)的原因數(shù)組一旦定義,其長(zhǎng)度是死的。[有關(guān)一維數(shù)組的操作--都需要自己另外編程序?qū)崿F(xiàn)而我們通常用第三方軟件(工具)如數(shù)據(jù)庫(kù)等方便直接地實(shí)現(xiàn)。對(duì)數(shù)組的操作:初始化賦值排序求最大/小值倒置查找插入刪除·初始化:上圖中a[5]前面如果沒(méi)有加上數(shù)據(jù)類(lèi)型,那么這里的a[5]不是指一個(gè)數(shù)組,其中的5只的是下標(biāo)。上圖中,數(shù)組的5個(gè)元素不是用a來(lái)代表的,是用a0,a1…a4來(lái)代表的,所以說(shuō)數(shù)組名a代表的不是數(shù)組的5個(gè)元素,數(shù)組名代表的是數(shù)組的第一個(gè)元素的地址。>·賦值把一個(gè)數(shù)組元素給全部倒過(guò)來(lái):·排序·求最大/小值倒置查找插入刪除!二維數(shù)組:二維數(shù)組的初始化:輸出二維數(shù)組內(nèi)容:多維數(shù)組:是否存在多維數(shù)組:不存在因?yàn)閮?nèi)存是線(xiàn)性一維的,在內(nèi)存中是不分行不分列的。N維數(shù)組可以當(dāng)做每個(gè)元素是n-1維數(shù)組的一維數(shù)組。~函數(shù)(第二個(gè)重點(diǎn)):為什么需要函數(shù):·避免了重復(fù)性操作?!び欣诔绦虻哪K化。(自上而下,逐步細(xì)化,大問(wèn)題分解成小問(wèn)題)用它作為參照,可以對(duì)比JAVA和C#面向?qū)ο蟮乃枷?。C語(yǔ)言基本單位是函數(shù),C#、C++和JAVA基本單位是類(lèi)。什么叫做函數(shù)》·邏輯上:能夠完成特定功能的獨(dú)立的代碼塊。物理上:能夠接收數(shù)據(jù)【也可以不接收數(shù)據(jù)】,能夠?qū)邮盏臄?shù)據(jù)進(jìn)行處理【也可以不對(duì)數(shù)據(jù)進(jìn)行處理】,能夠?qū)?shù)據(jù)處理的結(jié)果返【也可以沒(méi)有返回值】?!た偨Y(jié):函數(shù)是個(gè)工具,他是為了解決大量類(lèi)似問(wèn)題而設(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)部的形參所占空間就被收回?!eturn表達(dá)式的含義:Return是終止被調(diào)函數(shù),向主調(diào)函數(shù)返回表達(dá)式的值,如果表達(dá)式為空,則只終止函數(shù),不向被主函數(shù)返回任何值。Break是用來(lái)終止(就近的)循環(huán)和switch語(yǔ)句。而return是用來(lái)終止被調(diào)函數(shù)的?!ず瘮?shù)返回值的類(lèi)型,也稱(chēng)為函數(shù)的類(lèi)型,因?yàn)槿绻瘮?shù)名前的返回值類(lèi)型和函數(shù)執(zhí)行體中的return表達(dá)式中表達(dá)式的類(lèi)型不同的話(huà),則最終函數(shù)返回值的類(lèi)型以函數(shù)名前的返回值類(lèi)型為準(zhǔn)。例:、在上圖中,函數(shù)的返回值以函數(shù)前的數(shù)值類(lèi)型為準(zhǔn)。函數(shù)的分類(lèi)·有參函數(shù)和無(wú)參函數(shù)?!び蟹祷刂岛蜔o(wú)返回值。·庫(kù)函數(shù)和用戶(hù)自定義函數(shù)?!て胀ê瘮?shù)和主函數(shù)(main函數(shù))1:一個(gè)程序有且只有一個(gè)主函數(shù)。2:主函數(shù)可以調(diào)用普通函數(shù),普通不能調(diào)用主函數(shù)。3:普通函數(shù)可以相互調(diào)用。4:主函數(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ù)沒(méi)有返回值時(shí),那么規(guī)范的寫(xiě)法是要在函數(shù)中寫(xiě)明void的。在上圖中,第一個(gè)void表示沒(méi)有返回值,而第二個(gè)void表示不接收形參,也就是函數(shù)不接收數(shù)據(jù)。如果想把函數(shù)寫(xiě)在程序的后面,那么需要寫(xiě)函數(shù)聲明:函數(shù)聲明的含義是告訴編譯器f()是個(gè)函數(shù)名。如果不加函數(shù)聲明,那么編譯器在編譯到f的時(shí)候,不知道f是個(gè)什么,如果加了函數(shù)聲明,那么編譯器編譯到f的時(shí)候,就知道f是個(gè)函數(shù)?!ば枰⒁獾氖牵{(diào)用語(yǔ)句需要放在定義語(yǔ)句的后面,也就是說(shuō),定義函數(shù)的語(yǔ)句要放在調(diào)用語(yǔ)句的前面。如果函數(shù)調(diào)用寫(xiě)在了函數(shù)定義的前面,則必須加函數(shù)前置聲明,函數(shù)前置聲明的作用是:1:告訴編譯器即將可能出現(xiàn)的若干個(gè)字母代表的是一個(gè)函數(shù)?!按蛘泻簟?:告訴編譯器即將可能出現(xiàn)的若干個(gè)字母所代表的函數(shù)的形參和返回值的具體情況。}3:函數(shù)聲明必須是一個(gè)語(yǔ)句,也就是在函數(shù)聲明后需加分號(hào)。4:對(duì)庫(kù)函數(shù)的聲明也就是系統(tǒng)函數(shù)。是通過(guò)#include<庫(kù)函數(shù)所在的文件的名字.h>來(lái)實(shí)現(xiàn)的。如形參和實(shí)參要求:1:形參和實(shí)參個(gè)數(shù)是一一對(duì)應(yīng)的。2:形參和實(shí)參的位置也是一一對(duì)應(yīng)的。3:形參和實(shí)參的數(shù)據(jù)類(lèi)型需要相互兼容?!と绾卧谲浖_(kāi)發(fā)中合理的設(shè)計(jì)函數(shù)來(lái)解決實(shí)際問(wèn)題。求1到某個(gè)數(shù)字之間的數(shù)是否是素?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ù)和如何通過(guò)書(shū)籍來(lái)學(xué)習(xí)函數(shù):@實(shí)用大全—機(jī)械工業(yè)出版社遞歸:(略)棧:相當(dāng)于一個(gè)杯子(容器)變量的作用域和存儲(chǔ)方式:全局變量和局部變量:局部變量:局部變量的使用范圍只能在本函數(shù)內(nèi)部使用。)全部變量:全局變量和局部變量命名沖突的問(wèn)題:在同一個(gè)范圍之內(nèi)不能定義兩個(gè)一樣的局部變量:在一個(gè)函數(shù)內(nèi)部,如果定義的局部函數(shù)的名字和全局變量名一樣時(shí),局部變量會(huì)屏蔽掉全局變量:上例中最終的輸出結(jié)果是8,因?yàn)榫植孔兞堪讶肿兞拷o屏蔽掉了。、指針:(C語(yǔ)言的靈魂)內(nèi)存的存儲(chǔ)是以一個(gè)字節(jié)為一個(gè)編號(hào),也就是8位合在一起給一個(gè)編號(hào),不是0,1就給編號(hào)。內(nèi)存分為很多個(gè)單元,每個(gè)單元就會(huì)分配一個(gè)編號(hào)。地址:內(nèi)存單元的一個(gè)編號(hào)。而指針和地址一個(gè)概念的。也就是說(shuō)指針就是地址。普通變量:只能存放一個(gè)值。指針變量:同樣是一個(gè)變量,但是指針變量存放其他變量的地址。*p代表的是p所指向的那個(gè)變量。在上圖中*p和i是同一個(gè)東西,但是*p和p不是同一個(gè)東西。在上圖中,int*p是一個(gè)聲明,開(kāi)頭的int*是他的數(shù)據(jù)類(lèi)型。P是變量的名字。不能理解我定義了一個(gè)整形變量,這個(gè)整形變量的名字叫做*p。所謂int*類(lèi)型,實(shí)際就是存放int變量地址的類(lèi)型?!?p代表的是以p的內(nèi)容為地址的變量。解析:p的內(nèi)容是一個(gè)地址,在上圖中,p的內(nèi)容就是i的地址,*p其指向的變量當(dāng)然就是i變量了。指針和指針變量:指針就是地址,地址就是指針。地址就是內(nèi)存單元的編號(hào)。指針變量:存放地址的變量。而指針只是一個(gè)值,這個(gè)值是內(nèi)存單元的一個(gè)編號(hào)。指針變量才是一個(gè)變量,他里面才可以存放數(shù)據(jù)。指針和指針變量是兩個(gè)不同的概念,但是需要注意的是,通常我們?cè)跀⑹鰰r(shí)會(huì)把指針變量簡(jiǎn)稱(chēng)為指針,實(shí)際他們含義并不一樣。指針的重要性: 指針的分類(lèi):[指針的定義:·地址:內(nèi)存單元的編號(hào),是一個(gè)從0開(kāi)始的非負(fù)整數(shù)。范圍:cpu對(duì)內(nèi)存是通過(guò)控制、數(shù)據(jù)、地址三條總線(xiàn)來(lái)進(jìn)行控制的??刂疲篶up會(huì)先把內(nèi)存中的數(shù)據(jù)讀入,進(jìn)行處理后,在返回給內(nèi)存,然后內(nèi)存在把數(shù)據(jù)寫(xiě)入硬盤(pán)。數(shù)據(jù):用于數(shù)據(jù)的傳輸,不管是把內(nèi)存中的數(shù)據(jù)發(fā)送給cpu,還是把cpu的數(shù)據(jù)寫(xiě)如內(nèi)存條,都是由數(shù)據(jù)線(xiàn)來(lái)完成的,但是數(shù)據(jù)傳輸?shù)姆较騽t是由控制線(xiàn)來(lái)控制的。地址:地址線(xiàn)則是確定數(shù)據(jù)要寫(xiě)入內(nèi)存中的那個(gè)單元。所謂的一個(gè)單元就是一個(gè)字節(jié)。"一條地址總線(xiàn)能控制2的1次方,一般的機(jī)器有32個(gè)地址線(xiàn),最終能夠控制2的32個(gè)單元,而每個(gè)單元是八位,而最終我們的內(nèi)存能夠存儲(chǔ)2的32次方*8位。則換算為G的話(huà),最終大小為4G.那么地址總線(xiàn)的范圍則是4G大。指針:指針就是地址,地址就是指針。指針變量就是存放內(nèi)存單元編號(hào)的變量。指針變量和指針是兩個(gè)不同的概念。指針的本質(zhì)就是一個(gè)操作受限的非負(fù)整數(shù)。指針不能進(jìn)行算術(shù)運(yùn)算-相加乘除。但是能相減。如果兩個(gè)指針變量指向的是同一塊連續(xù)空間的不同存儲(chǔ)單元,則這兩個(gè)指針變量才可以相減。類(lèi)似于同一個(gè)小區(qū)同一樓層六牌號(hào)相減表示兩房間隔。這時(shí)才有現(xiàn)實(shí)意義?;绢?lèi)型的指針:>Int*p:p只能存放int類(lèi)型的地址。P=&i:把i的地址賦給p。然后p就指向了i,*p就等于i。其實(shí)就是1:該語(yǔ)句保存了i的地址。2:p保存了i的地址,所以p指向i。3:p既然指向i,*p就是i。*p:表示以p的內(nèi)容為地址的變量。*p:p是有指向的,p里面是個(gè)垃圾值,*p則是說(shuō)以p的內(nèi)容為地址的變量。因?yàn)椴恢纏的值是多少,所以不知道*p到底代表的是那個(gè)變量。而*p=i,i=5,最終的結(jié)果就是把5賦給了一個(gè)所不知道的單元。上圖中,第一個(gè)error是數(shù)據(jù)類(lèi)型不符合,不能相互轉(zhuǎn)}換。*q代表的是整形,因?yàn)?q代表的是以q的地址為內(nèi)容的變量。而p是地址(int*)類(lèi)型。第二個(gè)error同樣有錯(cuò),因?yàn)閝沒(méi)有賦值。經(jīng)典指針程序-互換兩個(gè)數(shù)字:1:先用函數(shù)來(lái)互換:最終的輸出結(jié)果沒(méi)有互換,因?yàn)楹瘮?shù)的a,b已經(jīng)執(zhí)行完成,分配給內(nèi)存的空間已經(jīng)釋放了,所以最終a,b的值還是主函數(shù)a,b的值。互換的是形參的a,b。和主函數(shù)沒(méi)有關(guān)系。*在上圖中,輸出的值也是沒(méi)有互換的,輸出的同樣是3,5,需要注意的是,互換的只是p、q的內(nèi)容,局部函數(shù)變化了,但是主函數(shù)是沒(méi)有變化的。最終正確的程序:*號(hào)的三種含義: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è)以上的值:不使用指針的話(huà),只能使用用return來(lái)返回一個(gè)值。如何通過(guò)被調(diào)函數(shù)修改主調(diào)函數(shù)普通變量的值指針和數(shù)組:]指針和一維數(shù)組:(數(shù)組名下標(biāo)與指針關(guān)系指針變量的運(yùn)算)·一維數(shù)組名:一維數(shù)組名是個(gè)指針常量,他存放的是一維數(shù)組第一個(gè)元素的地址。常量是不能被改變的,也就是說(shuō),一維數(shù)組名是不能被改變的。數(shù)組名a存放的是一維數(shù)組第一個(gè)元素的地址,也就是a=&a。printf(“%#X\n”,&a[0]);=====printf(“%#X\n”,a);,指針和二維數(shù)組:下標(biāo)和指針的關(guān)系:·如果p是個(gè)指針變量,則p[i]永遠(yuǎn)等價(jià)于*(p+i)確定一個(gè)一維數(shù)組需要幾個(gè)參數(shù),【如果一個(gè)函數(shù)要處理一個(gè)一維數(shù)組,則形參需要接收該數(shù)組的哪些信息?!看_定一個(gè)一維數(shù)組需要兩個(gè)參數(shù),1:數(shù)組名,從數(shù)組的名稱(chēng)就可以知道數(shù)組的第一個(gè)值,因?yàn)橐痪S數(shù)組的名稱(chēng)就是數(shù)組的第一個(gè)元素的地址。2:是數(shù)組的個(gè)數(shù)。來(lái)計(jì)算該數(shù)組有多少個(gè)值。區(qū)別于字符串(只需要一個(gè)參數(shù)—首地址)因?yàn)樽址J(rèn)其后面都有一個(gè)“/0”作為結(jié)束標(biāo)志。而數(shù)組并沒(méi)有相關(guān)約定。*在上圖中,a是個(gè)指針變量,所以上面局部函數(shù)f的pArr則要定義成指針函數(shù)才可以,而len則是int類(lèi)型。代表接收的是整型的數(shù)字。在上圖中因?yàn)閿?shù)組a的名稱(chēng)代表的是a的第一個(gè)元素的地址,所以在函數(shù)f中所定義的指針變量pArr和a是相同的,因?yàn)閍也是指針類(lèi)型。也就是說(shuō)pArr=a=a[0],pArr[1]=a[1]=*(pArr+1)=*(a+1),pArr[2]=a[2]=*(pArr+2)=*(a+2).所以在f函數(shù)中pArr[3]=a[3],所以第二個(gè)printf輸出的結(jié)果是88.總結(jié):pArr[i]=a[i]=*(pArr+i)=*(a+i)在沒(méi)有學(xué)習(xí)指針時(shí),可將a[3]認(rèn)為是數(shù)組中第4個(gè)元素,但現(xiàn)在應(yīng)該對(duì)其內(nèi)部原理有更深刻認(rèn)識(shí)。這里下標(biāo)也當(dāng)成指針了,從首元素開(kāi)始向后移動(dòng)3個(gè),即指向第4個(gè)元素。在上圖中因?yàn)閿?shù)組a的名稱(chēng)代表的是a的第一個(gè)元素的地址,所以在函數(shù)f中所定義的指針變量pArr和a是相同的,因?yàn)閍也是指針變量類(lèi)型。也就是說(shuō)pArr=a=a[0],pArr[1]=a[1]=*(pArr+1)=*(a+1),pArr[2]=a[2]=*(pArr+2)=*(a+2).通過(guò)上圖,我們知道,我們?cè)趂函數(shù)中修改數(shù)組的值,相當(dāng)于修改主函數(shù)中相對(duì)應(yīng)的值。)何謂變量地址/一個(gè)指針占幾個(gè)字節(jié)Sizeof(變量名/數(shù)據(jù)類(lèi)型)其返回值就是該變量或數(shù)據(jù)類(lèi)型所占字節(jié)數(shù)。一個(gè)指針變量無(wú)論其指向變量占幾個(gè)字節(jié),其本身所占大小都是4字節(jié)。*p具體指向幾個(gè)字節(jié),要靠前面類(lèi)型確定,如果為int則為4字節(jié),如果double則占8字節(jié)。CPU與內(nèi)存交互時(shí)有32根線(xiàn),每根線(xiàn)只能是1或0兩個(gè)狀態(tài),所有總共有232個(gè)狀態(tài)。1個(gè)狀態(tài)對(duì)應(yīng)一個(gè)單元。如全為0全為1等。內(nèi)存中第一個(gè)單元,即32根線(xiàn)狀態(tài)全為0。00000000000000000000000000000000其大小為4字節(jié) )所有每個(gè)地址(硬件所能訪(fǎng)問(wèn))的用4個(gè)字節(jié)保存(而不是一位bit)一個(gè)變量的地址—用該變量首字節(jié)的地址表示。這也就是為什么指針變量始終只占4字節(jié)的原因。接下來(lái)是:138課動(dòng)態(tài)分配內(nèi)存(很重要)專(zhuān)題:138講 動(dòng)態(tài)內(nèi)存分配(所有高級(jí)語(yǔ)言,沒(méi)有C里深刻,對(duì)JAVA、C#理解有益) 傳統(tǒng)數(shù)組的缺點(diǎn):1.數(shù)組長(zhǎng)度必須事先指定,而且只能是常整數(shù),不能是變量 例子 inta[5]; 統(tǒng)形式定義的數(shù)組,該數(shù)組的內(nèi)存程序員無(wú)法手動(dòng)釋放&數(shù)組一旦定義,系統(tǒng)為數(shù)組分配的內(nèi)存空間就會(huì)一直存在,除非數(shù)組所在的函數(shù)運(yùn)行終止。在一個(gè)函數(shù)運(yùn)行期間,系統(tǒng)為該函數(shù)中的數(shù)組分配的空間會(huì)一直存在。直到該函數(shù)運(yùn)行完畢時(shí),數(shù)組的空間才會(huì)被系統(tǒng)自動(dòng)釋放(不是清零)。 例子:voidf(void){inta[5]={1,2,3,4,5};....}數(shù)組的長(zhǎng)度一旦定義,數(shù)組長(zhǎng)度就不能再更改。 數(shù)組的長(zhǎng)度不能在函數(shù)運(yùn)行的過(guò)程中動(dòng)態(tài)的擴(kuò)充或縮小4.傳統(tǒng)方式定義的數(shù)組不能跨函數(shù)使用 A函數(shù)定義的數(shù)組,只有在A函數(shù)運(yùn)行期間才可以被其他函數(shù)使用, 但A函數(shù)運(yùn)行完畢后,A函數(shù)中的數(shù)組將無(wú)法在被其他函數(shù)使用。,#include<> voidg(int*pArr,intlen){pArr[2]=88;2011-05-01要使用malloc函數(shù),必須要添加頭文件 2.malloc函數(shù)只有一個(gè)形參,并且形參是整型 3.100表示請(qǐng)求系統(tǒng)為本程序分配100個(gè)字節(jié) 4.malloc函數(shù)只能返回第一個(gè)字節(jié)的地址,但此時(shí)并不能確定該變量的類(lèi)型,只有將這個(gè)地址被強(qiáng)制類(lèi)型轉(zhuǎn)化成存放整型變量的地址,這時(shí)才傳達(dá)出指向整型變量的信息。 5.系統(tǒng)總共分配了104個(gè)字節(jié)的內(nèi)存空間,p變量本身占4個(gè)字節(jié)(靜態(tài)分配),p所指向的內(nèi)存占100個(gè)字節(jié)(動(dòng)態(tài)分配)若為int則可存25個(gè),若為char則可存100個(gè)變量。 6.p本身所占的內(nèi)存是靜態(tài)分配的,p所指向的內(nèi)存是動(dòng)態(tài)分配的、 */ free(p); 2011-05-012011-05-02 2.內(nèi)存空間可以手動(dòng)釋放; 3.在程序運(yùn)行中,動(dòng)態(tài)內(nèi)存空間大小可以通過(guò)realloc函數(shù)手動(dòng)擴(kuò)充或縮小靜態(tài)內(nèi)存和動(dòng)態(tài)內(nèi)存的比較 靜態(tài)內(nèi)存是由系統(tǒng)自動(dòng)分配,有系統(tǒng)自動(dòng)釋放 靜態(tài)內(nèi)存是在棧分配的 — 動(dòng)態(tài)內(nèi)存是由程序員手動(dòng)分配、手動(dòng)釋放 動(dòng)態(tài)內(nèi)存是在堆分配的/* 2011-05-02 目的:多級(jí)指針--自己畫(huà)幾個(gè)示意圖就會(huì)豁然開(kāi)朗。/#include<>、intmain(void){ inti=10; 2011-05-022011-05-02例如:int類(lèi)型轉(zhuǎn)化為char則高3位字節(jié)被截取。只保留最后一位字節(jié)。 結(jié)構(gòu)體 (非重點(diǎn))為什么需要結(jié)構(gòu)體為了表示一些復(fù)雜的事物,而普通的基本類(lèi)型無(wú)法滿(mǎn)足實(shí)際要求。什么叫結(jié)構(gòu)體把一些基本類(lèi)型數(shù)據(jù)組合在一起形成的一個(gè)新的復(fù)合數(shù)據(jù)類(lèi)型。.如何定義結(jié)構(gòu)體3種方式:?jiǎn)T名2指針變量名->成員名(更常用)它會(huì)在計(jì)算機(jī)內(nèi)部轉(zhuǎn)化成(*指針變量名).成員名的方式來(lái)執(zhí)行。所以?xún)烧呤堑葍r(jià)的。例子:StructStudent{ Intage;【 Floatscore; Charsex;}; Intmain(void){ StructStudentst={80,66.6f,’F’};66.6f66.6Fge的方式來(lái)執(zhí)行,沒(méi)有為什么,這就是->的含義, 2所以pst->age等價(jià)于(*pst).age也等價(jià)于 3pst->的含義:pst所指向的那個(gè)結(jié)構(gòu)體變量中的age這個(gè)成員。 結(jié)構(gòu)體變量的大小略大于其內(nèi)部成員類(lèi)型所占字節(jié)數(shù)之和。試:sizeof(struct)~若想通過(guò)函數(shù)對(duì)主函數(shù)結(jié)構(gòu)體變量進(jìn)行修改,則主函數(shù)必須發(fā)送地址,外函數(shù)定義指針結(jié)構(gòu)體變量,通過(guò)外函數(shù)內(nèi)部語(yǔ)句完成對(duì)變量的修改。而僅想輸出、讀取操作,則不用傳地址,定義指針過(guò)程。例:/* 2009年11月24日9:17:43 通過(guò)函數(shù)完成對(duì)結(jié)構(gòu)體變量的輸入和輸出*/、#include<>#include<>structStudent{ intage; charsex; charname[100];};ge=10;ame="張三豐";都是error,提示錯(cuò)誤信息:cannotconvertfrom'char[5]'to'char[100]') strcpy(pstu->name,"張三豐");2009年11月24日ge=10; strcpy(pstu->name,"張三"); pstu->sex='F'; }結(jié)構(gòu)體變量的運(yùn)算不能加減乘除操作,只能相互賦值。例如:structStudent { Intage;/ Charsex; Char[100];};StructStudentstr1,str2;Str1=str2/str2=str1;都是正確的。舉例:動(dòng)態(tài)構(gòu)造存放學(xué)生信息的結(jié)構(gòu)體數(shù)組#include<>#include<>ge);% printf("name="); scanf("%s",pArr[i].name);ame不能改成&pArr[i].name printf("score="); scanf("%f",&pArr[i].score); } core>pArr[j+1].score)ge); printf("name=%s\n",pArr[i].name); printf("score=%f\n",pArr[i].score);… printf("\n"); } return0;} 總結(jié):對(duì)于一個(gè)人事管理或圖書(shū)管理項(xiàng)目,分析流程:第一步;存儲(chǔ);第二步:操作第三步:輸出前兩個(gè)過(guò)程最難、最核心是“數(shù)據(jù)結(jié)構(gòu)”研究的重點(diǎn),一般都屏蔽了。數(shù)組和變量雖然都可以存儲(chǔ),但都不完美。比如:人事關(guān)系圖、交通圖等,都不好用數(shù)組保存。從事關(guān)系結(jié)構(gòu)只能用“樹(shù)”還保存,而對(duì)于兩個(gè)起終點(diǎn):公交線(xiàn)路查詢(xún),實(shí)現(xiàn)時(shí)間最小/距離最短/花費(fèi)最低等功能,只能用“圖”來(lái)存。而圖和樹(shù)都必須有指針知識(shí),它們屬于較高深的思想層次的東西。因此要學(xué)好數(shù)據(jù)結(jié)構(gòu)必須要懂得指針。若感興趣:可以繼續(xù)學(xué)習(xí)郝斌老師的《數(shù)據(jù)結(jié)構(gòu)》教學(xué)視頻?!?鏈表(較難) C語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)的連接(過(guò)渡)鏈表是數(shù)據(jù)結(jié)構(gòu)第一部分而是C語(yǔ)言最后一章內(nèi)容,由此可以比較兩者難度 算法: 通俗定義: 解題的方法和步驟 狹義定義: 對(duì)存儲(chǔ)數(shù)據(jù)的操作 對(duì)不同的存儲(chǔ)結(jié)構(gòu),要完成某一個(gè)功能所執(zhí)行的操作是不一樣— 比如: 要輸出數(shù)組中所有的元素的操作和 要輸出鏈表中所有的元素的操作是不一樣的 這說(shuō)明: 算法是依附于存儲(chǔ)結(jié)構(gòu)的 不同的存儲(chǔ)結(jié)構(gòu),所執(zhí)行的算法是不一樣的 廣義定義: 廣義的算法也叫泛型C++ 無(wú)論數(shù)據(jù)是如何存儲(chǔ)的,對(duì)該數(shù)據(jù)的操作都是一樣的] 分層思想,站在更高的層次看,把內(nèi)部的實(shí)現(xiàn)給屏蔽 數(shù)組和鏈表都是線(xiàn)性的,都是先輸出一個(gè)元素后,再輸出下一個(gè)元素 我們至少可以通過(guò)兩種結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù) 數(shù)組 優(yōu)點(diǎn):存取速度快 缺點(diǎn):需要一整塊連續(xù)的空間(對(duì)于龐大數(shù)據(jù),往往沒(méi)有一個(gè)適合的較大的連續(xù)的空間如a[000000])! 插入和刪除元素效率很低(插入和刪除中間某個(gè)元素,其后的所有都要前后移動(dòng)) 鏈表 優(yōu)點(diǎn):插入刪除元素效率高 缺點(diǎn):查找某個(gè)位置的元素效率低(由于不是連續(xù)的,不同由下標(biāo)直接找,必須由頭至尾逐一比對(duì)查找)兩者各有所長(zhǎng),至今沒(méi)有出現(xiàn)一個(gè)更優(yōu)的存儲(chǔ)方式,可集數(shù)組、鏈表優(yōu)點(diǎn)于一身。 鏈表專(zhuān)業(yè)術(shù)語(yǔ): 首結(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ù)類(lèi)型和首結(jié)點(diǎn)的類(lèi)型是一模一樣的 頭結(jié)點(diǎn)是首結(jié)點(diǎn)前面的那個(gè)節(jié)點(diǎn) 頭結(jié)點(diǎn)并不存在有效數(shù)據(jù) 設(shè)置頭結(jié)點(diǎn)的目的是為了方便對(duì)鏈表的操作 頭指針:【 存放頭結(jié)點(diǎn)地址的指針變量 確定一個(gè)鏈表需要一個(gè)參數(shù),頭指針對(duì)于每個(gè)鏈表元素,分為左右兩部分,左邊為數(shù)據(jù)單元,右邊為下一元素地址。例:#include<>#include<>#include<>structNode!{ intdata;值零 2.字符串結(jié)束標(biāo)記'\0' 3.空指針NULL NULL表示零,而這個(gè)零不代表數(shù)字零,而表示的內(nèi)存單元的編號(hào)零 我們計(jì)算機(jī)規(guī)定了,以零為編號(hào)的存儲(chǔ)單元的內(nèi)容不可讀,不可寫(xiě) free(p); p=NULL; *p=0;錯(cuò)!把0號(hào)單元改寫(xiě)!0單元是非常重要的數(shù)據(jù)。程序員不可能讀寫(xiě)出0號(hào)單元信息.純C的知識(shí)(略)文件 不是用'流'的思想,用函數(shù)實(shí)現(xiàn),于javaC++沒(méi)聯(lián)系宏 typedef期末考試%1.什么叫分配內(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ù)清零2.變量為什么必須初始化、不初始化,變量通常是垃圾值,很可能是上次程序結(jié)束遺留下來(lái)的數(shù)據(jù)。3.詳細(xì)說(shuō)明系統(tǒng)如何執(zhí)行:inti=5;這條語(yǔ)句的1>Vc++軟件請(qǐng)求操作系統(tǒng)為i分配存儲(chǔ)空間2>操作系統(tǒng)會(huì)在內(nèi)存中尋找一塊空閑的區(qū)域,把該區(qū)域當(dāng)作i來(lái)使用3>Vc++會(huì)把i和這塊空間區(qū)域關(guān)聯(lián)起來(lái),今后對(duì)字母i操作就是對(duì)這塊空閑的區(qū)域操作。4>把5存儲(chǔ)到字母i所關(guān)聯(lián)的內(nèi)存區(qū)域中》附注:所謂內(nèi)存區(qū)域也就是內(nèi)存的一塊存儲(chǔ)單元4.詳細(xì)列出C語(yǔ)言所有基本類(lèi)型int longint shortint char float double5.在printf函數(shù)中,int用%d輸出,請(qǐng)問(wèn):longint char doublefloat分別用什么輸出%ld %c%lf %f6.函數(shù)的優(yōu)點(diǎn)|1>避免重復(fù)操作2>有利于程序的模塊化7.談?wù)勀銓?duì)函數(shù)的理解......8.什么是指針,什么是地址,什么是指針變量,三者之間的關(guān)系地址是內(nèi)存單元的編號(hào)指針就是地址指針和地址是同一個(gè)概念指針變量是存放內(nèi)存單元編號(hào)的變量. 指針變量和指針是兩個(gè)完全不同的概念,只不過(guò)人們通常把指針變量稱(chēng)作指針9.請(qǐng)寫(xiě)出靜態(tài)變量和動(dòng)態(tài)變量的異同相同點(diǎn): 都需要分配內(nèi)存不同點(diǎn): 靜態(tài)變量是由系統(tǒng)自動(dòng)分配,自動(dòng)釋放,程序員無(wú)法在程序運(yùn)行的過(guò)程當(dāng)中手動(dòng)分配, 也無(wú)法在程序運(yùn)行的過(guò)程中手動(dòng)釋放。 靜態(tài)變量是在棧中分配的,; 只有在函數(shù)終止之后,靜態(tài)變量的存儲(chǔ)空間會(huì)被系統(tǒng)自動(dòng)釋放。 動(dòng)態(tài)內(nèi)存是由程序員手動(dòng)分配,程序員可以在程序運(yùn)行的過(guò)程當(dāng)中手動(dòng)分配,手動(dòng)釋放。 動(dòng)態(tài)變量是在堆中分配的, 程序員可以在行是執(zhí)行過(guò)程中的任何時(shí)刻手動(dòng)釋放動(dòng)態(tài)變量的空間 不需要等到函數(shù)終止才釋放。語(yǔ)言中哪些知識(shí)點(diǎn)是我們學(xué)習(xí)的重點(diǎn),請(qǐng)一一列舉出來(lái)流程控制函數(shù)指針靜態(tài)內(nèi)存和動(dòng)態(tài)內(nèi)存)(1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024元宵節(jié)發(fā)言稿學(xué)生
- 新郎的結(jié)婚感謝詞
- 浙江省人教版歷史與社會(huì)七年級(jí)下冊(cè)7.1《規(guī)則的演變》教學(xué)設(shè)計(jì)1
- 陜西省石泉縣八年級(jí)道德與法治下冊(cè) 第一單元 堅(jiān)持憲法至上 第二課 保障憲法實(shí)施 第2框 加強(qiáng)憲法監(jiān)督教學(xué)實(shí)錄 新人教版
- 法學(xué)專(zhuān)業(yè)個(gè)人實(shí)習(xí)報(bào)告
- Module 4 Unit 2 Our favourite festival is the Spring Festival(教學(xué)設(shè)計(jì))-2024-2025學(xué)年外研版(三起)英語(yǔ)六年級(jí)上冊(cè)
- 5這些東西哪里來(lái)《物品身世“探秘”》教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治四年級(jí)下冊(cè)統(tǒng)編版五四制
- 《我是“非遺”小傳人》-皮影戲的表演(教學(xué)設(shè)計(jì))-2024-2025學(xué)年五年級(jí)上冊(cè)綜合實(shí)踐活動(dòng)魯科版
- DB34-T 4734-2024 企業(yè)公共信用綜合評(píng)價(jià)規(guī)范
- DB34-T 4849-2024 農(nóng)村水系整治效果評(píng)價(jià)
- 國(guó)開(kāi)(陜西)2024年秋《社會(huì)調(diào)查》形考作業(yè)1-4答案
- 車(chē)輛技術(shù)檔案
- 物業(yè)管理中的矛盾調(diào)解與協(xié)商
- 電解銅購(gòu)銷(xiāo)合同(國(guó)內(nèi)貿(mào)易)
- JBT 14933-2024 機(jī)械式停車(chē)設(shè)備 檢驗(yàn)與試驗(yàn)規(guī)范(正式版)
- DL-T300-2022火電廠(chǎng)凝汽器及輔機(jī)冷卻器管防腐防垢導(dǎo)則
- DZ/T 0430-2023 固體礦產(chǎn)資源儲(chǔ)量核實(shí)報(bào)告編寫(xiě)規(guī)范(正式版)
- DZ∕T 0270-2014 地下水監(jiān)測(cè)井建設(shè)規(guī)范(正式版)
- 兒科科室培訓(xùn)計(jì)劃
- 六年級(jí)用排水法求不規(guī)則物體體積綜合題市公開(kāi)課一等獎(jiǎng)省賽課獲獎(jiǎng)
- 2024年“民用無(wú)人機(jī)及多旋翼無(wú)人機(jī)”駕駛員操控員技能與理論知識(shí)考試題庫(kù)含答案
評(píng)論
0/150
提交評(píng)論