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

下載本文檔

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

文檔簡介

第1章語言提高1精選2021版課件概述1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.2語句

1.3數(shù)組1.4指針1.5結(jié)構(gòu)和聯(lián)合體1.6函數(shù)1.7存儲類型1.8預(yù)編譯1.9有緩沖方式的文件操作及控制臺操作1.10其它庫函數(shù)操作2精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式在C語言中,變量的聲明格式是:類型變量;例: intx=5;sizeof(int)&xx=5圖1.1變量x內(nèi)存解釋

3精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式數(shù)據(jù)類型構(gòu)造類型指針類型空類型基本類型字符類型整型枚舉類型單精度類型實型雙精度類型數(shù)組類型結(jié)構(gòu)類型共同體類型4精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式類型含義大小實例常量int整型sizeof(int)inti;100,0x100,0100shortintshort短整型2shorts;(short)100longintlong長整型4longl;100L,(long)100float單精度類型4floatx;0.1fdoublelongdouble雙精度類型8doubled;0.1,0.1dchar字符型1charc;100,’0’,‘\0’,’a’,’\n’5精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式unsigned、signed修飾十六進(jìn)制、十進(jìn)制、八進(jìn)制表示字符常量表示及編碼轉(zhuǎn)義符(\0,\n,\t等)邏輯類型的規(guī)定6精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式1.算術(shù)操作符

算術(shù)操作符含義實例+算術(shù)加法4.0+7,4+7-算術(shù)減法7-5,7-5.0*算術(shù)乘法7*67,7*67.0/算術(shù)除法5/6,5.0/6%模運(yùn)算:整除取余數(shù)17%77精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

2.關(guān)系操作符

關(guān)系操作符含義實例<小于x<y<=小于等于x<=y>大于x>y>=大于等于x>=y==相等x==y!=不等x!=y8精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

2.關(guān)系操作符“x<y<2” 的含義“x”

和“!x”

作為邏輯表達(dá)式的含義9精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

3.邏輯操作符

邏輯操作符含義實例&&邏輯與y%4==0&&y%100!=0||邏輯或y%4==0&&y%100!=0||y%400==0!邏輯非!(y%4==0&&y%100!=0||y%400==0)10精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

4.位操作符

位操作符含義實例&位與操作6&3,結(jié)果為2|位或操作6|3,結(jié)果為7^位異或操作6^3,結(jié)果為5~按位取反操作~6,結(jié)果為0xfffffff911精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

5.移位操作符

移位操作符含義實例>>右移操作9>>2,結(jié)果為2,相當(dāng)于9/22<<左移操作9<<2,結(jié)果為36,相當(dāng)于9*2212精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

5.移位操作符例1.1:我們可以將x的第3至第7位置為y。intx=0x44444444;inty=7;x=(x&0xffffff07)|(y<<3);printf("\n%x",x);13精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

5.移位操作符例1.2:我們可以將x的第3至第7取到y(tǒng)中,代碼如下intx=0x44444444;inty;y=(x&0xf8)>>3;printf("\n%x",y);14精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

6.條件表達(dá)式操作符

“?:”

表達(dá)式例:計算y年的天數(shù):若y是閏年,則366天,否則365天。用C表達(dá)如下:isLeap(y)?366:36515精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

7.賦值操作符

=+=-=*=/=%=&=|=^=>>=<<=16精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

7.賦值操作符應(yīng)用形式為:左值賦值操作符表達(dá)式

例:x%=7意義是計算“x%7”的結(jié)果,送給x空間,其值是最后x的值。注意:無分號。有分號時是語句。“x=y=6”表達(dá)正確嗎?17精選2021版課件1.1基本數(shù)據(jù)類型、操作符、表達(dá)式1.1.2操作符、表達(dá)式

8.逗號表達(dá)式

逗號表達(dá)式的形式如下:表達(dá)式,表達(dá)式,…,表達(dá)式

例:charc='\100';printf("%i",(c+1,c+2,c+3));18精選2021版課件1.2語句賦值語句文法賦值表達(dá)式;x++;++x;x--;--x;19精選2021版課件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);求值加1賦值x++先后++x后先20精選2021版課件1.2語句條件語句文法if(E) S或if(E) S1else S2圖1.2分支語句流程圖圖1.3分支語句流程圖21精選2021版課件1.2語句復(fù)合語句文法{說明部分語句部分}復(fù)合語句書寫規(guī)范22精選2021版課件1.2語句循環(huán)語句while語句for語句do-while語句23精選2021版課件1.2語句循環(huán)語句while語句while(E) S圖1.4while循環(huán)的流程圖24精選2021版課件1.2語句循環(huán)語句while語句intgetSum(intm){ intsum=0; inti=1; while(i<=m){ sum+=i++; } returnsum;}25精選2021版課件1.2語句循環(huán)語句for語句for(S0;E;S1) S圖1.5for循環(huán)語句的流程圖26精選2021版課件1.2語句循環(huán)語句do-while語句do Swhile(E);圖1.6do-while循環(huán)語句的流程圖27精選2021版課件1.2語句break語句文法break;用于循環(huán)和switch語句中,表示中止語句執(zhí)行。28精選2021版課件1.2語句continue語句文法continue;用在循環(huán)語句中,表示跳至循環(huán)控制部分,繼續(xù)循環(huán)。29精選2021版課件1.2語句空語句文法;例: if(x>y);{ x++; y--; }例: for(i=0;i<10;i++);{ ……. }30精選2021版課件1.2語句goto語句文法goto標(biāo)號;31精選2021版課件1.2語句switch語句文法switch(表達(dá)式){ caseI1:S11S12S13… casel2:S21S22S23… …… default: S01S02S03…}32精選2021版課件1.2語句switch語句intk=1; charc='A'; do{ switch(c++){ case'A':k*=2;break; case'B':k+=2;continue; case'C':k%=3; default:k++; case'D':k/=3; } k++; }while(c<'F'); printf("k=%d",k);33精選2021版課件1.2語句return語句文法return;return表達(dá)式;前者所在的函數(shù)返回類型應(yīng)是void;后者所在的函數(shù)的返回類型應(yīng)是非void.34精選2021版課件1.2語句return語句voidf(){ ... f1(); ...}voidf1(){ ... if(...)return; ... }f調(diào)用f1f1......圖1.8函數(shù)調(diào)用的過程35精選2021版課件1.2語句函數(shù)調(diào)用文法函數(shù)名(實參表);36精選2021版課件綜合訓(xùn)練例1.13:“萬年歷”程序:給定年y,計算y年的日歷,即按星期對齊的方式,將y年的日歷打印出來。·問題分析:本問題的求解步驟是S1計算y年第一天的星期;S2計算y年m月第一天的星期;S3打印y年的日歷:對y年的每一月,執(zhí)行打印操作。 37精選2021版課件綜合訓(xùn)練S1計算y年第一天的星期;intgetYearWeekDay(inty){intsum=0; inti;if(y>=2000){for(i=2000;i<y;i++){sum+=getYearDays(i);}return(sum+6)%7;}else{for(i=y;i<2000;i++){sum+=getYearDays(i);}return(-sum+6)%7;}}38精選2021版課件綜合訓(xùn)練S2計算y年m月第一天的星期;intgetMonthWeekDay(inty,intm){intsum=0; inti;for(i=1;i<m;i++){sum+=getMonthDays(y,i);}return(getYearWeekDay(y)+sum)%7;}39精選2021版課件綜合訓(xùn)練S3打印y年的日歷:對y年的每一月,執(zhí)行打印操作。voidprintYear(inty){inti; count=1;

for(i=1;i<=12;i++){printMonth(y,i);}}40精選2021版課件voidprintMonth(inty,intm){inti=0; intw; printf("\n*************%d月**************\n",m);w=getMonthWeekDay(y,m);if(w==0){printf("\n%-7d",count);count++;}else{printf("");}for(i=0;i<w;i++){printf("");}for(i=1;i<=getMonthDays(y,m);i++){printf("%7i",i);w++;w%=7;if(w==0&&i<getMonthDays(y,m)){printf("\n%-7d",count);count++;}}}41精選2021版課件1.3數(shù)組一維數(shù)組一維數(shù)組的聲明形式是:類型數(shù)組變量[數(shù)組長度];如:inta[10];a+1a[9][1]…a+910*sizeof(int)[0]圖1.9inta[10]聲明的內(nèi)存圖示&a+1a是緩沖區(qū)的開始地址,是常地址。42精選2021版課件1.3數(shù)組一維數(shù)組&a+1:表示下一個a[10]空間的地址;a+1:表示下一個整數(shù)空間的地址。類型地址大小aint[10]a(等于&a,但類型不同)10*sizeof(int)a[i]inta+i(等價于&a[i])sizeof(int)43精選2021版課件1.3數(shù)組一維數(shù)組運(yùn)算符[]

地址[表達(dá)式]例:若有聲明intx,a[10],從文法上,下式都是正確的。 a[-1] a[100] (&a[3])[-2] (&x)[0]44精選2021版課件1.3數(shù)組二維數(shù)組二維數(shù)組的說明形式如下:類型數(shù)組變量名[長度1][長度2];45精選2021版課件1.3數(shù)組二維數(shù)組如:intaa[2][3];圖1-10inta[2][3]聲明的內(nèi)存圖示aa+1aa[1][1][0][0][0][1]aa[1]+12*3**sizeof(int)aa[1]+2[0][2][1][0][1][2]aa[0]+1&aa+1aa[0]+246精選2021版課件1.3數(shù)組二維數(shù)組類型地址大小aaint[2][3]aa(等于&aa)2*3*sizeof(int)aa[i]int[3]aa+i(等價于&aa[i])3*sizeof(int)aa[i][j]intaa[i]+j(等價于&aa[i][j])sizeof(int)47精選2021版課件1.3數(shù)組多維數(shù)組intaaa[2][3][4];類型地址大小aaaint[2][3][4]aaa(等于&aaa)2*3*4*sizeof(int)aaa[i]int[3][4]aaa+i(等價于&aaa[i])3*4*sizeof(int)aaa[i][j]int[4]aaa[i]+j(等價于&aaa[i][j])4*sizeof(int)aaa[i][j][k]intaaa[i][j]+k(等價于&aaa[i][j][k])sizeof(int)48精選2021版課件1.4指針指針指針的聲明形式是:類型*指針變量;例如:int*p;sizeof(int*)&pp:int*圖1.11指針變量內(nèi)存空間49精選2021版課件1.4指針指針*p表示p所指空間的內(nèi)容含義類型地址大小p指針變量int*&psizeof(int*)*p所指的內(nèi)存單元的內(nèi)容intpsizeof(int)50精選2021版課件1.4指針指針例1.14:intx=0;int*p;p=&x;*p=6;printf(“\nx=%d”,x);圖1.12指針變量引用整型變量空間p:int*sizeof(int)p≡&xx≡*p=651精選2021版課件1.4指針指針例:inta[10];int*p;p=a;p≡a圖1.13指針變量引用數(shù)組變量空間p:int*[9][0]≡*p[1]…10*sizeof(int)p+9p+152精選2021版課件1.4指針指針“*”和“&”是運(yùn)算符形式類型變化意義實例int*p;**地址在地址類型基礎(chǔ)上減一個*求地址空間中的內(nèi)容*p:int&&左值表達(dá)式或&數(shù)組變量

在原類型的基礎(chǔ)上加一個*求地址&p:int*53精選2021版課件1.4指針指針---注意類型例1.16:inti;longl=0xf1f2f3f4;charc[4];for(i=0;i<4;i++){ c[i]=*((char*)&l+i); printf("\n%x",c[i]);}f4f3f3f1&l&l+1(char*)&l+1

(char*)&l+2(char*)&l+3圖1.1454精選2021版課件1.4指針指向指針的指針例1.17:int**pp; //pp是指向int*空間的指針int*p;intx;pp=&p;p=&x;圖1.15指向指針的指針的引用關(guān)系*pp≡p:int*sizeof(int)*pp≡p≡&xx≡*p≡**pppp:int**pp≡&p55精選2021版課件1.4指針指向指針的指針含義類型地址大小pp指向指針的指針變量int**&ppsizeof(int**)*pp指針變量所指的內(nèi)存單元中的指針int*Ppsizeof(int*)**pp指針變量所指的內(nèi)存單元中的指針?biāo)傅膬?nèi)存單元的內(nèi)容int*ppsizeof(int)56精選2021版課件1.4指針例1.19:命令行參數(shù)的獲取intmain(intargc,char**argv){ inty,m;if(argc==1){ printf("\nUsage:MyDateyear[month]"); return0; } elseif(argc>=2){ y=atoi(*(argv+1)); if(argc>=3){ m=atoi(*(argv+2)); printMonth(y,m); } else{ printYear(y); } } return1;}57精選2021版課件1.4指針例1.19:命令行參數(shù)的獲取圖1.18argv內(nèi)存示意圖*argv'M''y''D''a''t''e''\0''2''0'‘1'‘0''\0'*(argv+1)'2''\0'*(argv+2)char*char*argvargv:char**argv+1char*argv+258精選2021版課件1.4指針字符串C語言中的字符串實質(zhì)上是這個緩沖區(qū)的首地址。一個字符串,它是自標(biāo)志的,字符串的結(jié)束是以‘\0’標(biāo)志的。常字符串,如“hello”

'h''e''l''l''o''\0'"hello"圖1.16字符串常量的內(nèi)存圖示59精選2021版課件1.4指針字符串操作---拷貝char*strcpy(char*s1,char*s2){ inti; for(i=0;*(s2+i)!='\0';i++){ *(s1+i)=*(s2+i); } *(s1+i)='\0'; returns1;}60精選2021版課件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;}61精選2021版課件1.4指針字符串操作---比較intstrcmp(char*s1,char*s2){ inti; for(i=0;*(s1+i)!='\0'&&*(s2+i)!='\0'&& *(s1+i)==*(s2+i);i++); return*(s1+i)-*(s2+i);}62精選2021版課件1.4指針字符串操作---計算長度intstrlen(char*s1){ inti; for(i=0;*(s1+i)!='\0';i++); returni;}63精選2021版課件1.4指針考慮下面代碼的執(zhí)行結(jié)果:charstr[2][5];strcpy(str[0],"hello"); strcpy(str[1],"hi");64精選2021版課件1.4指針指針數(shù)組int*pInt[8];char*str[]={“請輸入整數(shù)”,“x=%d”,“除法錯誤”};65精選2021版課件1.4指針數(shù)組指針int*pList[4];int(*pItem)[4];sizeof(int*[4])&pItempItem:int(*)[4][0]:int*[1]:int*[2]:int*[3]:int*pList圖1.19指針數(shù)組與數(shù)組指針內(nèi)存圖示66精選2021版課件1.4指針數(shù)組指針intgetTotal(int(*item)[4]){ inti; intsum=0; for(i=0;i<4;i++){ sum+=*(*item+i); } returnsum;}67精選2021版課件1.4指針數(shù)組指針intmain(){ inti; intitems[4][4]={{1,3,4,5},{2,4,5,3},{5,6,3,2},{6,4,3,1}}; for(i=0;i<4;i++){ printf("\n%d:%d",i+1,getTotal(items+i)); }}68精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體結(jié)構(gòu)結(jié)構(gòu)類型定義的一般形式是:struct結(jié)構(gòu)體名{ 類型域變量; 類型域變量; ……};69精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體結(jié)構(gòu)例1.21:structstu{ charid[8]; charname[10]; intsex; floatscores[7];}li;

圖1.20結(jié)構(gòu)變量li的內(nèi)存結(jié)構(gòu)圖&lisex:intid:char[8]scoresname:char[10]scores:float[7]name7*sizeof(float)10*sizeof(char)8*sizeof(char)&li+170精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體結(jié)構(gòu)類型地址內(nèi)存大小listructstu&lisizeof(li):各域變量之和li.idchar[8]li.id8*sizeof(char)li.sexint&li.sexsizeof(int)li.scoresfloat[7]li.scores7*sizeof(float)71精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體結(jié)構(gòu)structstu*pStu;structstuli;pStu=&li;&lisex:intid:char[8]scoresname:char[10]scores:float[7]name7*sizeof(float)10*sizeof(char)8*sizeof(char)&li+1&pStupStu:structstu*圖1.21結(jié)構(gòu)指針變量引用內(nèi)存圖示72精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體結(jié)構(gòu)類型地址內(nèi)存大小訪問域變量pStustructstu*&pStusizeof(structstu*)pStu->name*pStustructstupStusizeof(structstu)(*pStu).name73精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體聯(lián)合體union聯(lián)合體名{ 類型域變量; 類型域變量; ……};74精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體聯(lián)合體uniontag{ struct{ intw,h; }rect; intr; intd;};uniontagshape;圖1.22聯(lián)合變量shape的內(nèi)存結(jié)構(gòu)圖示&shaperect.wR,drect.hsizeof(int)sizeof(int)&shape+175精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體聯(lián)合體unioniaddr{ unsignedlongip; unsignedcharbyte[4];};sizeof(unioniaddr)=4。76精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體位域struct{ unsignedintf1:3; unsignedintf2:3; unsignedintf3:3;}q;&q圖1.23位域內(nèi)存圖示f3f1f277精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體鏈表結(jié)點(diǎn)的定義typedefstructstag{ intkey; structstag*next;}SNODE; //單向鏈表結(jié)點(diǎn)的定義typedefstructdtag{ intkey; structdtag*previous,*next;}DNODE; //雙向鏈表結(jié)點(diǎn)的定義78精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體鏈表結(jié)點(diǎn)的操作voidinsertAtHead(SNODE**head,SNODE*);SNODE*createSNode(intkey);voiddeleteAtTail(SNODE**head);voidtraversal(SNODE*head);……79精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體二叉樹結(jié)點(diǎn)的定義typedefstructt2Tag{ intkey; structt2Tag*left,*right;}T2NODE;80精選2021版課件1.5結(jié)構(gòu)和聯(lián)合體樹結(jié)點(diǎn)的定義typedefstructtTag{ intkey; structtTag*parent; structtTag*elderBrother,*brother; structtTag*children;}TNODE;81精選2021版課件1.6函數(shù)函數(shù)的定義格式是:返回類型函數(shù)名(參數(shù)表) 函數(shù)體

函數(shù)的調(diào)用格式是:函數(shù)名(實際參數(shù));函數(shù)原型聲明的格式為:返回類型函數(shù)名(參數(shù)表); 82精選2021版課件1.6函數(shù)參數(shù)傳遞函數(shù)定義時的參數(shù)稱為形式參數(shù),函數(shù)調(diào)用時的參數(shù)稱為實際參數(shù)。當(dāng)函數(shù)調(diào)用時,首先在棧區(qū)內(nèi)分配形式參數(shù)的內(nèi)存空間,然后計算實際參數(shù)的值,并將實際參數(shù)的值傳給形式參數(shù)的空間。(對程序執(zhí)行效率的影響?)83精選2021版課件1.6函數(shù)參數(shù)傳遞voidf(int);voidf1(int*);intmain(){ intx=100; f(x); printf("x=%d",x); f1(&x); printf("x=%d",x);}voidf(intx){ inty=100; x+=100;}voidf1(int*x){ inty=100; *x+=y;}84精選2021版課件1.6函數(shù)參數(shù)傳遞voidf2(int[]);intmain(){ inta[]={1,2,3}; f2(a); printf("%d-%d-%d",a[0],a[1],a[2]);}voidf2(inta[3]){a[0]=4;a[1]=3;a[2]=2;}在參數(shù)傳遞時,它將數(shù)組的地址傳給形參,在函數(shù)執(zhí)行時,改變的是同一數(shù)組的元素值。

85精選2021版課件1.6函數(shù)函數(shù)指針定義形式返回類型(*函數(shù)指針變量)(參數(shù)表);函數(shù)指針是一個指針變量,與一般指針不同的是,它是指向代碼區(qū)的,而不是指向數(shù)據(jù)區(qū)的指針。例:void(*pf)();

86精選2021版課件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;i<3;i++){ (*pfs[i])(); /*依次調(diào)用函數(shù)open、print、exitIt*/ }}87精選2021版課件1.6函數(shù)其中voidopen(){ printf("open");}voidprint(){ printf("print");}voidexitIt(){ printf("exit");}88精選2021版課件1.6函數(shù)例:以下定義的意義void(*getInterrupt(intno))();voidsetInterrupt(intno,void(*pf)());LRESULT(*lpfnWndProc) (HWND,UINT,WPARM,LPARAM);89精選2021版課件1.7存儲類型C中變量的完整說明形式是:

存儲類型數(shù)據(jù)類型變量;C中存儲類型registerauto(默認(rèn)存儲類型)staticextern90精選2021版課件1.7存儲類型static存儲類型在函數(shù)內(nèi)定義時,static作用范圍在函數(shù)內(nèi),但在運(yùn)行期間一直存在。在函數(shù)外定義時,從定義點(diǎn)開始有效,但只限于本文件使用。在程序運(yùn)行期間一直存在。91精選2021版課件1.7存儲類型static存儲類型---下面代碼打印出什么,為什么?intmain(){ voidprint(); print(); print(); print();}voidprint(){ staticinti=0; printf("%d-",i++);}92精選2021版課件1.7存儲類型extern存儲類型在函數(shù)內(nèi)時,引用函數(shù)外定義的量。在函數(shù)外時,引用其它文件定義的量。

總之,extern變量,不分配內(nèi)存。93精選2021版課件1.8預(yù)編譯宏定義可用于定義值或定義一些功能,其形式是:#define預(yù)編譯量#define預(yù)編譯量值#define預(yù)編譯量(參數(shù),參數(shù)......)功能定義94精選2021版課件1.8預(yù)編譯宏定義例子#definePRINT#definePI3.14159265#define子LEN200#defineHIWORD(l)*((short*)&l+1)#defineLOWORD(l)*((short*)&l)95精選2021版課件1.8預(yù)編譯宏定義例如求一個量平方的宏定義的各種寫法:#defineSQUARE(x)x*x#defineSQUARE(x)(x*x)#defineSQUARE(x)(x)*(x)#defineSQUARE(x)((x)*(x))96精選2021版課件1.8預(yù)編譯宏引用形如:

#include"文件名"例:#include"stdio.h"#include"malloc.h“在引用位置引入指定文件(任意文件)的內(nèi)容。97精選2021版課件1.8預(yù)編譯條件編譯#definePRINTintmain(){#ifdefPRINT /*若定義了PRINT,則下面代碼參與編譯*/ printf("\nPRINTisdefined.");#endif#ifndefPRINT /*若未定義PRINT,則下面代碼參與編譯*/ printf("\nPRINTisnotdefined.");#endif#ifdefPRINT /*若定義了PRINT,則下面代碼參與編譯*/ printf("\nPRINTisdefined.");#else /*否則,即若未定義PRINT,則下面代碼參與編譯*/ printf("\nPRINTisnotdefined.");#endif printf("\nend");}98精選2021版課件1.9有緩沖方式的文件操作及控制臺操作

控制臺操作

intprintf(constchar*,...);intscanf(constchar*,...);99精選2021版課件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);100精選2021版課件1.9有緩沖方式的文件操作及控制臺操作

控制臺操作

intx;longl;scanf("%d,%ld",&x,&l);int

x,y;scanf("%x,%lx",&x,&y);int

x,y;scanf("%o,%lo",&x,&y);unsignedintx;scanf("%u",&x);charc1;scanf("%c",&c1);chars1[20];scanf("%s",s1);floatr1;doubler2;

scanf("%f,%lf",&r1,&r2);101精選2021版課件1.9有緩沖方式的文件操作及控制臺操作

文件操作讀取操作時有三個步驟:打開文件,讀寫操作,關(guān)閉文件,以釋放文件所占的各種緩沖區(qū)。102精選2021版課件1.9有緩沖方式的文件操作及控制臺操作打開文件FILE*fopen(constchar*,constchar*);打開文件“c:\\tt\\tt.txt”。char*path="c:\\tt\\tt.txt";FILE*stream;if(NULL==(stream=fopen(path,"rb"))){ printf("File%sdoesn'texist.",path); exit(0);}103精選2021版課件1.9有緩沖方式的文件操作及控制臺操作打開文件方式r:打開文件用于輸入文件必須存在,否則無法打開w:打開文件用于輸出文件若存在,則刪除重新建立a:打開文件用于在文件尾追加數(shù)據(jù)。文件必須存在,否則無法打開r+:打開文件用于讀、寫文件必須存在,否則無法打開104精選2021版課件1.9有緩沖方式的文件操作及控制臺操作

讀寫操作---文件狀態(tài)函數(shù)feof可判定指定的輸入流是否結(jié)束。其原型定義:

intfeof(FILE*);若處于文件尾(endoffile),則返回真(1),否則返回假(0)。函數(shù)ferror可判定指定的流是否出錯,若有錯誤,則返回1,否則返回0。其原型定義如下:

intferror(FILE*);

105精選2021版課件1.9有緩沖方式的文件操作及控制臺操作讀寫操作---讀寫字符函數(shù)getc和fgetc都是按字符讀入內(nèi)容,其原型定義如下:intgetc(FILE*);intfgetc(FILE*);例:while(!feof(stream)){ intch=getc(stream); //這里應(yīng)是處理代碼 ......}106精選2021版課件1.9有緩沖方式的文件操作及控制臺操作讀寫操作---格式讀寫 按指定的格式讀、寫文件流的操作函數(shù)是以下兩個函數(shù):intfprintf(FILE*,constchar*,...);intfscanf(FILE*,constchar*,...);(有差別嗎?)107精選2021版課件1.9有緩沖方式的文件操作及控制臺操作讀寫操作---塊讀寫函數(shù)fwrite將指定緩沖區(qū)中的內(nèi)容寫入文件中,函數(shù)fread將文件中的內(nèi)容讀到

溫馨提示

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

評論

0/150

提交評論