C語言知識點總結(正式版)_第1頁
C語言知識點總結(正式版)_第2頁
C語言知識點總結(正式版)_第3頁
免費預覽已結束,剩余12頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C語言知識點總結C語言知識點總結1一、常量2二、標識符2三、變量2四、表達式3五、輸入輸出函數4六、C語言的語句5七、C程序的基本結構5八、選擇結構語句5if(表達式)語句1else語句25條件運算符表達式1?表達式2:表達式36switch語句6九、循環結構6for循環語句6while循環語句dowhile循環語句6十、數組7H一、字符串函數7十二、函數8十三、指針9十四、宏定義10十五、結構體,共用體,枚舉類型10十六、TurboC的使用12一、常量數字常量i. 普通數字:1,35,2.7指數形式:2.45e-2等價丁2.45*10-2注意e大小寫皆可,e前面的數字不能省,就算是1也不能省

2、,后面的數字一定要是整數長整型,單精度浮點型:3235L,32.5F分別表示3235是長整型數據,32.5是單精度浮點型左,若不寫上L,F則表示3235是整型,32.5是雙精度浮點型,L,F大小寫皆可字符常量i. 普通字符常量:用單引號把一個字符括起來,如A','ii. 轉義字符常量:一對單引號括起來并以“”開頭的字符序列,如n'(回車)、123'(8進制123對應的字符),x23'(16進制23對應的字符)字符串常量用一對雙引號把一個字符序列括起來,如“ABCef,系統存放字符申常量,每個字符分配一個字節,各字符所占字節緊鄰,并且字符申末尾會給再開一個

3、字節里面放一個0'做為結束標志。符號常量定義格式#define符號常量名符號常量值,如#defineN20則定義了符號常量N,其值為20,注意符號常量名和符號常量值之間是用空格隔開,而不是寫上=號,#define和符號常量名之間也有空格的。二、標識符命名規則以數字,字母,下劃線這三類字符組成,但只能以字母或下劃線開頭,而不能也數字開頭,另外不能將關鍵字做為標識符。32個關鍵字表在P365附錄B變量名,函數名,符號常量名全都是標識符三、變量變量的定義格式類型名變量名;如inta;定義了一個整型常量a。變量名是由人類隨便定義的,符合命名規則的前提下,愛寫啥就寫啥。所以什么flag,cc,y

4、1或者函數名fun,find等全部是自定的用來做為名字而已,沒有更特別的意義。類型名int整型,long長整型:用丁存放整數,只是數值范圍不同float單精度浮點型double雙精度浮點型:用丁存放實數,數值范圍,精度不同char字符型:用丁存放字符變量賦值,初始化inta=3;定義的同時初始化a=6*9;定義后在程序中進行賦值變量的值只有在賦值操作時才會被改變,即將其放在等號左邊時才會改變它的值,或自增自減操作:a=5,a+,a-,像a+3并未改變a的值,只是使用了a的值而已.自增自減運算變量+,+變量,變量-,-變量使變量的值自增1或自減1等價丁變量=變量+1變量=變量-1+,-放丁變量前

5、后效果的區別:當自增自減運算做為表達式的一部分時,+,-放在變量前面是先自增自減再使用變量的值,放在變量后面則是先使用變量的值,再自增自減。如x=3;printf(%d,+x);則相當丁執行了+x;printf(%d,x);這樣的操作所以打印出4再如x=3;printf(%d,x+);則相當丁執行了printf(%d,x);x+;這樣的操作,貝U打印出3,當然最后x的值還是4。四、表達式運算符和運算對象一個運算符都有若干個運算對象,如+必然要跟兩個運算對象才能進行加法運算:3+5。C語言里稱需要跟n個運算對象的運算符為n元運算符。一元運算符有:!,(類型名)二元運算符有:+,-,*,/,%(求

6、余),=,+=,-=,*=,/=,%=,<,>,<=,>=,=(等?。?!=(不等?。?&&(且),|(或)多元運算符有:,運算符的優先級和結合性優先級:同一個運算對象左右兩邊若同時有兩個運算符,則這兩個運算符優先級高的先進行運算。結合性:若同一個運算對象左右兩邊的兩個運算符優先級相同,則根據結合性判斷先進行哪個運算,自左自右結合性的先算左邊的運算符,自右自左的先算右邊的運算符。i. 各運算符的優先級和結合性見P365附錄C強制類型轉換格式:(類型名)表達式。將后跟的表達式的值的數據類型轉換為與圓括號內的類型名一致的類型。注意類型名一定要用()括起來。算

7、術表達式i. 算術運算符:+,-,*,/,%(求余)ii. 由算術運算符加上運算對象構成算術表達式,如3+3*6-9/2值:跟我們小學時學的一樣,就是表達式的計算結果iii. 整數除以整數結果取整數部分,故1/3得到的值是0iv. 5%3結果為2,想想小學除法,求余得到的是余數不是商。賦值表達式i. 賦值運算符:=,+=,-=,*=,/=,%=ii. 賦值表達式:變量=表達式,如x=3+6,x+=6-9,x+=x*=3+4注意等號左邊只能是變量復合賦值運算符的運算:以/=為例:x/=表達式等價丁x=x/(表達式)iii. 值:=號左邊的變量最終的值關系表達式i. 關系運算符:<,>

8、,<=,>=,=(等?。?!=(不等?。﹊i. 由關系運算符加上運算對象構成關系表達式,如3>=4,2=a值:滿足相應運算符所指定的關系的值為1,否則為0邏輯表達式i. 邏輯運算符:&&(且),|(或),!(非)ii. 由邏輯運算符加上運算對象構成邏輯表達式,如3&&4,x|!y值:滿足相應運算符所指定的關系的值為1,否則為0進行|或運算時,若|左邊的表達式值為1,則不再對右邊的表達式進行運算。iii. 進行&&且運算時,若&繇邊的表達式值為0,則不再對右邊的表達式進行運算。逗號表達式i. 逗號運算符:,ii. 用逗號將

9、各種表達式連續起來構成逗號表達式,如3+4,a=9,8*a值:組成逗號表達式的各個表達式中的最后一個的值,如上例為8*a題目:P71117P81833五、輸入輸出函數scanf(格式控制申”,變量地址表歹U);如scanf(%d%c%d&a,&ch,&b);scanf(%4f',&x);汪息:格式控制申可控制截取用戶輸入的前幾個字符給變量,但不能控制輸入幾位小數給變量,如不能寫成scanf(%4.2f”,&x);i. 第二個參數給的是地址,即要么是&攻量名或數組元素名的形式,要么就是一個數組名或指針變量名,如int*p,a;p=&

10、a;scanf(%d,p);考試時注意看題目給你寫好的scanf的格式1. 若其格式控制申內各格式符用二”隔開如scanf(%d%c%d,&a,&ch,&b);那輸入時也要用逗號隔開,如此例輸入時應:3,+,52. 若是這種格式scanf(%d%d,&a,&b);則輸入時應:35;若是這種格式scanf(%d%c%d&a,&ch,&b);則輸入時應3+5,若寫成3+5則a=3,ch=''(空格),b=任意值(自己上機運行看看結果)printf(格式控制申”,輸出項表歹0);如floatx=7.5;printf(%8

11、.2f”,x);此處的意思是將x打印出來,且占8列,保留兩位小數。自己上機運行看看效果。常用格式符匯總:i. %d輸入輸出整型數據,ld:輸入輸出長整型數據ii. %c輸入輸出字符型數據%f:輸出單(雙)精度浮點型數據,輸入單精度型數據。lf:輸入雙精度型數據%s輸入輸出一個字符申,用printf輸出字符申時,輸出項書寫時可為字符申常量,或字符數組名。如printf(%S;hello”);或charstr10="hello”;printf(%§',str);%u輸入輸出無符號整型,0輸入輸出八進制數,%x:輸入輸出十六進制數getchar();函數調用后返回用戶輸入

12、的一個字符,故需再定義一個變量來存放這個字符,即使用時應charc;c=getchar();意思就是接收用戶輸入的一個字符,并將其賦值給變量coputchar(字符常量或字符變量名);如charc='A'putchar(c);或putchar(A');都會向屏幕輸出字符A。六、C語言的語句表達式語句:由表達式末尾加上分號構成。函數調用語句:由函數調用表達式加上分號構成。空語句:;選擇結構語句:if語句switch語句循環語句:for語句while語句dowhile語句復合語句:用花括號將以上任意語句括起來構成一條復合語句。七、C程序的基本結構voidmain()聲明部分

13、:用來定義變量和聲明自定義函數的原型,需以“;”結尾,如intx;執行語句部分:第六點里介紹的各種語句,如x=3;printf(%d,x);main函數外可寫自定義函數。如intmax()return0;八、選擇結構語句if(表達式)語句1else語句2如果if語句的圓括號內的表達式值為非0,則執行語句1,值為0則執行語句2。i.表達式可為任意表達式,if語句執行的實質是判斷表達式的值是否為0來決定執行語句1還是語句2。另外清在此處表達嚴重關切,不管是高手還是菜鳥經常會把判斷兩個數相等的符號“=”寫成了一個等號“=”成為了賦值運算,這樣的寫法不會引發編譯錯誤,但結果會與原意大大不同,所以考試前

14、清再三提醒自己。ii.語句1和語句2都只能是一個語句,若要跟多條語句,切記用一對括起來,構成復合語句;也不要隨便在圓括號后加“;”,因“;”構成一條空語句,這會使后面跟的語句1不再屆丁if語句的組成部分。iii. if語句的三種結構1. 單邊:if(表達式)語句2. 雙邊:if(表達式)語句1else語句23. 多層(重點掌握):if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3else語句n條件運算符表達式1?表達式2:表達式3若表達式1的值非0,則取表達式2的值做為整個表達式的值,否則取表達式3的值為整個表達式的值。如3>4?1:2該表達式的值為2sw

15、itch語句switch(表達式)case表達式1:語句case表達式2:語句case表達式n:語句default:語句語句執行過程:先計算表達式的值,然后判斷該值與表達式1到表達式n中的哪個相等,若與表達式i的值相等,貝U執行表達式i后的所有語句,當遇到break;語句時結束整個switch語句的執行。表達式1到表達式n的值都不相等的情況下執行default后跟的語句。每個case后可跟多條語句。九、循環結構for循環語句for(表達式1;表達式2;表達式3)循環體語句語句執行過程:1. 計算表達式1判斷表達式2的值是否為0,若為0,語句執行結束,若不為0,進入步驟3執行循環體語句(需注意的

16、是循環體語句只能有一個語句,若要包含多個語句要用一對括起來,構成一條復合語句,此處也不要隨便加上“;”,因一個“;”可構成一條空語句,這會使得后面真正的循環體語句不屆丁for循環語句的部分)。進入步驟42. 計算表達式3,然后重新進入步驟2while循環語句dowhile循環語句i. while(表達式)循環體語句執行過程:1. 判斷表達式的值是否為非0,若是進入步驟2,否則結束語句執行。2. 執行循環體語句,重新回到步驟1。ii. do循環體語句while(表達式);執行過程:1. 執行循環體語句,進入步驟22. 判斷表達式的值是否為非0,若是重新回到步驟1,否則結束語句執行。這里要注意的地

17、方跟for語句一樣,即循環體語句只能有一個語句,若要包含多個語句要用一對括起來,構成一條復合語句,此處也不要隨便加上“;”,因一個“;”可構成一條空語句,這會使得后面真正的循環體語句不屆丁while循環語句的部分,另外dowhile循環的while(表達式)后是要加“;”的。break語句:放在循環體內實現的功能是結束其所在的那層循環的執行。十、數組定義格式:數據類型數組名整型常量;如inta10;定義了一個整型數組,數組名為a,這個數組含有10個元素。引用數組元素:格式:數組名下標切記下標值從0開始。下標可為常量,表達式,變量等,如inti=3;a0=5;a3*2=9;ai=7;初始化:數據

18、類型數組名整型常量=(數據表列;將數據表列的各個值依次賦值給數組的各個元素。如inta5=0,1,2,3,4;則數組a各元素a0到a4的值分別為0,1,2,3,4遍歷數組元素數組定義后,我們不能對數組進行整體的操作,如inta10;不能用a=3這樣的操作將數組的各元素都賦值為3;而只能一個一個元素的進行賦值,如a0=3;a1=3;a2=3a9=3;當然此時我們就可以借助丁一個for循環來控制下標的變化從而對數組的各個元素進行賦值for(i=0;i<10;i+)ai=3;當然這只是用for循環遍歷數組各元素的最簡單的例子,一般考試考的是找出數組元素的某種特性的極值,比如最大值,最小值,或對

19、數組各元素進行排序,這時我們就可以使用for循環來遍歷數組的各元素,然后在當前循環中得到一個元素再對其進行處理。如i=2時訪問到的元素是a2,你就可以問問它,你是不是最小值啊。整型數組inta10;整型數組里的各個元素存放的是整數。a3=3;字符型數組charstr20;字符型數組里的各個元素存放的是字符。str3='A'H一、字符串函數gets(字符數組名或字符指針變量);如charstr10,*str2;str2=str;貝Ugets(str);或gets(str2);都是接收用戶輸入的字符申如“ABC存入到字符數組str中puts(字符數組名或字符指針變量或字符申常量);

20、如charstr10=”china”;char*str2;str=str2;貝Uputs(str);或puts(str2);或puts(china”);都會在屏幕上打印出chinastrlen(字符數組名或字符指針變量);字符申測長函數charstr20="helloworld!"intlen;len=strlen(str);得出的結果是len的值為12strcat(字符申1的地址,字符申2的地址);將字符申2的內容連接到字符申1的尾部。charstr120="ABC,str220="xyz"strcat(str1,str2);則程序運行的結果

21、是strl內存放的字符申變為ABCxyz當然str2存放的字符申還是xyz。strcmp(字符申1的地址,字符申2的地址);比較申1和申2哪個比較大。比較大小的依據是,兩個字符申從左往右相應位置上第一個不相等的字符ASCII碼值之差。charstr120=”ABCE,str220=”ABDE;inti;i=strcmp(str1,str2);第一個不相等的字符為str1的CT和str2的D',而二者相差-1,故-1做為strcmp函數執行的結果返回到被調用的位置,該位置位丁賦值表達式內,故將其值賦值給i,即此時i的值就是-1.strcpy(字符申1的地址,字符申2的地址);將字符申2的

22、內容復制到字符申1內。charstr120="ABC,str220="xyz"strcpy(str1,str2);此時str1的內容為”xyz”,當然str2的內容沒變strcpy(str1,”uvw”);此時str1的內容乂變成了“uvw"。十二、函數函數定義函數類型函數名(形式參數列表)內部變量定義和聲明部分執行語句如:intmax(intx,inty)intz;z=x>y?x:y;return(z);汪息點:1. 函數類型是指返回值的類型,即要與return語句后跟的表達式的值的類型一致。若函數類型為void則說明該函數無返回值,即函數體里不

23、能出現return語句。2. 形式參數列表里定義的變量要記得給它們指定類型,而且如果同時要定義多個,應在每個前面都分別指定類型名,而不能寫成intx,y;函數體里能寫的語句跟main函數一樣,在開頭可定義所需要的變量,后面跟上一堆執行語句。函數調用流程以上面的函數為例,在main函數進行調用:voidmain()(inta,b,c;scanf("d%'d,&a,&b);printf(“d,max(a,b);或c=max(a,b);printf(“d,c)以上兩種方法都會在屏幕中打印出a,b問的較大值。調用函數的格式函數名(實際參數列表);調用的時候像什么函數類

24、型,形式參數的類型就不要加上去了。max(a,b)中max就是函數名,寫上變量名a,b是實際參數列表,執行這個調用語句時,會先把a,b的值給相應位置的形式參數即執行了x=a,y=b這樣的操作,然后開始執行max函數的函數體的語句。當max函數體里執行到一個return語句時,則max函數結束執行,將return后的表達式的值返回給main函數調用max函數的那個位置,即若上面a=3,b=5則max(a,b)return后的表達式的值應該是5也就是說執行完max后把5返回到調用max的位置可看成printf(“d,5);或另一種解法的c=5。十三、指針指針變量的聲明:類型名*指針變量名;通過指針

25、變量訪問它所指向的普通變量的值先將普通變量的地址賦值給指針變量,再通過指針運算符*得到普通變量的值。int*p,x,y;x=3;p=&x;則printf(%d,*p);會打印出3即x的值y=*p;則y的值變為3*p=5;則x的值變為5指針變量加上(減去)一個位移的效果若指針變量存入的是數組元素的地址,則其加一減一得到的是那個數組元素下一個或前一個元素的地址。inta10;p=&a3;*p得到的是a3的值。若p+;此時p存放的是a4的地址&a4;*p得到的就是a4的值?;騪-;此時p存放的是a2的地址&a2,*p得到的就是a2的值。行指針i. 主要是對丁二維數組來

26、說的,二維數組每行都有自己的地址,第0行地址用數組名表示,第i行地址為數組名+i;而想要得到二維數組里一個元素的地址,必需先得到其所在行的地址,然后再由那個地址得到元素的地址,比如說inta34;定義了一個二維數組,該二維數組第0行的地址為a,第1行的地址為a+1,第2行的地址為a+2,想從行的地址得到元素的地址,需在行地址前加上指針運算符“*”,即*a就是第0行首個元素的地址即a00的地址,而a02的地址就是在a00的地址基礎上加上位移量2,即*a+2,然后想得到a02這個元素的值呢就再加上一個指針運算符“*”,即*(*a+2),類似地,想得到a22這個元素的值呢就是*(*(a+2)+2)i

27、i. 定義行指針變量:類型名(*變量名)數組長度;如int(*p)4,a34;p=a;此時就可把p當成a來用,用法同上所述。判斷是否合法訪問數組元素:若是指針法訪問,判斷指針后跟的是否地址;若是下標法訪問,判斷下標有無越界。函數指針:函數名即為函數的地址(指針)i. 函數指針變量的定義:類型名(*變量名)(形參歹U表);如int(*p)();賦值:指針變量=函數名;設有個函數其函數名為max,則要將該函數的地址給p的話只要執行如下語句即可p=max;指針數組:指針數組的數組元素都是指針變量,是用來存放變量的地址的,定義格式為類型名*變量名數組長度;如int*p10;指向指針的指針:指針變量也是

28、一種變量,故在內存中也有對應的一個地址,而要存放指針變量的地址,就要求助丁用來存放指針變量的地址的指針變量,定義格式類型名*變量名;如int*p1;int*p2;inta=3;可進行賦值p1=&a;p2=&p1;則a、*p1和*p2的值都是3.十四、宏定義無參宏定義#define標識符值定義后,出現所定義的標識符的地方都將以定義時指定的值來代替。#defineM2+3main()intx;x=M*M;則x的值為2+3*2+3=11若想得到的結果是(2+3)*(2+3)則定義時也寫成這樣#defineM(2+3)注意#define、標識符、值之間都要用空格隔開,且宏定義結尾不需加

29、分號。帶參宏定義#define標識符(參數表)值#defineS(x,y)x*ymain()inta=3,b=4,c=5,d=6;printf("a*b=%dn”,S(a,b);此時會打印出a*b=12printf("a+b*c+d=%dn”,S(a+b,c+d);此時會打印出a+b*c+d=29,帶參宏定義執行時是將a+b這樣一個表達式代替x,c+d這樣一個表達式代替y,所以S(a+b,c+d)進行的是a+b*c+d的運算,而不是將a+b的值給x,c+d的值給y然后再做x*y,這點跟函數調用傳遞參數是不一樣的。自定義類型名typedef:對已存在的類型名取一個外號。i.基

30、本格式:typedef原類型名新類型名;ii.typedefintINTEGER;則inta,b;等價丁INTEGERa,b;typedefintNUM10;則inta10;等價丁NUMa;a即為一個有10個元素的數組的數組名。typedefint*INTEGER;則int*a,*b;等價丁INTEGERa,b;十五、結構體,共用體,枚舉類型結構體結構體類型的定義及變量的定義struct結構體名(類型成員1;類型成員2;類型成員n;變量名;如structstudent(longnum;charname10;intscore4;st1;定義類型時同時定義變量structstudentst2;定義類型后,用類型名定義變量還有一種struct(longnum;charname10;intscore4;st3;不給類型名,直接定義變量ii.結構體變量所占字節數:各成員各占字節數之和,如以上st1,st2,st3的字節數皆為10+20+2*4=38結構體變量初始化:structstudenta=(20030001,"張三",70,75,80,85;iii. 結構體數組定義及初始化:structstudenta3=20030001,"zhang",89,90,91,92,20030002,"liu",6

溫馨提示

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

評論

0/150

提交評論