語言學(xué)習(xí)大綱郝斌講解doc_第1頁
語言學(xué)習(xí)大綱郝斌講解doc_第2頁
語言學(xué)習(xí)大綱郝斌講解doc_第3頁
語言學(xué)習(xí)大綱郝斌講解doc_第4頁
語言學(xué)習(xí)大綱郝斌講解doc_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、C語言概述:1、 為什么學(xué)習(xí)C語言1) . C的起源和發(fā)展2) .C的特點(diǎn)優(yōu)點(diǎn)代碼量小 速度快 功能強(qiáng)大缺點(diǎn)危險(xiǎn)性高開發(fā)周期長可移植性不強(qiáng)3) .c的應(yīng)用領(lǐng)域 主要是系統(tǒng)領(lǐng)域4) .c的重要性2、 怎樣學(xué)習(xí)C語言3、 學(xué)習(xí)的目標(biāo)了解程序語言及發(fā)展歷史熟練掌握c語言的語法規(guī)則掌握簡單的算法理解面向過程的思想,這非常有助于將來對(duì)面向?qū)ο笏枷氲膶W(xué)習(xí)能看懂程序會(huì)調(diào)試程序掌握將大問題轉(zhuǎn)化為一系列小問題來求解的思想為學(xué)習(xí)c+、數(shù)據(jù)結(jié)構(gòu)、c#、java打下良好的基礎(chǔ)4、 常見的學(xué)習(xí)問題1、 學(xué)習(xí)java為什么建議先學(xué)習(xí)C語言2、 沒學(xué)過計(jì)算機(jī)專業(yè)的課程能夠?qū)W懂C語言3、 英語和數(shù)學(xué)不好能學(xué)好C嗎 32個(gè)關(guān)鍵

2、詞:(有系統(tǒng)定義,不能重做其他定義)auto break case char const continue default do double else enum extern float for goto if int long register returnshort signed sizeof static structswitch typedef unsigned unsigned union void volatile while 5、 課程規(guī)劃c語言簡介 第一講、基本編程知識(shí) 第二講、數(shù)據(jù)類型第三講、運(yùn)算符和表達(dá)式第四講、流程控制(所有語言都一樣的)第五講、函數(shù)(體現(xiàn)出面向過程和面

3、向?qū)ο蟮膮^(qū)別)第六講、數(shù)組第七講、指針(c語言的靈魂)第八講、變量的作用域和存儲(chǔ)方式第九講、擴(kuò)展數(shù)據(jù)類型第十講、專題:字符串的處理進(jìn)制轉(zhuǎn)換補(bǔ)碼動(dòng)態(tài)內(nèi)存分配(java、數(shù)據(jù)結(jié)構(gòu)必學(xué))綜合應(yīng)用:鏈表的使用6、 舉例子:一元二次方程# include # include int main (void)/把三個(gè)系數(shù)保存到計(jì)算機(jī)中int a=1; /=不表示相等,表示賦值int b=2;int c=3;double delta; /delta存放的是b*b-4*a*cdouble x1; /存放一元二次方程的其中一個(gè)解double x2; /存放一元二次方程的其中一個(gè)解delta= b*b - 4*a*

4、c;if(delta0)x1 = (-b + sqrt(delta) / (2*a)x2 = (-b - sqrt(delta) / (2*a)printf(該一元二次方程有兩個(gè)解,x1=%f,x2=%fn,x1,x2);else if (delta=0)x1 =(-b)/(2*a);x1=x2; /右邊賦給左邊printf(該一元二次方程有一個(gè)唯一解,x1 = x2=%fn,x1);elseprintf(無解n);Helloword程序舉例# include int main(void)printf(歡迎大家學(xué)習(xí)C語言!);return 0;C語言編寫的病毒舉例:1、 齷齪的程序:/*齷齪的

5、程序!/*# include # include # include int main (void)int c;int i;int j;Nihao:printf(1:死機(jī)n);printf(2:機(jī)房爆炸n);printf(請(qǐng)選擇:);scanf(%d,&c);If (c =1)System(shutdown -s -t 60)else if (2 = c)printf(你太壞了 我要懲罰你!n);for (j=0;j10;+j)System(start); elseprintf(你敲錯(cuò)了,請(qǐng)重新輸入!n)goto nihao;return 0;2、 內(nèi)存泄露(占滿內(nèi)存)程序?qū)е滤罊C(jī)實(shí)例# in

6、clude # include int main(void)while (1)int *p = (int*)malloc(1000);return 0;C語言編程預(yù)備知識(shí)1、 cpu 內(nèi)存條 硬盤 顯卡 主板 顯示器 之間的關(guān)系2、 Helloworld程序如何運(yùn)行起來的3、 什么是數(shù)據(jù)類型基本類型數(shù)據(jù)整數(shù)整型 int 字節(jié) 短整型 short int字節(jié)長整型 long int字節(jié) 浮點(diǎn)數(shù)【實(shí)數(shù)】單精度浮點(diǎn)數(shù) float 字節(jié)雙精度浮點(diǎn)數(shù) double字節(jié)字符char 字節(jié)復(fù)合類型數(shù)據(jù)結(jié)構(gòu)體枚舉共用體(已淘汰)4、 什么是變量變量的本質(zhì)是內(nèi)存中一段存儲(chǔ)空間5、 cpu內(nèi)存條 vc+6.0 操

7、作系統(tǒng) 之間的關(guān)系6、 變量為什么必須初始化所謂初始化就是賦值的意思7、 如何定義變量數(shù)據(jù)類型 變量名 = 要賦的值;等價(jià)于數(shù)據(jù)類型 變量名;變量名 = 要賦的值;舉例子:int i = 3 ; 等價(jià)于 int i ; i = 3;int i, j ; 等價(jià)于 int i ; int j;int i, j = 3 ; 等價(jià)于 int i ; int j ; j = 3 ;int i = 3, j = 5 ; 等價(jià)于 int i , j ; i = 5 ; j = 5;int i , j ; i = j = 5 ;等價(jià)于 int i , j ; i = 5; j = 5; 8、 什么是進(jìn)制十進(jìn)制

8、就是逢十進(jìn)一二進(jìn)制就是逢二進(jìn)一生活中用到進(jìn)制的例子:一周七天: 七進(jìn)制一年十二個(gè)月: 十二進(jìn)制一小時(shí)六十分鐘: 六十進(jìn)制電腦中的數(shù)據(jù): 二進(jìn)制進(jìn)制轉(zhuǎn)化:什么叫進(jìn)制進(jìn)制就是逢幾進(jìn)一我們說的N進(jìn)制實(shí)際就是指逢N進(jìn)一我們的計(jì)算機(jī)只識(shí)別二進(jìn)制人類最習(xí)慣使用的是十進(jìn)制為了實(shí)際需要 我們又建立了八進(jìn)制和十六進(jìn)制C語言規(guī)定八進(jìn)制前要加0(注意是零不是字母o),十六進(jìn)制前要加0X或0x,十進(jìn)制前什么都不加!在匯編中:在數(shù)字后加字母B表示二進(jìn)制數(shù),加字母O表示八進(jìn)制數(shù),加字母D表示十進(jìn)制,加字母H表示十六進(jìn)制。例:1011B為二進(jìn)制數(shù)1011,也記為(1011)21357O為八進(jìn)制數(shù)1357,也記為(1357)

9、82049D為十進(jìn)制數(shù)2049,也記為(2049)103FB9H為十六進(jìn)制數(shù)3FB9,也記為(3FB9)16什么叫n進(jìn)制十進(jìn)制十個(gè)基數(shù),逢10進(jìn)一基數(shù):0 1 2 3 4 5 6 7 8 9二進(jìn)制二個(gè)基數(shù) 逢二進(jìn)一基數(shù): 0 1八進(jìn)制8個(gè)基數(shù) 逢8進(jìn)一基數(shù): 0 1 2 3 4 5 6 7十六進(jìn)制16個(gè)基數(shù) 逢16進(jìn)一基數(shù): 0 1 2 3 4 5 6 7 8 9 a b c d e f 或0 1 2 3 4 5 6 7 8 9 A B C D E F十進(jìn)制(D)二進(jìn)制(B)八進(jìn)制(O)十六進(jìn)制(0x)00001常用計(jì)數(shù)制對(duì)照表234567891011121314159、 常量在c語言中如何表

10、示的 整數(shù)十進(jìn)制: 傳統(tǒng)的寫法十六進(jìn)制: 前面加0x或0X,是數(shù)字0加x八進(jìn)制: 前面加數(shù)字0浮點(diǎn)數(shù):傳統(tǒng)寫法float x = 3.2;/傳統(tǒng)科學(xué)計(jì)數(shù)法float x = 3.2e3;/x的值是3200float x = 123.45e-2; /x的值是1.2345字符單個(gè)字符用單引號(hào)括起來A表示字符AAB是錯(cuò)誤的AB是正確的字符串用雙引號(hào)括起來A正確,因?yàn)锳代表了 A 0 的組合10、 常量以什么樣的二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)中整數(shù)是以補(bǔ)碼的形式轉(zhuǎn)化為二進(jìn)制代碼存儲(chǔ)在計(jì)算機(jī)中的實(shí)數(shù)是以IEEE754標(biāo)準(zhǔn)轉(zhuǎn)化為二進(jìn)制代碼儲(chǔ)存在計(jì)算機(jī)中的具體可參見末尾的 穿插在課堂中的零散知識(shí)筆記字符的本質(zhì)實(shí)際也

11、是與整數(shù)的存儲(chǔ)方式相同11、 代碼規(guī)范化代碼的可讀性更高【容易讓別人和自己看懂】是程序更不容易出錯(cuò)林銳高質(zhì)量C/C+編程 代碼要成對(duì)的敲12、 什么是字節(jié)字節(jié)就是存儲(chǔ)數(shù)據(jù)的單位,并且是硬件所能訪問的最小單位1字節(jié) = 8位1K = 1024字節(jié)1M = 1024 K1G = 1024 M 買硬盤時(shí)的換算是以1000為單位的13、 不同類型的數(shù)據(jù)之間相互賦值的問題暫不考慮int i = 45;long j = 102345;i= j;printf (%d %dn, i, j);float x = 6.6;double y = 8.8;printf(%f %lfn, x, y);14、 什么是AS

12、CIIASCII不是一個(gè)值,而是一種規(guī)定,ASCII規(guī)定了不同的字符是使用哪個(gè)整數(shù)值去表示它規(guī)定了A - 65B - 66a - 97b - 9815、 字符的存儲(chǔ)【字符本質(zhì)上與整數(shù)的存儲(chǔ)方式相同】基本的輸入和輸出函數(shù)的用法printf ()-(重點(diǎn)講)將變量的內(nèi)容輸出到顯示器上四種用法1. printf (字符串n)2. printf (輸出控制符,輸出參數(shù));3. printf (輸出字符1 輸出字符2 。, 輸出參數(shù)1, 輸出參數(shù)2, 。);輸出控制符和參數(shù)的個(gè)數(shù)必須一一對(duì)應(yīng)4. printf(輸出控制符 非輸出控制符, 輸出參數(shù));輸出控制符包含如下%d - int (十進(jìn)制)%ld

13、- long int%c - char%f - float%lf - double%x(或者%X或者%#X) - int 或 long int 或 short int%o - 同上%s - 字符串為什么需要輸出控制符1. 01組成的代碼可以表示數(shù)據(jù)也可以表示指令2. 如果01組成的代碼表示的是數(shù)據(jù)的話,那么同樣的01代碼組合以不同的輸出格式輸出就會(huì)有不同的輸出結(jié)果scanf () -Java中已經(jīng)沒有了兩種用法:用法一: scanf (輸入控制符, 輸入?yún)?shù));功能: 將從鍵盤輸入的字符轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入已輸入?yún)?shù)的值為地址的變量中。用法二: scanf(非輸入控制符

14、輸入控制符, 輸入?yún)?shù));功能: 將從鍵盤輸入的字符轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中非輸入控制符必須原樣輸入如何使用scanf編寫出高質(zhì)量代碼1. 使用scanf之前最好先使用printf提示用戶以什么樣的方式來輸入2. Scanf中盡量不要使用非輸入控制符,尤其是不要用n3. 應(yīng)該編寫代碼對(duì)用戶的非法輸入做適當(dāng)?shù)奶幚怼痉侵攸c(diǎn)】while (ch=getchar() != n)continue;運(yùn)算符算術(shù)運(yùn)算符+ - * /(除) %(取余數(shù))除法的運(yùn)算結(jié)果和運(yùn)算對(duì)象的數(shù)據(jù)類型有關(guān),兩個(gè)數(shù)都是int,則商就是int,若商有小數(shù),則截取小數(shù)部分;被除數(shù)和除數(shù)

15、中只要有一個(gè)或兩個(gè)都是浮點(diǎn)型數(shù)據(jù),則商也是浮點(diǎn)型,不截取小數(shù)部分。如: 16/5 = 3 16/5.0 = 3.20000 -13/4 = -4 -13/-3 = 4 3/5 = 0 5/3 = 1最經(jīng)典的例題就是求s = 1 + 1/2 + 1/3 + 1/4 + 1/5.+ 1/100的值。取余的運(yùn)算對(duì)象必須是整數(shù),結(jié)果是整除后的余數(shù),其余數(shù)的符號(hào)與被除數(shù)相等。如: 13%3 = 1 13%-3 = 1 -13%3 = -1 -13%23 = -13 3%5 = 3 關(guān)系運(yùn)算符 = 關(guān)系 邏輯 賦值 附錄一些瑣碎的運(yùn)算符知識(shí)自增 自減 三目運(yùn)算符 逗號(hào)表達(dá)式流程控制 (學(xué)習(xí)c語言的第一個(gè)重

16、點(diǎn)) 1. 什么是流程控制程序代碼執(zhí)行的順序2. 流程控制的分類順序選擇定義某些代碼可執(zhí)行,也可能不執(zhí)行,有選擇的執(zhí)行某些代碼分類if1. if最簡單的用法格式:if (表達(dá)式)語句功能:如果表達(dá)式為真,執(zhí)行語句如果表達(dá)式為假,語句不執(zhí)行2. if的范圍問題(重點(diǎn))1.if (表達(dá)式)語句A;語句B;解釋:if默認(rèn)只能控制語句A的執(zhí)行或不執(zhí)行 if無法控制語句B的執(zhí)行或不執(zhí)行或者講: 語句B一定會(huì)執(zhí)行2. If (表達(dá)式)語句A;語句B;此時(shí)if可以控制語句A和語句B由此可見:if默認(rèn)只能控制一個(gè)語句的執(zhí)行或不執(zhí)行,如果想控制多個(gè)語句的執(zhí)行或不執(zhí)行就必須把這些語句用括起來。3. if.else

17、.的用法4. if.else if.else.的用法格式:if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;elseD;5. C語言對(duì)真假的處理非零是真零就是假真用一表示假用零表示6. if舉例-求分?jǐn)?shù)的等級(jí)7. if的常見問題解析1. 空語句的問題if (3 2);等價(jià)于if (3 2); /這是一個(gè)空語句2. if (表達(dá)式1)A;elseB;是正確的if (表達(dá)式1);A;elseB;是錯(cuò)誤的 3.if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;elseD;即便表達(dá)式1和2都成立,也只會(huì)執(zhí)行A語句4.if (表達(dá)式1)A;else i

18、f (表達(dá)式2)B;if (表達(dá)式3)C;這樣些語法不會(huì)錯(cuò),但邏輯上有漏洞、5.if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;else (表達(dá)式4) /7行D;這樣寫是不對(duì)的,正確的寫法是: 要么去掉7行的(表達(dá)式4) 要么在7行的else后面加if6. if (表達(dá)式1)A;else if (表達(dá)式2)B;if (表達(dá)式3)C;else (表達(dá)式4); D;這樣寫語法不會(huì)錯(cuò),但邏輯上是錯(cuò)誤的else (表達(dá)式4); D;等價(jià)于 else (表達(dá)式4);D;對(duì)任意三個(gè)數(shù)字進(jìn)行排序:如果ab則a與c比較 ac 則輸出a ac 則輸出b bc 則輸出c穿插在課堂中的零

19、散知識(shí)筆記:如何看懂一個(gè)程序,分三步:1. 流程2. 每個(gè)語句的功能3. 試 數(shù)如何學(xué)習(xí)一些需要算法的程序【如何掌握一個(gè)程序】1. 嘗試自己去編程解決它但要意識(shí)到大部分人都是自己無法解決的,如果解決不了,這時(shí)不要?dú)怵H如果十五分鐘還想不出來,此時(shí)我建議您就可以看答案了2. 如果解決不了,就看答案關(guān)鍵是把答案看懂,這個(gè)要花很大的精力,也是我們學(xué)習(xí)的重點(diǎn)看懂一個(gè)程序要分三步:流程、每個(gè)語句的功能、試數(shù)3. 看懂之后嘗試自己去修改程序,并且知道修改之后程序的不同輸出結(jié)果的含義不建議看懂程序之后就立即自己敲程序4. 照著答案去敲5. 調(diào)試錯(cuò)誤6. 不看答案,自己獨(dú)立把答案敲出來7. 如果程序?qū)嵲跓o法徹底

20、理解,就把它背會(huì),無法徹底理解的程序很少很少幾乎沒有 強(qiáng)制類型轉(zhuǎn)換 格式: (數(shù)據(jù)類型)(表達(dá)式) 功能: 把表達(dá)式的值強(qiáng)制轉(zhuǎn)換為前面所執(zhí)行的數(shù)據(jù)類型 例子: (int)(4.5+2.2) 最終值是 6 (float)(5) 最終值是 5.0000000 浮點(diǎn)數(shù)的存錯(cuò)所帶來的問題 float和 double都不能保證可以把所有實(shí)數(shù)都準(zhǔn)確的保存在計(jì)算機(jī)中 例子:float i = 99.9;printf(%fn, i);最終結(jié)果在VC+6.0中的輸出的結(jié)果是:99.900002 因?yàn)楦↑c(diǎn)數(shù)無法準(zhǔn)確存儲(chǔ),所以就衍生出來兩個(gè)編程問題 舉例: 有一個(gè)浮點(diǎn)型變量x,如何判斷x的值是否是零if (|x-0

21、.0000001| m=121 sum=0*10+121%10=1 m=m/10=12;m=12成立 sum=1*10+12%10=12 m=12/10=1m=1成立 sum=12*10+1%10=121 m=1/10=0m=0不成立sum=val4. 什么時(shí)候使用while,什么時(shí)候使用for沒法說,用多了自然而然就知道了do.while格式:do.while(表達(dá)式);do.while.并不等價(jià)于for,當(dāng)然也不等價(jià)于while主要用于人機(jī)交互一元二次方程舉例break和continuebreak(很重要)break如果用于循環(huán)是用來終止循環(huán)break如果用于switch,則是用于終止sw

22、itchbreak不能直接用于if,除了if屬于循環(huán)內(nèi)部的一個(gè)子句例子:for (i=0;i 2)break; /break雖然是if內(nèi)的語句,但break終止的卻是外部的for循環(huán)printf (嘿嘿!n); /永遠(yuǎn)不會(huì)輸出在多層循環(huán)中,break只能終止距離它最近的那個(gè)循環(huán)for (i=0; i3; +i)for (j=1; j4;+j)break; /break只能終止距離它最近的循環(huán)printf (同志們好!n); 在多層switch嵌套中,break只能終止距離它最近的switch例子:int x=1, y=0, a=0, b=0;switch (x) /第一個(gè)switchcase

23、1:switch (y) /第二個(gè)switchcase 0:a+;break; /終止的是第二個(gè)switchcase 1:b+;break;b = 100;break; /終止的是第一個(gè)switchcase 2:a+;b+;break;printf (%d %dn, a,b); /26行最終輸出結(jié)果是:1 100continue(用的很少)用于跳過本次循環(huán)余下的語句,轉(zhuǎn)去判斷是否需要下次循環(huán)for (1; 2; 3)A;B;continue;/如果執(zhí)行該語句,則執(zhí)行完該語句后,會(huì)執(zhí)行語句3,C和D都不會(huì)執(zhí)行C;D;while (表達(dá)式)A;B;continue;/如果執(zhí)行該語句,則執(zhí)行完該語句

24、后,會(huì)執(zhí)行表達(dá)式,C和D都不執(zhí)行。C;D; 數(shù)組1. 為什么需要數(shù)組為了解決大量同類型數(shù)據(jù)的存儲(chǔ)和使用問題。為了模擬現(xiàn)實(shí)世界2. 數(shù)組的分類一維數(shù)組怎么定義一維數(shù)組為n個(gè)變量連續(xù)分配存儲(chǔ)空間所有的變量數(shù)據(jù)類型必須相同所有變量所占的字節(jié)大小必須相等例子:int a5;一維數(shù)組名不代表數(shù)組中所有的元素,一維數(shù)組名代表數(shù)組第一個(gè)元素的地址有關(guān)一維數(shù)組的操作初始化完全初始化int a5 = 1,2,3,4,5;不完全初始化,未被初始化的元素自動(dòng)為零int a5 = 1,2,3;不初始化,所有元素是垃圾值int a5;清零int a5 = 0;錯(cuò)誤寫法:int a5;a5 = 1,2,3,4,5; /錯(cuò)

25、誤只有在定義數(shù)組的同時(shí)才可以整體賦值,其他情況下整體賦值都是錯(cuò)誤的int a5 = 1,2,3,4,5;a5 = 100; /error因?yàn)闆]有a5這個(gè)元素,最大只有a4int a5 = 1,2,3,4,5;int b5;如果把a(bǔ)數(shù)組中的值全部復(fù)制給b數(shù)組錯(cuò)誤寫法:b = a; / error正確的寫法for (i=0; i5; +i)bi = ai;賦值排序求最大/小值倒置查找插入刪除二維數(shù)組Int a34;總共是12元素看,可以當(dāng)做3行四列看待,這12個(gè)元素的名字依次是:a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23aij 表示第i+1行第j

26、+1列的元素int amn; 該二維數(shù)組右下角位置的元素只能是am-1n-1初始化int a34 = 1,2,3,4,5,6,7,8,9,10,11,12;int a34 = 1, 2, 3, 4,5, 6, 7, 8,9, 10, 11, 12;操作輸出二維數(shù)組的內(nèi)容:int a34 = 1, 2, 3, 4,5, 6, 7, 8,9, 10, 11, 12;int i, j;/輸出數(shù)組內(nèi)容for (i=0; i3; +i)for (j=0; j 終止被調(diào)函數(shù),向主調(diào)函數(shù)返回表達(dá)式的值2 如果表達(dá)式為空,則只終止函數(shù),不向主調(diào)函數(shù)返回任何值3 break是用來終止循環(huán)和switch的,ret

27、urn是用來終止函數(shù)的例子:void f()return; /return只用來終止函數(shù),不向被調(diào)函數(shù)返回任何值int f()return 10; /第一:終止函數(shù),第二:向主調(diào)函數(shù)返回103. 函數(shù)返回值的類型也稱為函數(shù)的類型,因?yàn)槿绻?函數(shù)名前的返回值的類型 和函數(shù)執(zhí)行體中的return表達(dá)式;中表達(dá)式的類型不同的話,則最終函數(shù) 返回值的類型 以函數(shù)名前的返回值類型為準(zhǔn)例子:int f()return 10.5; /因?yàn)楹瘮?shù)的返回值類型是int 所以最終f返回的是10而不是10.5函數(shù)的分類有參函數(shù) 和 無參函數(shù)有返回值函數(shù) 和 無返回值函數(shù)庫函數(shù) 和 用戶自定義函數(shù)值傳遞函數(shù) 和 地址傳

28、遞函數(shù)普通函數(shù) 和 主函數(shù)(main函數(shù))一個(gè)程序必須有且只能有一個(gè)主函數(shù)主函數(shù)可以調(diào)用普通函數(shù) 普通函數(shù)不能調(diào)用主函數(shù)普通函數(shù)可以相互調(diào)用主函數(shù)是程序的入口,也是程序的出口注意的問題函數(shù)調(diào)用和函數(shù)定義的順序如果函數(shù)調(diào)用寫在了函數(shù)定義的前面,則必須加函數(shù)前置聲明函數(shù)前置聲明:1. 告訴編譯器即將可能出現(xiàn)的若干個(gè)字母代表的是一個(gè)函數(shù)2. 告訴編譯器即將可能出現(xiàn)的若干個(gè)字母所代表的函數(shù)的形參和返 回值的具體情況3. 函數(shù)聲明是一個(gè)語句,末尾必須加分號(hào)4. 對(duì)庫函數(shù)的聲明是通過 # include 來實(shí)現(xiàn)形參和實(shí)參個(gè)數(shù)相同 位置一一對(duì)應(yīng) 數(shù)據(jù)類型必須相互兼容如何在軟件開發(fā)中合理的設(shè)計(jì)函數(shù)來解決實(shí)際問

29、題一個(gè)函數(shù)的功能盡量獨(dú)立,單一多學(xué)習(xí), 多模仿牛人的代碼函數(shù)是C語言的基本單位,類是Java,C#,C+的基本單位常用的系統(tǒng)函數(shù)double sqrt (double x);求x的平方根int abs (int x)求x的絕對(duì)值double fabs (double x)求x的絕對(duì)值專題:遞歸(可以參見數(shù)遞結(jié)構(gòu)視頻)變量的作用域和存儲(chǔ)方式:按作用域分:全局變量在所有函數(shù)外部定義的變量叫全局變量全局變量使用范圍: 從定義位置開始到整個(gè)程序結(jié)束局部變量在一個(gè)函數(shù)內(nèi)部定義的變量或者函數(shù)的形參 都統(tǒng)稱為局部變量 void f (int i)int j = 20;I和j都屬于局部變量局部變量使用范圍:只

30、能在本函數(shù)內(nèi)部使用注意的問題:全局變量和局部變量命名沖突的問題在一個(gè)函數(shù)內(nèi)部如果定義的局部變量的名字和全局變量名一樣時(shí),局部變量會(huì)屏蔽掉全局變量按變量的存儲(chǔ)方式靜態(tài)變量自動(dòng)變量寄存器變量指針:指針的重要性表示一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)快速傳遞數(shù)據(jù),減少了內(nèi)存的耗用【重點(diǎn)】使函數(shù)返回一個(gè)以上的值【重點(diǎn)】能直接訪問硬件能夠方便的處理字符串是理解面向?qū)ο笳Z言中引用的基礎(chǔ)總結(jié): 指針是c語言的靈魂指針的定義地址內(nèi)存單元的編號(hào)從零開始的非負(fù)整數(shù)范圍:4G【04G-1】指針指針就是地址,地址就是指針指針就越是內(nèi)存單元的編號(hào)指針變量是存放地址的變量指針和指針變量是兩個(gè)不同的概念但是要注意:通常我們敘述時(shí)會(huì)把指針變量

31、簡稱為指針,實(shí)際他們含義并不一樣指針的本質(zhì)就是一個(gè)操作受限的非負(fù)整數(shù)指針的分類1. 基本類型指針int * p; /p是變量的名字,int * 表示p變量存放的int類型變量的地址/int * p;不表示定義了一個(gè)名字叫做*p的變量/ int * p;應(yīng)該這樣理解:p是變量名,p變量的數(shù)據(jù)類型是int *類型/所謂int * 類型 實(shí)際就是存放int變量地址的類型int i = 3;int j;p = &i;/*1.p保存了i的地址,因此p指向i2.p不是i,i也不是p,更準(zhǔn)確的說:修改p的值不影響i的值,修改i的值也不會(huì)影響p的值3.如果一個(gè)指針變量指向了某個(gè)普通變量,則*指針變量 就完全等

32、同于 普通變量例子:如果p是個(gè)指針變量。并且p存放了普通變量i的地址,則p指向了普通變量i*p 就完全等同于 i或者說: 在所有出現(xiàn)*p的地方都可以替換成i,在所有出現(xiàn)i的地方都可以替換成*p*p 就是以p的內(nèi)容為地址的變量*/j = *p; /等價(jià)于 j = i;printf(i = %d, j = %dn, i, j);經(jīng)典指針程序_互換兩個(gè)數(shù):# include void huhuan(int * p, int * q)int t;/如果要互換p和q的值,則t必須是int *,不能是int,否則會(huì)出錯(cuò)/如果要互換*p和*q的值,則t必須定義成int,不能定義成int *,否則語法會(huì)出錯(cuò)t

33、 = *p; /p是int *, *p是int*p = *q;*q = t;int main (void)int a = 3;int b = 5;huhuan(&a, &b);/huhuan(*p,*q);是錯(cuò)誤的,huhuan(a,b);也是錯(cuò)誤的printf(a = %d, b = %dn, a, b);return 0;附注:*的含義1. 乘法2. 定義指針變量int * p;/定義了一個(gè)名字叫p的變量,int * 表示只能存放int變量的地址3. 指針運(yùn)算符該運(yùn)算符放在已經(jīng)定義好的指針變量的前面如果p是一個(gè)已經(jīng)定義好的指針變量則 *p表示 以p的內(nèi)容為地址的變量如何通過被調(diào)函數(shù)修改主調(diào)

34、函數(shù)普通變量的值1. 實(shí)參必須為該普通變量的地址2. 形參必須為指針變量3. 在被調(diào)函數(shù)中通過*形參名 = .的方式就可以修改主調(diào)函數(shù)相關(guān)變量的值2. 指針和數(shù)組指針和一維數(shù)組一維數(shù)組名一維數(shù)組名是個(gè)指針常量它存放的是一維數(shù)組第一個(gè)元素的地址下標(biāo)和指針如果p是個(gè)指針變量,則pi永遠(yuǎn)等價(jià)于 *p(p+i)確定一個(gè)一維數(shù)組需要幾個(gè)參數(shù)【如果一個(gè)函數(shù)要處理一個(gè)一維數(shù)組,則需要接收該數(shù)組的哪些信息】需要兩個(gè)參數(shù):數(shù)組第一個(gè)元素的地址數(shù)組的長度指針變量的運(yùn)算指針變量不能相加 不能相乘 也不能相除如果兩個(gè)指針變量指向的是同一塊連續(xù)空間中的不同存儲(chǔ)單元,則這兩個(gè)指針變量才可以相減。一個(gè)指針變量到底占幾個(gè)字節(jié)

35、【非重點(diǎn)】預(yù)備知識(shí):sizeof(數(shù)據(jù)類型)功能:返回值就是該數(shù)據(jù)類型所占的字節(jié)數(shù)例子:sizeof(int) = 4 sizeof(char) = 1sizet(double) = 8sizeof(變量名)功能:返回值是該變量所占的字節(jié)數(shù) 假設(shè)p指向char類型變量(1個(gè)字節(jié))假設(shè)q指向int類型變量(4個(gè)字節(jié))假設(shè)r指向double類型變量(8個(gè)字節(jié))p q r 本身所占的字節(jié)數(shù)是否一樣 ?答案: p q r 本身所占字節(jié)數(shù)是一樣的總結(jié):一個(gè)指針變量,無論它指向的變量占幾個(gè)字節(jié)該指針變量本身只占四個(gè)字節(jié)一個(gè)變量的地址是用該變量首字節(jié)的地址來表示指針和二維數(shù)組3. 指針和函數(shù)4. 指針和結(jié)構(gòu)

36、體5. 多級(jí)指針專題:動(dòng)態(tài)內(nèi)存分配【重點(diǎn)難點(diǎn)】傳統(tǒng)數(shù)組的缺點(diǎn):1. 數(shù)組長度必須事現(xiàn)指定,且只能是常整數(shù),不能是變量例子:Int a 5; /OKInt len = 5; int a len; /error2. 傳統(tǒng)形式定義的數(shù)組,該數(shù)組的內(nèi)存程序員無法手動(dòng)釋放數(shù)組一旦定義,系統(tǒng)就為該數(shù)組分配的存儲(chǔ)空間就會(huì)一直存在,除非數(shù)組所在的函數(shù)運(yùn)行結(jié)束或者說:在一個(gè)函數(shù)運(yùn)行期間,系統(tǒng)為該函數(shù)中數(shù)組所分配的空間會(huì)一直存在,直到該函數(shù)運(yùn)行完畢時(shí),數(shù)組的空間才會(huì)被系統(tǒng)釋放3. 數(shù)組的長度不能在函數(shù)運(yùn)行的過程中動(dòng)態(tài)的擴(kuò)充或縮小數(shù)組的長度一旦定義,其長度就不能再更改4. A函數(shù)定義的數(shù)組,在A函數(shù)運(yùn)行期間可以被其

37、它函數(shù)使用,但A函數(shù)運(yùn)行完畢之后,A函數(shù)中的數(shù)組將無法再被其他函數(shù)使用傳統(tǒng)方式定義的數(shù)組不能跨函數(shù)使用為什么需要?jiǎng)討B(tài)內(nèi)存分配內(nèi)存動(dòng)態(tài)數(shù)組很好的解決了傳統(tǒng)數(shù)組的這4個(gè)缺陷傳統(tǒng)數(shù)組也叫靜態(tài)數(shù)組動(dòng)態(tài)內(nèi)存分配舉例_ 動(dòng)態(tài)數(shù)組的構(gòu)造靜態(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)存是在堆中分配的跨函數(shù)使用內(nèi)存的問題結(jié)構(gòu)體為什么需要結(jié)構(gòu)體為了表示一些復(fù)雜的事物,而普通的基本類型無法滿足實(shí)際要求。什么叫結(jié)構(gòu)體把一些基本類型數(shù)據(jù)組合在一起形成的一個(gè)新的復(fù)合數(shù)據(jù)類型,這個(gè)叫做結(jié)構(gòu)體。如何定義結(jié)構(gòu)體3種方式,推薦使用第一種:/第一種方

38、式struct Studentint age;float score;char sex;/第二種方式struct Student2int age;float score;char sex; st2;/第三種方式structint age;float score;char sex; st3;怎么使用結(jié)構(gòu)體變量賦值和初始化定義的同時(shí)可以整體賦初值如果定義完之后,則只能單個(gè)的賦初值如何取出結(jié)構(gòu)體變量中的每一個(gè)成員【重點(diǎn)】1. 結(jié)構(gòu)體變量名.成員名2. 指針變量名成員名 (第二種方式更常用)指針變量名成員名 在計(jì)算機(jī)內(nèi)部會(huì)被轉(zhuǎn)化成 (*指針變量名).成員名的方式來執(zhí)行所以說這兩種方式是等價(jià)的例子:struct Studentint age;float score;char sex;int main (void)struct Student st = 80, 66.6, F;/初始化 定義的同時(shí)賦初值struct Student * pst = &st; /&st不能改成stpst-age = 88;/第二種方式st.age = 10

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論