版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
中程在線(北京)科技有限公司內(nèi)部教程注意保密Android高級(jí)課程
AndroidNativeC語(yǔ)言教學(xué)
C的起源-1970年代﹐李查(D.Richie)及湯普士(K.Thompson)任職于美國(guó)貝爾實(shí)驗(yàn)室(BellLabs)。湯普士正設(shè)計(jì)Unix操作系統(tǒng)﹐李查負(fù)責(zé)設(shè)計(jì)新語(yǔ)言來(lái)撰寫(xiě)Unix程序。新語(yǔ)言繼承湯普士原設(shè)計(jì)的B語(yǔ)言﹐稱(chēng)為C語(yǔ)言。數(shù)學(xué)函數(shù)(Function)觀念﹐被應(yīng)用到C語(yǔ)言中﹐成為C程序的基本組件。
例如sin()、cos()等。在C的編程時(shí),可自行定義函數(shù),如:f(x)=x*x
就是一個(gè)函數(shù)﹐括號(hào)內(nèi)的x為參數(shù)。如果x值為5﹐f(5)=5*5=25﹔此時(shí)f(5)函數(shù)值是25。
C的基本結(jié)構(gòu)
1.前置處理器(Preprocessor):-前置處理器的任務(wù)是﹕在編譯(Compile)之前把原始程序先整合﹐再交給編譯程序(Compiler)處理。
C的特殊結(jié)構(gòu)2.定義宏(Macro):-人有正名(本名)﹐也有別名﹐通常別名較親切。程序內(nèi)之常數(shù)或變量也能有涵意深刻之別名。令程序更有人情味﹐更親切。有了別名﹐就可使用別名﹐亦可用本名。前置處理器(Preprocessor)將別名轉(zhuǎn)成正名﹐才交由編譯程序(Compiler)編譯之。
常數(shù)的別名(如PI)﹐通稱(chēng)為「宏常數(shù)」﹔若別名中含有參數(shù)(Argument)﹐就類(lèi)似一般函數(shù)﹐通稱(chēng)為「宏函數(shù)」。
#defineTRUE1#defineFALSE0#defineNewLine'\n'chardigit(chark){
return((k>='0'&&k<='9')?TRUE:FALSE);
}
int
main(void)
{
charch;
while((ch=getchar())!=NewLine)
if(digit(ch))
printf("DIGIT\n");else
printf("NotDigit\n");
return0;}
例如:這程序含三個(gè)宏常數(shù)──TRUE、FALSE及NewLine。TRUE代表1﹐使得程序的思路更清晰。FALSE及NewLine
也有同樣效果。
前置處理器看到#define指示﹐就將TRUE還原為1﹐FALSE還原為0﹐且NewLine
還原為'\n'。處理后的結(jié)果:chardigit(chark)
{
return((k>='0'&&k<='9')?1:0);
}
int
main(void)
{
int
ch;while((ch=getchar())!='\n')
if(digit(ch))printf("DIGIT\n");else
printf("NotDigit\n");
return0;}
──────────────────────#definemax(x,y)((x)>(y)?(x):(y))#definemin(x,y)((x)<(y)?(x):(y))
#definesquare(x)((x)*(x))
#definecube(x)((x)*(x)*(x))#defineabs(x)((x)>0?-(x):(x))
#definerecip(x)((float)(x)=1.0/(float)(x))#defineodd(x)((x)&1?1:0)#defineeven(x)((x)&1?0:1)─────────────────────────────
寫(xiě)C程序時(shí)﹐常用下述宏函數(shù)﹕
●max(x,y)拿兩數(shù)相比﹐挑出較大者?!駇in(x,y)則挑出較小值?!駍quare(x)求x的平方。●cube(x)求x的立方?!馻bs(x)求x的絕對(duì)值?!駌ecip(x)求x的倒數(shù)。●odd(x)判斷x是否為奇數(shù)。●even(x)判斷x是否為偶數(shù)。隨時(shí)可引用上述宏﹐創(chuàng)造更多宏。3.取銷(xiāo)宏:
-#define用來(lái)定義宏常數(shù)和函數(shù)。#undef指示恰好跟#define相反﹐用來(lái)取銷(xiāo)已定義之宏常數(shù)或函數(shù)。
intAdd(intx){return(x+x);}
#define
Add(x)((x)+10)int
main(void){
intk=Add(8);
#undefAdd
inth=Add(8);
printf("k=%d,h=%d",k,h);
return0;}
例如:含入標(biāo)頭檔(Header):
-寫(xiě)程序時(shí)﹐若想用這心愛(ài)宏﹐有兩種方法﹕1.
把宏抄進(jìn)C程序(*.c)中。2.把各宏歸成「宏文件」﹐讓程序含入之。這檔案通稱(chēng)為「標(biāo)頭檔」
(HeaderFile)﹐
/*Ex_macro.h*/
#defineTRUE1#defineFALSE0#defineCR'\r'#definePI3.1416#defineEOF(-1)#defineSign(x)((x)<0?FALSE:TRUE)
#defineArea(r)((r)*(r)*PI)#defineAND&defineREALfloat
例如:-此宏文件之個(gè)名字為﹕Ex_macro.h
-在C程序中﹐利用#include來(lái)含入標(biāo)頭檔
/*Ex_macro.c*/#include<stdio.h>#include"Ex_macro.h"int
main(void){/*………*/}例如:#include是「含入」之意﹐其要求前置處理器并入標(biāo)頭檔之內(nèi)容﹐擺于#include指示的位置上。-標(biāo)頭文件的好處是﹕各程序(*.c)共享標(biāo)頭文件內(nèi)之的宏。寫(xiě)復(fù)雜程序時(shí)﹐就得熟練運(yùn)用標(biāo)頭檔了??呻S時(shí)修改標(biāo)頭文件內(nèi)之宏﹐修改之后﹐再重新編譯各模塊(Module)即行了。
4.條件性定義:條件性定義(ConditionalDefinition)指示有﹕#ifdef
宏若已定義了此宏﹐就留下#ifdef與#endif
間的指令﹔否則刪去之。#ifndef
宏若未定義過(guò)此宏﹐就留下#ifndef
與
#endif間的指令﹔否則刪去之。#endif
說(shuō)明#ifdef
及#ifndef
之范圍。#undef
宏#define的相反動(dòng)作──解除定義。#else可構(gòu)成#ifdef~#else~#endif結(jié)構(gòu)或是
#ifndef~#else~#endif結(jié)構(gòu)。5.指針(Pointer):-指針(Pointer)就是某個(gè)變量的地址(Address)﹐也就是說(shuō),它用來(lái)指向該變量。-有人說(shuō)C并不好學(xué)﹐何以致之呢﹖其來(lái)自于C程序中充滿著「指針」(Pointer)觀念﹐而許多人認(rèn)為指標(biāo)很難纏。其實(shí)指標(biāo)觀念并不如想象中的麻煩﹐只是有點(diǎn)不習(xí)慣罷了。
指針與數(shù)組:指針能指向數(shù)組內(nèi)之任一元素。可藉指針來(lái)存取數(shù)組內(nèi)之元素。所以﹐除了傳統(tǒng)的數(shù)組存取方法之外﹐還可利用更有效率的指針處理方法。#include<stdio.h>int
main(void)
{
intdata[3];
int*px,*py;data[0]=5;
data[1]=28;data[2]=78;px=&data[0];py=&data[1];data[2]+=*px+(*py)++;printf("%d,%d,%d\n",data[0],data[1],data[2]);
return0;
}
例如:
px=&data[0]叫px指向元素data[0]。既然px指向data[0]﹐就可用*px
來(lái)代替data[0]﹐亦即可用*px
來(lái)存取data[0]之內(nèi)容。py=&data[1]令py指向data[1]元素﹐此時(shí)可用*py
代替data[1]﹐用*py
存取data[1]之內(nèi)容。
6.變量的儲(chǔ)存種類(lèi):在大家庭中﹐每人都有自己的財(cái)產(chǎn)﹐也有屬于家庭的公家財(cái)產(chǎn)。在C程序(猶如大家庭)中﹐每個(gè)函數(shù)有自己的變量﹐也有屬于整個(gè)程序的公家變量。私有財(cái)產(chǎn)屬于個(gè)人﹐別人無(wú)權(quán)使用﹔同樣地﹐私有變量屬于函數(shù)﹐別的函數(shù)無(wú)權(quán)存取之。
根據(jù)使用權(quán)限﹐變量可分為三類(lèi)﹕自動(dòng)(Automatic)變量隸屬于一個(gè)函數(shù)﹐別函數(shù)無(wú)權(quán)使用。2.外部靜態(tài)(ExternalStatic)變量
隸屬于一個(gè)原始程序文件(*.c)﹐該檔內(nèi)的各
函數(shù)公用﹐但別文件內(nèi)的函數(shù)無(wú)權(quán)使用。3.外部(External)變量
各函數(shù)公用。7.結(jié)構(gòu)(Struct):結(jié)構(gòu)能儲(chǔ)存相關(guān)但不同型態(tài)之?dāng)?shù)據(jù)。例如
structsmile{
charsna;
charsize;floatprice;};這說(shuō)明了﹕smile結(jié)構(gòu)內(nèi)含3項(xiàng)數(shù)據(jù)──兩項(xiàng)字符數(shù)據(jù)﹐另一項(xiàng)浮點(diǎn)數(shù)數(shù)據(jù)。
8.動(dòng)態(tài)內(nèi)存分配:malloc()及free()「動(dòng)態(tài)」(Dynamic)的意思是﹕待程序執(zhí)行時(shí)(Run-Time)才告訴計(jì)算機(jī)共需要多少內(nèi)存空間﹐計(jì)算機(jī)依照需要立即分配空間﹐裨儲(chǔ)存數(shù)據(jù)。這種空間﹐又稱(chēng)為「動(dòng)態(tài)數(shù)組」(DynamicArray)。傳統(tǒng)數(shù)組的優(yōu)點(diǎn)是﹕簡(jiǎn)單易用﹐其弱點(diǎn)是﹕缺乏彈性﹐動(dòng)態(tài)內(nèi)存分配的方法恰補(bǔ)足此項(xiàng)弱點(diǎn)。
。
malloc()和free()是最常用的動(dòng)態(tài)內(nèi)存分配函數(shù)。如果在執(zhí)行時(shí)需要空間來(lái)儲(chǔ)存數(shù)據(jù)﹐宜使用malloc()函數(shù)。例如﹕ptr=malloc(100);
這個(gè)指令要求計(jì)算機(jī)分配100bytes空間。malloc()函數(shù)會(huì)傳回該空間的地址﹐且存入ptr
內(nèi)﹐于是ptr
指向該空間。就可藉ptr
指標(biāo)來(lái)存取此空間的數(shù)據(jù)了。
9.列舉型態(tài):-列舉型態(tài)(EnumeratedDataType)是一堆常數(shù)的集合﹐這些常數(shù)稱(chēng)為「列舉常數(shù)」(EnumeratedConstants)。例如﹕樸克牌有club、diamond、heart及spade四種牌﹐任意抽出一張﹐必定是上述4者之1。此時(shí)﹐可定義列舉型態(tài)表達(dá)上述4種數(shù)據(jù)﹕
enum
樸克牌
{club,diamond,heart,spade};enum
week_day
{
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)業(yè)課程設(shè)計(jì)培訓(xùn)
- 影視燈光照明課程設(shè)計(jì)
- 小班色彩攀登課程設(shè)計(jì)
- ansys鋼結(jié)構(gòu)房課程設(shè)計(jì)
- 地調(diào)網(wǎng)絡(luò)課程設(shè)計(jì)
- 學(xué)生版簡(jiǎn)明機(jī)械課程設(shè)計(jì)
- 保潔石材保養(yǎng)合同范例
- 合作開(kāi)廠合同范例
- 皮膚美容簽約治療合同范例
- 警犬食糧采購(gòu)合同范例
- 波譜色譜學(xué)智慧樹(shù)知到期末考試答案章節(jié)答案2024年沈陽(yáng)農(nóng)業(yè)大學(xué)
- 創(chuàng)業(yè)投資管理智慧樹(shù)知到期末考試答案章節(jié)答案2024年武漢科技大學(xué)
- 監(jiān)理投標(biāo)文件范本
- 小學(xué)勞動(dòng)教育實(shí)施三年規(guī)劃(2024-2026)
- 網(wǎng)課智慧樹(shù)知道《英漢口譯(四川大學(xué))》章節(jié)測(cè)試答案
- 小學(xué)三年級(jí)上冊(cè)道德與法治期末測(cè)試卷及答案(各地真題)
- 2024年高考語(yǔ)文二輪復(fù)習(xí)各地??甲魑臎_刺匯編(八)含范文
- (高清版)JTT 617.4-2018 危險(xiǎn)貨物道路運(yùn)輸規(guī)則 第4部分:運(yùn)輸包裝使用要求(第1號(hào)修改單)
- 人教部編版八年級(jí)數(shù)學(xué)上冊(cè)期末考試卷及答案一
- 哲學(xué)與人生第12課《實(shí)現(xiàn)人生價(jià)值》12.2
- (附答案)2024公需課《百縣千鎮(zhèn)萬(wàn)村高質(zhì)量發(fā)展工程與城鄉(xiāng)區(qū)域協(xié)調(diào)發(fā)展》試題廣東公需科
評(píng)論
0/150
提交評(píng)論