




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
中程在線(北京)科技有限公司內部教程注意保密Android高級課程
AndroidNativeC語言教學
C的起源-1970年代﹐李查(D.Richie)及湯普士(K.Thompson)任職于美國貝爾實驗室(BellLabs)。湯普士正設計Unix操作系統﹐李查負責設計新語言來撰寫Unix程序。新語言繼承湯普士原設計的B語言﹐稱為C語言。數學函數(Function)觀念﹐被應用到C語言中﹐成為C程序的基本組件。
例如sin()、cos()等。在C的編程時,可自行定義函數,如:f(x)=x*x
就是一個函數﹐括號內的x為參數。如果x值為5﹐f(5)=5*5=25﹔此時f(5)函數值是25。
C的基本結構
1.前置處理器(Preprocessor):-前置處理器的任務是﹕在編譯(Compile)之前把原始程序先整合﹐再交給編譯程序(Compiler)處理。
C的特殊結構2.定義宏(Macro):-人有正名(本名)﹐也有別名﹐通常別名較親切。程序內之常數或變量也能有涵意深刻之別名。令程序更有人情味﹐更親切。有了別名﹐就可使用別名﹐亦可用本名。前置處理器(Preprocessor)將別名轉成正名﹐才交由編譯程序(Compiler)編譯之。
常數的別名(如PI)﹐通稱為「宏常數」﹔若別名中含有參數(Argument)﹐就類似一般函數﹐通稱為「宏函數」。
#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;}
例如:這程序含三個宏常數──TRUE、FALSE及NewLine。TRUE代表1﹐使得程序的思路更清晰。FALSE及NewLine
也有同樣效果。
前置處理器看到#define指示﹐就將TRUE還原為1﹐FALSE還原為0﹐且NewLine
還原為'\n'。處理后的結果: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)─────────────────────────────
寫C程序時﹐常用下述宏函數﹕
●max(x,y)拿兩數相比﹐挑出較大者。●min(x,y)則挑出較小值。●square(x)求x的平方。●cube(x)求x的立方。●abs(x)求x的絕對值。●recip(x)求x的倒數。●odd(x)判斷x是否為奇數。●even(x)判斷x是否為偶數。隨時可引用上述宏﹐創造更多宏。3.取銷宏:
-#define用來定義宏常數和函數。#undef指示恰好跟#define相反﹐用來取銷已定義之宏常數或函數。
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;}
例如:含入標頭檔(Header):
-寫程序時﹐若想用這心愛宏﹐有兩種方法﹕1.
把宏抄進C程序(*.c)中。2.把各宏歸成「宏文件」﹐讓程序含入之。這檔案通稱為「標頭檔」
(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
例如:-此宏文件之個名字為﹕Ex_macro.h
-在C程序中﹐利用#include來含入標頭檔
/*Ex_macro.c*/#include<stdio.h>#include"Ex_macro.h"int
main(void){/*………*/}例如:#include是「含入」之意﹐其要求前置處理器并入標頭檔之內容﹐擺于#include指示的位置上。-標頭文件的好處是﹕各程序(*.c)共享標頭文件內之的宏。寫復雜程序時﹐就得熟練運用標頭檔了。可隨時修改標頭文件內之宏﹐修改之后﹐再重新編譯各模塊(Module)即行了。
4.條件性定義:條件性定義(ConditionalDefinition)指示有﹕#ifdef
宏若已定義了此宏﹐就留下#ifdef與#endif
間的指令﹔否則刪去之。#ifndef
宏若未定義過此宏﹐就留下#ifndef
與
#endif間的指令﹔否則刪去之。#endif
說明#ifdef
及#ifndef
之范圍。#undef
宏#define的相反動作──解除定義。#else可構成#ifdef~#else~#endif結構或是
#ifndef~#else~#endif結構。5.指針(Pointer):-指針(Pointer)就是某個變量的地址(Address)﹐也就是說,它用來指向該變量。-有人說C并不好學﹐何以致之呢﹖其來自于C程序中充滿著「指針」(Pointer)觀念﹐而許多人認為指標很難纏。其實指標觀念并不如想象中的麻煩﹐只是有點不習慣罷了。
指針與數組:指針能指向數組內之任一元素。可藉指針來存取數組內之元素。所以﹐除了傳統的數組存取方法之外﹐還可利用更有效率的指針處理方法。#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
來代替data[0]﹐亦即可用*px
來存取data[0]之內容。py=&data[1]令py指向data[1]元素﹐此時可用*py
代替data[1]﹐用*py
存取data[1]之內容。
6.變量的儲存種類:在大家庭中﹐每人都有自己的財產﹐也有屬于家庭的公家財產。在C程序(猶如大家庭)中﹐每個函數有自己的變量﹐也有屬于整個程序的公家變量。私有財產屬于個人﹐別人無權使用﹔同樣地﹐私有變量屬于函數﹐別的函數無權存取之。
根據使用權限﹐變量可分為三類﹕自動(Automatic)變量隸屬于一個函數﹐別函數無權使用。2.外部靜態(ExternalStatic)變量
隸屬于一個原始程序文件(*.c)﹐該檔內的各
函數公用﹐但別文件內的函數無權使用。3.外部(External)變量
各函數公用。7.結構(Struct):結構能儲存相關但不同型態之數據。例如
structsmile{
charsna;
charsize;floatprice;};這說明了﹕smile結構內含3項數據──兩項字符數據﹐另一項浮點數數據。
8.動態內存分配:malloc()及free()「動態」(Dynamic)的意思是﹕待程序執行時(Run-Time)才告訴計算機共需要多少內存空間﹐計算機依照需要立即分配空間﹐裨儲存數據。這種空間﹐又稱為「動態數組」(DynamicArray)。傳統數組的優點是﹕簡單易用﹐其弱點是﹕缺乏彈性﹐動態內存分配的方法恰補足此項弱點。
。
malloc()和free()是最常用的動態內存分配函數。如果在執行時需要空間來儲存數據﹐宜使用malloc()函數。例如﹕ptr=malloc(100);
這個指令要求計算機分配100bytes空間。malloc()函數會傳回該空間的地址﹐且存入ptr
內﹐于是ptr
指向該空間。就可藉ptr
指標來存取此空間的數據了。
9.列舉型態:-列舉型態(EnumeratedDataType)是一堆常數的集合﹐這些常數稱為「列舉常數」(EnumeratedConstants)。例如﹕樸克牌有club、diamond、heart及spade四種牌﹐任意抽出一張﹐必定是上述4者之1。此時﹐可定義列舉型態表達上述4種數據﹕
enum
樸克牌
{club,diamond,heart,spade};enum
week_day
{
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 推動現代化大農業發展的路徑與策略
- 三人合租合同樣本
- 供電配施工合同標準文本
- 保姆帶孩子合同標準文本
- 土壤修復行業發展趨勢與未來市場潛力分析
- 供配電工程施工合同標準文本
- 數字化轉型驅動制造業高質量發展路徑探索
- 代建項目回購合同樣本
- 農業三產融合發展新模式可行性分析報告
- 代理續約合同標準文本
- 工會經費收支管理培訓
- JJF 1603-2016(0.1~2.5)THz太赫茲光譜儀校準規范
- 《民法典》-第二編 物權編-案例分析,解讀-3
- GB/T 1266-2006化學試劑氯化鈉
- 海岸動力學全冊配套完整課件
- 工作面防飛矸封閉式管理規定
- 纖維素酶活性的測定
- 干部人事檔案管理崗位培訓的講義課件
- 驗電接地環安裝規范
- 計算機監控系統安裝單元工程質量驗收評定表
- 外墻干掛大理石施工方案(標準版)
評論
0/150
提交評論