C語(yǔ)言學(xué)習(xí)大綱郝斌_第1頁(yè)
C語(yǔ)言學(xué)習(xí)大綱郝斌_第2頁(yè)
C語(yǔ)言學(xué)習(xí)大綱郝斌_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余30頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

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

2、做其他定義)autobreakcase char constcon ti nuedefault dodouble elseenumexter nfloatfor gotoif intlongregisterreturnshortsig nedsizeofstatic structswitchtypedefun sig nedun sig nedunionvoidvolatilewhile5、課程規(guī)劃c語(yǔ)言簡(jiǎn)介第一講、基本編程知識(shí)第二講、數(shù)據(jù)類型第三講、運(yùn)算符和表達(dá)式第四講、流程控制(所有語(yǔ)言都一樣的)第五講、函數(shù)(體現(xiàn)出面向過(guò)程和面向?qū)ο蟮膮^(qū)別)第六講、數(shù)組第七講、指針(c語(yǔ)言的靈魂)第八講、

3、變量的作用域和存儲(chǔ)方式第九講、擴(kuò)展數(shù)據(jù)類型第十講、專題:字符串的處理進(jìn)制轉(zhuǎn)換 補(bǔ)碼動(dòng)態(tài)內(nèi)存分配(java、數(shù)據(jù)結(jié)構(gòu)必學(xué))綜合應(yīng)用:鏈表的使用x2=%fn",x1);elseprintf("無(wú)解 n");Helloword程序舉例# in clude <stdio.h>int main( void)printf("歡迎大家學(xué)習(xí)C語(yǔ)言!"); return 0;6、舉例子:一元二次方程# in elude <stdio.h># in elude <math.h>int main (void)/把三個(gè)系數(shù)保存到計(jì)算

4、機(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*c;if(delta>0)x1 = (-b + sqrt(delta) / (2*a)x2 = (-b - sqrt(delta) / (2*a)printf(”該一元二次方程有兩個(gè)解,x仁 f,x2=%fn",x1,x2);else if (delta=0)x1 =(-b)/(2*a);x1=x2

5、;/右邊賦給左邊printf("該一元二次方程有一個(gè)唯一解,x1 =C語(yǔ)言編寫的病毒舉例:1齷齪的程序:/*齷齪的程序else if (2 = c)/*# in elude <stdio.h># in elude <win dows.h># in elude <malloe.h>int mai n (void)int c;int i;int j;Nihao :printf("1:死機(jī) n”);printf("2:機(jī)房爆炸 n”); printf("請(qǐng)選擇:");scan f("%d,&c&q

6、uot;);If (c =1)printf("你太壞了我要懲罰你!n"); for (j=O;j<1O;+j)System("start");elseprintf("你敲錯(cuò)了,請(qǐng)重新輸入!n") goto n ihao;return 0;2、內(nèi)存泄露(占滿內(nèi)存)程序?qū)е滤罊C(jī)實(shí)例# in clude <stdio.h># in clude <malloc.h>int mai n(void)while (1)int *p = (in t*)malloc(1000);return 0;System("

7、shutdown -s -t 60")5、cpu內(nèi)存條vc+6.0操作系統(tǒng)之間的關(guān)系6、變量為什么必須初始化 所謂初始化就是賦值的意思C語(yǔ)言編程預(yù)備知識(shí)1、cpu內(nèi)存條硬盤顯卡主板顯示器之間的關(guān)系2、Helloworld程序如何運(yùn)行起來(lái)的1字節(jié)3、什么是數(shù)據(jù)類型基本類型數(shù)據(jù)整數(shù)整型 int4字節(jié)短整型short int2字節(jié)長(zhǎng)整型long int8字節(jié)浮點(diǎn)數(shù)【實(shí)數(shù)】單精度浮點(diǎn)數(shù)float4字節(jié)雙精度浮點(diǎn)數(shù) 一一double 8字節(jié)字符char復(fù)合類型數(shù)據(jù)結(jié)構(gòu)體枚舉共用體(已淘汰)4、什么是變量變量的本質(zhì)是內(nèi)存中一段存儲(chǔ)空間7、如何定義變量數(shù)據(jù)類型 變量名=要賦的值; 等價(jià)于數(shù)據(jù)類型變

8、量名; 變量名=要賦的值;舉例子: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)制就是逢十進(jìn)一一二進(jìn)制就是逢二進(jìn)一生活中用到進(jìn)制的例子:一周七天:七進(jìn)制一年十二個(gè)月:十二進(jìn)制一小時(shí)六十分鐘:六十進(jìn)制電腦中的數(shù)據(jù):二進(jìn)制進(jìn)制轉(zhuǎn)化:什么叫

9、進(jìn)制進(jìn)制就是逢幾進(jìn)一我們說(shuō)的N進(jìn)制實(shí)際就是指逢 N進(jìn)一一我們的計(jì)算機(jī)只識(shí)別二進(jìn)制人類最習(xí)慣使用的是十進(jìn)制 為了實(shí)際需要 我們又建立了八進(jìn)制和十六進(jìn)制C語(yǔ)言規(guī)定八進(jìn)制前要加 0 (注意是零不是字母 o),十六進(jìn)制前要加 0X或0x,十進(jìn)制前什么都不加!在匯編中:在數(shù)字后加字母 B表示二進(jìn)制數(shù),加字母0表示八進(jìn)制數(shù), 加字母D表示十進(jìn)制,加字母 H表示十六進(jìn)制。例:1011B為二進(jìn)制數(shù)1011,也記為(1011)213570為八進(jìn)制數(shù)1357,也記為(1357) 82049D為十進(jìn)制數(shù) 2049,也記為(2049)但3FB9H為十六進(jìn)制數(shù) 3FB9,也記為(3FB9)伍 什么叫n進(jìn)制十進(jìn)制十個(gè)基數(shù)

10、,逢10進(jìn)一基數(shù):0 1 2 3 4 5 6 7 8 9二進(jìn)制二個(gè)基數(shù)逢二進(jìn)一基數(shù):01八進(jìn)制8個(gè)基數(shù)逢8進(jìn)一基數(shù): 0 1 2 3 4 5 6 7十六進(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)制(0)十八進(jìn)制(0x)000012345678910111213141516個(gè)基數(shù)逢16進(jìn)i, j);9、常量在c語(yǔ)言中如何表示的整數(shù)十進(jìn)制:傳統(tǒng)的寫法十六進(jìn)制:前面加Ox或0X,是數(shù)字0加x八進(jìn)制:前面加數(shù)字0浮點(diǎn)數(shù):傳統(tǒng)寫法float x = 3.2;/ 傳統(tǒng)科學(xué)計(jì)數(shù)法flo

11、at x = 3.2e3 ; /x 的值是 3200float x = 123.45e-2; /x 的值是 1.2345字符單個(gè)字符用單引號(hào)括起來(lái)'A'表示字符A'AB'是錯(cuò)誤的"AB"是正確的字符串用雙引號(hào)括起來(lái)"A"正確,因?yàn)?quot;A"代表了 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í)際也是與整數(shù)的存

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

13、規(guī)范化ASCII不是一個(gè)值,而是一種規(guī)定,ASCII規(guī)定了不同的字符是使用哪個(gè)整數(shù)值去表示它規(guī)定了'A'-65'B'-66'a'-97'b'-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. p

14、rintf(”輸出控制符 非輸出控制符”,輸出參數(shù));輸出控制符包含如下%d- int (十進(jìn)制)%ld- 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ù));功能:將從鍵盤輸入的字符

15、轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入已輸入?yún)?shù)的值為地址的變量中。用法二:scanf("非輸入控制符輸入控制符”,輸入?yún)?shù));功能:將從鍵盤輸入的字符轉(zhuǎn)化為輸入控制符所規(guī)定格式的數(shù)據(jù),然后存入以輸入?yún)?shù)的值為地址的變量中非輸入控制符必須原樣輸入如何使用scanf編寫出高質(zhì)量代碼1. 使用scanf之前最好先使用printf提示用戶以什么樣 的方式來(lái)輸入2. Scanf中盡量不要使用非輸入控制符,尤其是不要用n3. 應(yīng)該編寫代碼對(duì)用戶的非法輸入做適當(dāng)?shù)奶幚怼痉侵攸c(diǎn)】while (ch=getchar() != 'n')con ti nue;運(yùn)算符算術(shù)運(yùn)算符+-*/

16、(除)(取余數(shù))除法的運(yùn)算結(jié)果和運(yùn)算對(duì)象的數(shù)據(jù)類型有關(guān),兩個(gè)數(shù)都是int,則商就是int,若商有小數(shù),則截取小數(shù)部分;被除數(shù)和除數(shù)中只要有一 個(gè)或兩個(gè)都是浮點(diǎn)型數(shù)據(jù),則商也是浮點(diǎn)型,不截取小數(shù)部分。女口:16/5 = 316/5.0 = 3.20000-13/4 = -4-13/-3 = 43/5 = 05/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 = 113%-3 = 1-13%3 = -1-13%23 = -133%5 = 3關(guān)系運(yùn)算符

17、>>=<<=!=(不等于)=(等于)邏輯運(yùn)算法!(非)&&(并且)|(或)!真假!假真真&&真真真&&假假假&&真假假&&假假真|假真假|(zhì)真真真慎真假|(zhì)假假C語(yǔ)言對(duì)真假的處理 非零是真 零是假真是1表示 假使0表示&&左邊的表達(dá)式為假右邊的表達(dá)式肯定不會(huì)執(zhí)行| |左邊的表達(dá)式為真右邊的表達(dá)式肯定不會(huì)執(zhí)行賦值運(yùn)算符 += *=/一 優(yōu)先級(jí)別算術(shù) > 關(guān)系 > 邏輯 > 賦值 附錄一些瑣碎的運(yùn)算符知識(shí)自增 自減 三目運(yùn)算符 逗號(hào)表達(dá)式 流程控制(學(xué)習(xí)c語(yǔ)言的第一

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

19、重點(diǎn))1.if (表達(dá)式)語(yǔ)句A ;語(yǔ)句B ;解釋:if默認(rèn)只能控制語(yǔ)句 A的 執(zhí)行或不執(zhí)行if無(wú)法控制語(yǔ)句 B的執(zhí)行或不執(zhí)行或者講:語(yǔ)句B 一定會(huì)執(zhí)行5. C語(yǔ)言對(duì)真假的處理if (表達(dá)式1)非零是真A;零就是假else if(表達(dá)式2)真用表示B;if(表達(dá)式3)假用零表示C;6. if舉例-求分?jǐn)?shù)的等級(jí)else7. if的常見問(wèn)題解析D;1.空語(yǔ)句的問(wèn)題即便表達(dá)式1和2都成立,也只會(huì)執(zhí)if (3 > 2);行A語(yǔ)句等價(jià)于4.if (3 > 2)if (表達(dá)式1);這是一個(gè)空語(yǔ)句A;2.else if (表達(dá)式2)if (表達(dá)式1)B;A ;if (表達(dá)式3)elseC;B;這

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

21、則b與c比較 b>c則輸出b b<c則輸出c穿插在課堂中的零散知識(shí)筆記:如何看懂一個(gè)程序,分三步:1. 流程2. 每個(gè)語(yǔ)句的功能3. 試數(shù)如何學(xué)習(xí)一些需要算法的程序【如何掌握一個(gè)程序】1. 嘗試自己去編程解決它但要意識(shí)到大部分人都是自 己無(wú)法解決的,如果解決不了, 這時(shí)不要?dú)怵H如果十五分鐘還想不出來(lái), 此時(shí)我建議您就可以看答案了2. 如果解決不了,就看答案關(guān)鍵是把答案看懂,這個(gè)要 花很大的精力,也是我們學(xué)習(xí)的 重點(diǎn)看懂一個(gè)程序要分三步:流 程、每個(gè)語(yǔ)句的功能、試數(shù)3. 看懂之后嘗試自己去修改程序,并 且知道修改之后程序的不同輸出結(jié)果的含 義不建議看懂程序之后就立即自己敲程序4. 照

22、著答案去敲有一個(gè)浮點(diǎn)型變量 x,如何判斷x的值是否是零不同:5. 調(diào)試錯(cuò)誤6. 不看答案,自己獨(dú)立把答案敲出來(lái)7. 如果程序?qū)嵲跓o(wú)法徹底理解,就把 它背會(huì),無(wú)法徹底理解的程序很少很少幾 乎沒有強(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ò)所帶來(lái)的問(wèn)題float和double都不能保證可以把所有實(shí)數(shù)都準(zhǔn)確的 保存在計(jì)算機(jī)中例子:float i = 99.9;prin tf("%fn", i);最終結(jié)果在 VC+6.0中的輸出的

23、結(jié)果是:99.900002因?yàn)楦↑c(diǎn)數(shù)無(wú)法準(zhǔn)確存儲(chǔ),所以就衍生出來(lái)兩個(gè)編程 問(wèn)題舉例:if (|x-0.0000001| < =0.0000001)是零else不是零為什么循環(huán)更新的變量不能定義成浮點(diǎn)型進(jìn)制的復(fù)習(xí):1. 什么是進(jìn)制逢n進(jìn)一2. 把r進(jìn)制轉(zhuǎn)成十進(jìn)制3. 十進(jìn)制轉(zhuǎn)成r進(jìn)制十進(jìn)制轉(zhuǎn)r進(jìn)制:除r取余,直至商為0,余數(shù)倒序4. 不同進(jìn)制所代表的數(shù)值之間的關(guān)系十進(jìn)制的3981轉(zhuǎn)化成十六進(jìn)制是F8D十進(jìn)制的3981和十六進(jìn)制的F8D所代表的本質(zhì)都是同一個(gè)數(shù)一些瑣碎的運(yùn)算符知識(shí)自增【或者自減】前自增-+i后自增-i+前自增和后自增的異同:相同:最終都使i的值加1前自增整體表達(dá)式的值是i加1

24、之后的值后自增整體表達(dá)式的值是i加1之前的值為什么會(huì)出現(xiàn)自增代碼更精練自增的速度更快學(xué)習(xí)自增要明白的幾個(gè)問(wèn)題1. 我們編程時(shí)應(yīng)該盡量屏蔽掉前自增和后自增 的差別2. 自增表達(dá)式最好不要作為一個(gè)更大的表達(dá)式 的一部分來(lái)使用或者說(shuō)i+和+i單獨(dú)成一個(gè)語(yǔ)句,不要把它作為一 個(gè)完整的復(fù)合語(yǔ)句的一部分來(lái)使用三目運(yùn)算符:A ? B : C等價(jià)于If (A)B;elseC;逗號(hào)表達(dá)式格式:(A, B, C, D)功能:從左到右執(zhí)行最終表達(dá)式的值是最后一項(xiàng)的值switch(很少用到,以后講)把電梯程序看懂就行啦循環(huán)定義:某些代碼會(huì)被重復(fù)執(zhí)行分類for重點(diǎn)、用到最多、最難1格式:for (1;2;3)語(yǔ)句A ;

25、2執(zhí)行的流程【重點(diǎn)】 單個(gè)for循環(huán)的使用 多個(gè)for循環(huán)的嵌套使用for ( 1; 2 ; 3)1for ( 4; 5 ; 6)2A; 3B; 4整體式兩個(gè)語(yǔ)句,1 23是一個(gè)語(yǔ)句4是第二個(gè)語(yǔ)句for( 1;2 ;3)for (4;5;6)A;B; 整體式一個(gè)語(yǔ)句for (7;8;9)for (1;2;3) A ;B;for (4;5;6)C;整體是一個(gè)語(yǔ)句3范圍問(wèn)題4. 舉例:1 + 2 + 3 + . + 1001 + 1/ 2 + 1/3 + . + 1/100while1. 執(zhí)行的順序格式:while(表達(dá)式)語(yǔ)句;2. 與for的相互比較for和while可以相互轉(zhuǎn)換for( 1;

26、2 ;3)A;等價(jià)于1 ;While ( 2)A ;3;while和for可以相互轉(zhuǎn)化 但for的邏輯性更強(qiáng),更不容易出錯(cuò),推薦多使用for3. 舉例從鍵盤輸入一個(gè)數(shù)字,如果該數(shù)字是 會(huì)文數(shù),則返回yes,否則返回no 回文數(shù):正著寫和倒著寫都一樣比如:12112321都是回文數(shù)試數(shù):>m=121sum=0*10+121%10=1m=m/10=12;>m=12成立sum=1*10+12%10=12 m=12/10=1>m=1成立sum=12*10+1%10=121 m=1/10=0>m=0不成立sum=val4什么時(shí)候使用 while,什么時(shí)候使用for沒法說(shuō),用多了自

27、然而然就知道了do.while格式:do while(表達(dá)式);do.while.并不等價(jià)于 for,當(dāng)然也不等價(jià) 于 while主要用于人機(jī)交互一元二次方程舉例break 禾口 continuebreak (很重要)break如果用于循環(huán)是用來(lái)終止循環(huán)break如果用于switch,則是用于終止switch break不能直接用于if,除了 if屬于循環(huán)內(nèi)部的 一個(gè)子句例子:for (i=0;i<3;+i) if (3 > 2) break; /break雖然是if內(nèi)的語(yǔ) 句,但break終止的卻是外部的for循環(huán)printf ("嘿嘿!n");/永遠(yuǎn)不會(huì)輸出

28、在多層循環(huán)中,break只能終止距離它最近的 那個(gè)循環(huán)for (i=0; i<3; +i) for (j=1; j<4;+j) break; /break只能終止距離它最近的循環(huán)printf ("同志們好!n"); 在多層switch嵌套中,break只能終止距離它最近的switch例子:int x=1, y=0, a=0, b=0;con ti nueswitch (x) / 第一個(gè) switchcase 1:switch (y)/第二個(gè) switchcase 0:a+;break;/終止的是第二個(gè) switch case 1:b+;break;b = 100

29、;break;/終止的是第一個(gè)switchcase 2:a+;b+;break;printf ("%d %dn", a,b);26行最終輸出結(jié)果是:1100(用的很少)用于跳過(guò)本次循環(huán)余下的語(yǔ)句,轉(zhuǎn)去判斷是否 需要下次循環(huán)for (1; 2; 3)A;B;continue;/如果執(zhí)行該語(yǔ)句,則執(zhí)行完 該語(yǔ)句后,會(huì)執(zhí)行語(yǔ)句3,C和D都不會(huì)執(zhí)行C;D;while(表達(dá)式)A;B;continue;/如果執(zhí)行該語(yǔ)句,則執(zhí)行完 該語(yǔ)句后,會(huì)執(zhí)行表達(dá)式,C和D都不執(zhí)行。C;D;數(shù)組1. 為什么需要數(shù)組為了解決大量同類型數(shù)據(jù)的存儲(chǔ)和使用問(wèn)題。為了模擬現(xiàn)實(shí)世界其他情況下整體賦值都是錯(cuò)誤的

30、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ò)誤只有在定義數(shù)組的同時(shí)才可以整體賦值,int a5 = 1,2,3,4,5;a5 = 100; /error 因?yàn)闆]有素

31、,最大只有a4int a5 = 1,2,3,4,5;int b5;如果把a(bǔ)數(shù)組中的值全部復(fù)制給 錯(cuò)誤寫法:b = a; / error正確的寫法for (i=0; i<5; +i) bi = ai;a5這個(gè)元b數(shù)組賦值排序求最大/小值倒置查找插入刪除二維數(shù)組Int a34;總共是12元素看,可以當(dāng)做3行四列看待,12個(gè)元素的名子依次是:a00a01a02a03a10a11a12a13a20a21a22a23aij表示第i+1行第j+1列的兀素int amn;該二維數(shù)組右下角位置的兀素只能是am-1 n_1初始化int a34 = 1,2,3,4,5,6,7,8,9,10,11,12;in

32、t 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; i<3; +i)for (j=0; j<4; +j)printf("%-5d", aij);-號(hào)表示左對(duì)齊,5表示占5 個(gè)光標(biāo)的位置prin tf("n");對(duì)二維數(shù)組排序求每一行的最大值判斷矩陣是否對(duì)稱矩陣的相乘多維數(shù)組是否存在多維數(shù)組不存在因?yàn)閮?nèi)存是線性唯一的n維數(shù)組可以當(dāng)做每一個(gè)元素是n-1維數(shù)組的一維數(shù)

33、組比如:int a34;該數(shù)組是含有3個(gè)元素的一維數(shù)組只不過(guò)每一個(gè)元素都是4行5列的二維數(shù)函數(shù)【C語(yǔ)言的第二個(gè)重點(diǎn)】:為什么需要函數(shù)避免了重復(fù)性操作有利于程序的模塊化什么叫做函數(shù)邏輯上:能夠完成特定功能的獨(dú)立的代碼單元物理上:能夠接受數(shù)據(jù)【當(dāng)然也可以不接受數(shù)據(jù)】能夠?qū)邮諗?shù)據(jù)進(jìn)行處理能夠?qū)?shù)據(jù)處理的結(jié)果返回【當(dāng)然也可以不返回任何值前面定義成void】總結(jié):函數(shù)是個(gè)工具,它是為了解決大量類似問(wèn)題而設(shè)計(jì)的 函數(shù)可以當(dāng)做一個(gè)黑匣子如何定義函數(shù)函數(shù)的返回值 函數(shù)的名字(函數(shù)的形參列表)函數(shù)的執(zhí)行體1. 函數(shù)定義的本質(zhì)是詳細(xì)描述函數(shù)之所以能夠?qū)崿F(xiàn)某個(gè)特定功能的具體方法2. return表達(dá)式;的含義:1

34、終止被調(diào)函數(shù),向主調(diào)函數(shù)返回表達(dá)式的值2如果表達(dá)式為空,則只終止函數(shù),不向主調(diào)函數(shù)返回任何值3 break是用來(lái)終止循環(huán)和 switch的,return是用來(lái)終止函數(shù)的例子:void f()return; /return只用來(lái)終止函數(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

35、返回的是10而不是10.5函數(shù)的分類有參函數(shù)和無(wú)參函數(shù)有返回值函數(shù)和無(wú)返回值函數(shù)庫(kù)函數(shù)和用戶自定義函數(shù)值傳遞函數(shù)和地址傳遞函數(shù)普通函數(shù) 和主函數(shù)(ma in函數(shù))一個(gè)程序必須有且只能有一個(gè)主函數(shù) 主函數(shù)可以調(diào)用普通函數(shù)普通函數(shù)不能調(diào)用主函數(shù)普通函數(shù)可以相互調(diào)用主函數(shù)是程序的入口,也是程序的出口注意的問(wèn)題函數(shù)調(diào)用和函數(shù)定義的順序如果函數(shù)調(diào)用寫在了函數(shù)定義的前面,則必須加函數(shù)前 置聲明函數(shù)前置聲明:1. 告訴編譯器即將可能出現(xiàn)的若干個(gè)字母代表的是 一個(gè)函數(shù)2. 告訴編譯器即將可能出現(xiàn)的若干個(gè)字母所代表的函數(shù)的形參和返回值的具體情況3. 函數(shù)聲明是一個(gè)語(yǔ)句,末尾必須加分號(hào)4. 對(duì)庫(kù)函數(shù)的聲明是通過(guò)#

36、 in elude <庫(kù)函數(shù)所在的文件的名字.h> 來(lái)實(shí)現(xiàn)形參和實(shí)參個(gè)數(shù)相同位置一一對(duì)應(yīng)數(shù)據(jù)類型必須相互兼容如何在軟件開發(fā)中合理的設(shè)計(jì)函數(shù)來(lái)解決實(shí)際問(wèn)題 一個(gè)函數(shù)的功能盡量獨(dú)立,單一 多學(xué)習(xí),多模仿牛人的代碼函數(shù)是C語(yǔ)言的基本單位, 類是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è)

37、程序結(jié)束局部變量在一個(gè)函數(shù)內(nèi)部定義的變量或者函數(shù)的形參都統(tǒng)稱為局部變量void f (int i)int j = 20;I和j都屬于局部變量局部變量使用范圍:只能在本函數(shù)內(nèi)部使用注意的問(wèn)題:全局變量和局部變量命名沖突的問(wèn)題在一個(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)】能直接訪問(wèn)硬件能夠方便的處理字符串是理解面向?qū)ο笳Z(yǔ)言中引用的基礎(chǔ)總結(jié):指針是c語(yǔ)言的靈魂指針的定義地址內(nèi)存單兀的編號(hào) 從零開始的非負(fù)整數(shù)范圍:

38、4G【0 4G-1】指針指針就是地址,地址就是指針指針就越是內(nèi)存單兀的編號(hào)指針變量是存放地址的變量指針和指針變量是兩個(gè)不同的概念但是要注意:通常我們敘述時(shí)會(huì)把指針變量簡(jiǎn)稱為指針, 實(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

39、保存了 i的地址,因此p指向i2. p不是i, i也不是p,更準(zhǔn)確的說(shuō):修改 p的 值不影響i的值,修改i的值也不會(huì)影響p的值3. 如果一個(gè)指針變量指向了某個(gè)普通變量,則*指針變量就完全等同于普通變量例子:如果p是個(gè)指針變量。并且p存放了普通變量i的地址,則p指向了普通變量i*p就完全等同于i或者說(shuō):在所有出現(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ù):# in elude <stdio.h&

40、gt;void huhua n(i nt * p, int * q)intt;如果要互換p和q的值,貝U t必須是int * ,不能是int ,否 則會(huì)出錯(cuò)II如果要互換*p和*q的值,則t 必須定義成int,不能定義成int * ,否則語(yǔ)法會(huì) 出錯(cuò)t = *p; IIp 是 int *, *p 是 int*p = *q;*q = t;int main (void)int a = 3;int b = 5;huhua n(&a,& b);/huhua n( *p,*q);是錯(cuò)誤的,huhuan(a,b);也是錯(cuò)誤的prin tf("a = %d, b = %dn&quo

41、t;, a, b);return 0;附注:*的含義1乘法2. 定義指針變量int * p;II定義了一個(gè)名字叫p的變量,int *表示只能存放int變 量的地址3. 指針運(yùn)算符該運(yùn)算符放在已經(jīng)定義好的指針變量的前數(shù)組的長(zhǎng)度如果p是一個(gè)已經(jīng)定義好的指針變量 貝y *p表示 以p的內(nèi)容為地址的變量如何通過(guò)被調(diào)函數(shù)修改主調(diào)函數(shù)普通變量的值1實(shí)參必須為該普通變量的地址2形參必須為指針變量3在被調(diào)函數(shù)中通過(guò)*形參名= 的方式就可以修改主調(diào)函數(shù)相關(guān)變量的值2. 指針和數(shù)組指針和一維數(shù)組一維數(shù)組名 一維數(shù)組名是個(gè)指針常量它存放的是一維數(shù)組第一個(gè)元素的地址下標(biāo)和指針如果p是個(gè)指針變量,則pi永遠(yuǎn)等價(jià)于 *p

42、(p+i)確定一個(gè)一維數(shù)組需要幾個(gè)參數(shù) 【如果一個(gè)函數(shù)要處理一個(gè)一維數(shù)組,則需要接收 該數(shù)組的哪些信息】需要兩個(gè)參數(shù):數(shù)組第一個(gè)元素的地址指針變量的運(yùn)算指針變量不能相加不能相乘也不能相除如果兩個(gè)指針變量指向的是同一塊連續(xù)空 間中的不同存儲(chǔ)單元,則這兩個(gè)指針變量才可 以相減。一個(gè)指針變量到底占幾個(gè)字節(jié)【非重點(diǎn)】 預(yù)備知識(shí):sizeof(數(shù)據(jù)類型)功能:返回值就是該數(shù)據(jù)類型所占的字節(jié) 數(shù)例子:sizeof( int) = 4 sizeof(char) = 1 sizet(double) = 8 sizeof(變量名)功能:返回值是該變量所占的字節(jié)數(shù)假設(shè)p指向char類型變量(1個(gè)字節(jié)) 假設(shè)q指向

43、int類型變量(4個(gè)字節(jié)) 假設(shè)r指向double類型變量(8個(gè)字節(jié)) p q r本身所占的字節(jié)數(shù)是否一樣?答案:pqr本身所占字節(jié)數(shù)是一樣的總結(jié):一個(gè)指針變量,無(wú)論它指向的變量占幾個(gè) 字節(jié)該指針變量本身只占四個(gè)字節(jié)一個(gè)變量的地址是用該變量首字節(jié)的地址 來(lái)表示指針和二維數(shù)組3. 指針和函數(shù)4. 指針和結(jié)構(gòu)體5. 多級(jí)指針專題:動(dòng)態(tài)內(nèi)存分配 【重點(diǎn)難點(diǎn)】傳統(tǒng)數(shù)組的缺點(diǎn):1數(shù)組長(zhǎng)度必須事現(xiàn)指定,且只能是常整數(shù),不能是變 量例子:Int a 5 ;0KInt len = 5; int a le n; /error2傳統(tǒng)形式定義的數(shù)組,該數(shù)組的內(nèi)存程序員無(wú)法手動(dòng) 釋放數(shù)組一旦定義,系統(tǒng)就為該數(shù)組分配的

44、存儲(chǔ)空間就會(huì)一直存在,除非數(shù)組所在的函數(shù)運(yùn)行結(jié)束或者說(shuō):在一個(gè)函數(shù)運(yùn)行期間,系統(tǒng)為該函數(shù)中數(shù)組所分配 的空間會(huì)一直存在,直到該函數(shù)運(yùn)行完畢時(shí),數(shù)組的空 間才會(huì)被系統(tǒng)釋放3數(shù)組的長(zhǎng)度不能在函數(shù)運(yùn)行的過(guò)程中動(dòng)態(tài)的擴(kuò)充或縮 小數(shù)組的長(zhǎng)度一旦定義,其長(zhǎng)度就不能再更改4. A函數(shù)定義的數(shù)組,在 A函數(shù)運(yùn)行期間可以被其它函 數(shù)使用,但A函數(shù)運(yùn)行完畢之后, A函數(shù)中的數(shù)組將無(wú)法再 被其他函數(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)釋放靜

45、態(tài)內(nèi)存是在棧中分配的動(dòng)態(tài)內(nèi)存是由程序員手動(dòng)分配,手動(dòng)釋放動(dòng)態(tài)內(nèi)存是在堆中分配的跨函數(shù)使用內(nèi)存的問(wèn)題結(jié)構(gòu)體為什么需要結(jié)構(gòu)體為了表示一些復(fù)雜的事物,而普通的基本類型無(wú)法滿足實(shí)際 要求。什么叫結(jié)構(gòu)體把一些基本類型數(shù)據(jù)組合在一起形成的一個(gè)新的復(fù)合數(shù)據(jù)類 型,這個(gè)叫做結(jié)構(gòu)體。如何定義結(jié)構(gòu)體3種方式,推薦使用第一種:/第一種方式struct Stude ntint age;float score;char sex;;/第二種方式struct Stude nt2int age;float score;char sex; st2 ;/第三種方式structint age;float score;char se

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

47、 * pst = &st; &st不能改成 stpst->age = 88;/ 第二種方式st.age = 10; II 第一種方式return 0 ;1. pst >在計(jì)算機(jī)內(nèi)部會(huì)被轉(zhuǎn)換成(*pst).age,沒有什么為什么,這就是一 >的含義,這也是一種硬 性規(guī)定2. 所以pst>age等價(jià)于(*pst).age也等價(jià)于 st.age3. 我們之所以知道pst >age等價(jià)于st.age,是因 為pst >age是被轉(zhuǎn)化成了( *pst).age來(lái)執(zhí)行4. pst >age 的含義:pst所指向的那個(gè)結(jié)構(gòu)體變量中的age這個(gè)成員st

48、ruct Stude ntint age; char sex;char name100;II分號(hào)不能省struct Stude nt st1, st2;st1+st2 st1*st2 st1Ist2 都是錯(cuò)誤的 st1 = st2 或者st2 = st1者E是正確的 舉例動(dòng)態(tài)構(gòu)造存放學(xué)生信息的結(jié)構(gòu)體數(shù)組動(dòng)態(tài)構(gòu)造一個(gè)數(shù)組,存放學(xué)生的信息然后按分?jǐn)?shù)排序輸出鏈表:枚舉什么是枚舉把一個(gè)事物所有可能的取值一一列舉出來(lái)怎樣使用枚舉枚舉的優(yōu)缺點(diǎn) 代碼更安全 書寫麻煩位運(yùn)算符:&按位于結(jié)構(gòu)體變量和結(jié)構(gòu)體變量指針作為函數(shù)參數(shù)傳遞的問(wèn)題 推薦使用結(jié)構(gòu)體指針變量作為函數(shù)參數(shù)來(lái)傳遞 結(jié)構(gòu)體變量的運(yùn)算結(jié)構(gòu)體變量不能相加

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論