C語言提高ppt課件_第1頁
C語言提高ppt課件_第2頁
C語言提高ppt課件_第3頁
C語言提高ppt課件_第4頁
C語言提高ppt課件_第5頁
已閱讀5頁,還剩110頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.,1,第1章語言提高,.,2,概述,1.1基本數(shù)據(jù)類型、操作符、表達式1.2語句1.3數(shù)組1.4指針1.5結(jié)構(gòu)和聯(lián)合體1.6函數(shù)1.7存儲類型1.8預編譯1.9有緩沖方式的文件操作及控制臺操作1.10其它庫函數(shù)操作,.,3,1.1基本數(shù)據(jù)類型、操作符、表達式,在C語言中,變量的聲明格式是:類型變量;例:intx=5;,.,4,1.1基本數(shù)據(jù)類型、操作符、表達式,.,5,1.1基本數(shù)據(jù)類型、操作符、表達式,.,6,1.1基本數(shù)據(jù)類型、操作符、表達式,unsigned、signed修飾十六進制、十進制、八進制表示字符常量表示及編碼轉(zhuǎn)義符(0,n,t等)邏輯類型的規(guī)定,.,7,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式1算術(shù)操作符,.,8,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式2.關(guān)系操作符,.,9,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式2.關(guān)系操作符“xy2”的含義“x”和“!x”作為邏輯表達式的含義,.,10,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式3.邏輯操作符,.,11,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式4.位操作符,.,12,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式5移位操作符,.,13,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式5移位操作符例1.1:我們可以將x的第3至第7位置為y。intx=0 x44444444;inty=7;x=(x,.,14,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式5移位操作符例1.2:我們可以將x的第3至第7取到y(tǒng)中,代碼如下intx=0 x44444444;inty;y=(x,.,15,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式6條件表達式操作符“?:”表達式例:計算y年的天數(shù):若y是閏年,則366天,否則365天。用C表達如下:isLeap(y)?366:365,.,16,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式7.賦值操作符,.,17,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式7.賦值操作符應用形式為:左值賦值操作符表達式例:x%=7意義是計算“x%7”的結(jié)果,送給x空間,其值是最后x的值。注意:無分號。有分號時是語句?!皒=y=6”表達正確嗎?,.,18,1.1基本數(shù)據(jù)類型、操作符、表達式,1.1.2操作符、表達式8逗號表達式逗號表達式的形式如下:表達式,表達式,表達式例:charc=100;printf(%i,(c+1,c+2,c+3);,.,19,1.2語句,賦值語句文法賦值表達式;x+;+x;x-;-x;,.,20,1.2語句,賦值語句自加(減)賦值x+;+x;x-;-x;,例:intx=5;inty;y=x+;printf(nx=%d,y=%d,x,y);x=5;y=+x;printf(nx=%d,y=%d,x,y);,.,21,1.2語句,條件語句文法if(E)S或if(E)S1elseS2,.,22,1.2語句,復合語句文法說明部分語句部分復合語句書寫規(guī)范,.,23,1.2語句,循環(huán)語句while語句for語句do-while語句,.,24,1.2語句,循環(huán)語句while語句while(E)S,圖1.4while循環(huán)的流程圖,.,25,1.2語句,循環(huán)語句while語句intgetSum(intm)intsum=0;inti=1;while(iy);x+;y-;例:for(i=0;i10;i+);.,.,31,1.2語句,goto語句文法goto標號;,.,32,1.2語句,switch語句文法switch(表達式)caseI1:S11S12S13casel2:S21S22S23default:S01S02S03,.,33,1.2語句,switch語句intk=1;charc=A;doswitch(c+)caseA:k*=2;break;caseB:k+=2;continue;caseC:k%=3;default:k+;caseD:k/=3;k+;while(c=2000)for(i=2000;iy;i+)sum+=getYearDays(i);return(sum+6)%7;elsefor(i=y;i2000;i+)sum+=getYearDays(i);return(-sum+6)%7;,.,39,綜合訓練,S2計算y年m月第一天的星期;intgetMonthWeekDay(inty,intm)intsum=0;inti;for(i=1;im;i+)sum+=getMonthDays(y,i);return(getYearWeekDay(y)+sum)%7;,.,40,綜合訓練,S3打印y年的日歷:對y年的每一月,執(zhí)行打印操作。voidprintYear(inty)inti;count=1;for(i=1;i=12;i+)printMonth(y,i);,.,41,voidprintMonth(inty,intm)inti=0;intw;printf(n*%d月*n,m);w=getMonthWeekDay(y,m);if(w=0)printf(n%-7d,count);count+;elseprintf();for(i=0;iw;i+)printf();for(i=1;i=3)m=atoi(*(argv+2);printMonth(y,m);elseprintYear(y);return1;,.,58,1.4指針,例1.19:命令行參數(shù)的獲取,.,59,1.4指針,字符串C語言中的字符串實質(zhì)上是這個緩沖區(qū)的首地址。一個字符串,它是自標志的,字符串的結(jié)束是以0標志的。常字符串,如“hello”,.,60,1.4指針,字符串操作-拷貝char*strcpy(char*s1,char*s2)inti;for(i=0;*(s2+i)!=0;i+)*(s1+i)=*(s2+i);*(s1+i)=0;returns1;,.,61,1.4指針,字符串操作-連接char*strcat(char*s1,char*s2)inti,j;for(j=0;*(s1+j)!=0;j+);for(i=0;*(s2+i)!=0;i+)*(s1+j+i)=*(s2+i);*(s1+j+i)=0;returns1;,.,62,1.4指針,字符串操作-比較intstrcmp(char*s1,char*s2)inti;for(i=0;*(s1+i)!=0,.,63,1.4指針,字符串操作-計算長度intstrlen(char*s1)inti;for(i=0;*(s1+i)!=0;i+);returni;,.,64,1.4指針,考慮下面代碼的執(zhí)行結(jié)果:charstr25;strcpy(str0,hello);strcpy(str1,hi);,.,65,1.4指針,指針數(shù)組int*pInt8;char*str=“請輸入整數(shù)”,“x=%d”,“除法錯誤”;,.,66,1.4指針,數(shù)組指針int*pList4;int(*pItem)4;,.,67,1.4指針,數(shù)組指針intgetTotal(int(*item)4)inti;intsum=0;for(i=0;i4;i+)sum+=*(*item+i);returnsum;,.,68,1.4指針,數(shù)組指針intmain()inti;intitems44=1,3,4,5,2,4,5,3,5,6,3,2,6,4,3,1;for(i=0;i4;i+)printf(n%d:%d,i+1,getTotal(items+i);,.,69,1.5結(jié)構(gòu)和聯(lián)合體,結(jié)構(gòu)結(jié)構(gòu)類型定義的一般形式是:struct結(jié)構(gòu)體名類型域變量;類型域變量;,.,70,1.5結(jié)構(gòu)和聯(lián)合體,結(jié)構(gòu)例1.21:structstucharid8;charname10;intsex;floatscores7;li;,.,71,1.5結(jié)構(gòu)和聯(lián)合體,結(jié)構(gòu),.,72,1.5結(jié)構(gòu)和聯(lián)合體,結(jié)構(gòu)structstu*pStu;structstuli;pStu=,.,73,1.5結(jié)構(gòu)和聯(lián)合體,結(jié)構(gòu),.,74,1.5結(jié)構(gòu)和聯(lián)合體,聯(lián)合體union聯(lián)合體名類型域變量;類型域變量;,.,75,1.5結(jié)構(gòu)和聯(lián)合體,聯(lián)合體uniontagstructintw,h;rect;intr;intd;uniontagshape;,.,76,1.5結(jié)構(gòu)和聯(lián)合體,聯(lián)合體unioniaddrunsignedlongip;unsignedcharbyte4;sizeof(unioniaddr)=4。,.,77,1.5結(jié)構(gòu)和聯(lián)合體,位域structunsignedintf1:3;unsignedintf2:3;unsignedintf3:3;q;,.,78,1.5結(jié)構(gòu)和聯(lián)合體,鏈表結(jié)點的定義typedefstructstagintkey;structstag*next;SNODE;/單向鏈表結(jié)點的定義typedefstructdtagintkey;structdtag*previous,*next;DNODE;/雙向鏈表結(jié)點的定義,.,79,1.5結(jié)構(gòu)和聯(lián)合體,鏈表結(jié)點的操作voidinsertAtHead(SNODE*head,SNODE*);SNODE*createSNode(intkey);voiddeleteAtTail(SNODE*head);voidtraversal(SNODE*head);,.,80,1.5結(jié)構(gòu)和聯(lián)合體,二叉樹結(jié)點的定義typedefstructt2Tagintkey;structt2Tag*left,*right;T2NODE;,.,81,1.5結(jié)構(gòu)和聯(lián)合體,樹結(jié)點的定義typedefstructtTagintkey;structtTag*parent;structtTag*elderBrother,*brother;structtTag*children;TNODE;,.,82,1.6函數(shù),函數(shù)的定義格式是:返回類型函數(shù)名(參數(shù)表)函數(shù)體函數(shù)的調(diào)用格式是:函數(shù)名(實際參數(shù));函數(shù)原型聲明的格式為:返回類型函數(shù)名(參數(shù)表);,.,83,1.6函數(shù),參數(shù)傳遞函數(shù)定義時的參數(shù)稱為形式參數(shù),函數(shù)調(diào)用時的參數(shù)稱為實際參數(shù)。當函數(shù)調(diào)用時,首先在棧區(qū)內(nèi)分配形式參數(shù)的內(nèi)存空間,然后計算實際參數(shù)的值,并將實際參數(shù)的值傳給形式參數(shù)的空間。(對程序執(zhí)行效率的影響?),.,84,1.6函數(shù),參數(shù)傳遞voidf(int);voidf1(int*);intmain()intx=100;f(x);printf(x=%d,x);f1(,voidf(intx)inty=100;x+=100;,voidf1(int*x)inty=100;*x+=y;,.,85,1.6函數(shù),參數(shù)傳遞voidf2(int);intmain()inta=1,2,3;f2(a);printf(%d-%d-%d,a0,a1,a2);,voidf2(inta3)a0=4;a1=3;a2=2;,在參數(shù)傳遞時,它將數(shù)組的地址傳給形參,在函數(shù)執(zhí)行時,改變的是同一數(shù)組的元素值。,.,86,1.6函數(shù),函數(shù)指針定義形式返回類型(*函數(shù)指針變量)(參數(shù)表);函數(shù)指針是一個指針變量,與一般指針不同的是,它是指向代碼區(qū)的,而不是指向數(shù)據(jù)區(qū)的指針。例:void(*pf)();,.,87,1.6函數(shù),函數(shù)指針voidopen();/*open的原型聲明*/voidprint();/*print的原型聲明*/voidexitIt();/*exitIt的原型聲明*/void(*pfs)()=open,print,exitIt;/*函數(shù)指針數(shù)組*/intmain()inti;void(*pf)();pf=open;(*pf)();/*調(diào)用open*/for(i=0;i3;i+)(*pfsi)();/*依次調(diào)用函數(shù)open、print、exitIt*/,.,88,1.6函數(shù),其中voidopen()printf(open);voidprint()printf(print);voidexitIt()printf(exit);,.,89,1.6函數(shù),例:以下定義的意義void(*getInterrupt(intno)();voidsetInterrupt(intno,void(*pf)();LRESULT(*lpfnWndProc)(HWND,UINT,WPARM,LPARAM);,.,90,1.7存儲類型,C中變量的完整說明形式是:存儲類型數(shù)據(jù)類型變量;C中存儲類型registerauto(默認存儲類型)staticextern,.,91,1.7存儲類型,static存儲類型在函數(shù)內(nèi)定義時,static作用范圍在函數(shù)內(nèi),但在運行期間一直存在。在函數(shù)外定義時,從定義點開始有效,但只限于本文件使用。在程序運行期間一直存在。,.,92,1.7存儲類型,static存儲類型-下面代碼打印出什么,為什么?intmain()voidprint();print();print();print();voidprint()staticinti=0;printf(%d-,i+);,.,93,1.7存儲類型,extern存儲類型在函數(shù)內(nèi)時,引用函數(shù)外定義的量。在函數(shù)外時,引用其它文件定義的量??傊?,extern變量,不分配內(nèi)存。,.,94,1.8預編譯,宏定義可用于定義值或定義一些功能,其形式是:#define預編譯量#define預編譯量值#define預編譯量(參數(shù),參數(shù).)功能定義,.,95,1.8預編譯,宏定義例子#definePRINT#definePI3.14159265#define子LEN200#defineHIWORD(l)*(short*)#endif#ifndefPRINT/*若未定義PRINT,則下面代碼參與編譯*/printf(nPRINTisnotdefined.);#endif#ifdefPRINT/*若定義了PRINT,則下面代碼參與編譯*/printf(nPRINTisdefined.);#else/*否則,即若未定義PRINT,則下面代碼參與編譯*/printf(nPRINTisnotdefined.);#endifprintf(nend);,.,99,1.9有緩沖方式的文件操作及控制臺操作,控制臺操作intprintf(constchar*,.);intscanf(constchar*,.);,.,100,1.9有緩沖方式的文件操作及控制臺操作,控制臺操作printf(n%d,%ld,%10d,%10ld,6,6L,6,6L);printf(n%x,%5lx,64,64);printf(n%o,%5o,64,64);printf(n%u,%5u,65,-1);printf(n%c,%5c,65,A);printf(n%s,%10s,hello,hello);printf(n%f,%10.3f,6.0,6.00);printf(n%e,%10.3e,6.0,6.00);printf(n%g,%10.3g,6.0,6.00);,.,101,1.9有緩沖方式的文件操作及控制臺操作,控制臺操作intx;longl;scanf(%d,%ld,.,102,1.9有緩沖方式的文件操作及控制臺操作,文件操作讀取操作時有三個步驟:打開文件,讀寫操作,關(guān)閉文件,以釋放文件所占的各種緩沖區(qū)。,.,103,1.9有緩沖方式的文件操作及控制臺操作,打開文件FILE*fopen(constchar*,constchar*);打開文件“c:tttt.txt”。char*path=c:tttt.txt;FILE*stream;if(NULL=(stream=fopen(path,rb)printf(File%sdoesntexist.,path);exit(0);,.,104,1.9有緩沖方式的文件操作及控制臺操作,打開文件方式r:打開文件用于輸入文件必須存在,否則無法打開w:打開文件用于輸出文件若存在,則刪除重新建立a:打開文件用于在文件尾追加數(shù)據(jù)。文件必須存在,否則無法打開r+:打開文件用于讀、寫文件必須存在,否則無法打開,.,105,1.9有緩沖方式的文件操作及控制臺操作,讀寫操作-文件狀態(tài)函數(shù)feof可判定指定的輸入流是否結(jié)束。其原型定義:intfeof(FILE*);若處于文件尾(endoffile),則返回真(1),否則返回假(0)。函數(shù)ferror可判定指定的流是否出錯,若有錯誤,則返回1,否則返回0。其原型定義如下:intferror(FILE*);,.,106,1.9有緩沖方式的文件操作及控制臺操作,讀寫操作-讀寫字符函數(shù)getc和fgetc都是按字符讀入內(nèi)容,其原型定義如下:intgetc(FILE*);intfgetc(FILE*);例:while(!feof(stream)intch=getc(stream);/這里應是處理代碼.,.,107,1.9有緩沖方式的文件操作及控制臺操作,讀寫操作-格式讀寫按指定的格式讀、寫文件流的操作函數(shù)是以下兩個函數(shù):intfprintf(FILE*,constchar*,.);intfscanf(FILE*,constchar*,.);(有差別嗎?),.,108,1.9有緩沖方式的文件操作及控制臺操作,讀寫操作-塊讀寫函數(shù)fwrite將指定緩沖區(qū)中的內(nèi)容寫入文件中,函數(shù)fread將文件中的內(nèi)容讀到指定的緩沖區(qū)中。它們的原型聲明如下:size_tfwrite(constvoid*,size_t,size_t,FILE*);size_tfread(void*,size_t,size_t,FILE*);,.,109,1.9有緩沖方式的文件操作及控制臺操作,讀寫操作-文件指針操作函數(shù)fseek改變文件指針的位置。其原型聲明為:intfseek(FILE*,long,int);其中第三個參數(shù)可選三個值:0、1、2。0表示以文件頭為參照,表示以當前位置為參照,2表示以文件尾為參照。第二個參數(shù)表示距參照點的距離,類型為長整數(shù)。函數(shù)ftell可得到文件指針的位置。longftell(FILE*);函數(shù)rewind將文件指針返回文件開始位置。voidrewind(FILE*);,.,110,1.9有緩沖方式的文件操作及控制臺操作,讀寫操作-文件指針操作例:利用文件指針計算文件長度的函數(shù):longgetFileLen(FILE*stream)longold,len;old=ftell(stream);/保留原文件操作地址fseek(stream,0,2);/將文件指針移至文件尾len=ftell(stream);/保留文件位置fseek(stream,old,0);/恢復原文件位置returnlen;,.,111,1.9有緩沖方式的文件操作及控制臺操作,關(guān)閉文件的函數(shù)是:voidfclose(FILE*f);關(guān)閉文件后,所以該文件操作的

溫馨提示

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

評論

0/150

提交評論