國家計算機(jī)二級考試 C語言基本知識_第1頁
國家計算機(jī)二級考試 C語言基本知識_第2頁
國家計算機(jī)二級考試 C語言基本知識_第3頁
國家計算機(jī)二級考試 C語言基本知識_第4頁
國家計算機(jī)二級考試 C語言基本知識_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第一章 C語言基本知識【考點(diǎn)1】C程序C語言程序結(jié)構(gòu)有三種: 順序結(jié)構(gòu) , 循環(huán)結(jié)構(gòu)(三個循環(huán)結(jié)構(gòu)), 選擇結(jié)構(gòu)(if 和 switch)【考點(diǎn)2】main函數(shù)每個C語言程序中main 函數(shù)是有且只有一個。讀程序都要從main()入口, 然后從最上面順序往下讀(碰到循環(huán)做循環(huán),碰到選擇做選擇)。【考點(diǎn)3】存儲形式計算機(jī)的數(shù)據(jù)在電腦中是以二進(jìn)制的形式保存。最低的存儲單元是bit(位),位是由為 0 或者1構(gòu)成。 byte 是指字節(jié), 一個字節(jié) = 八個位。數(shù)據(jù)存放的位置就是它的地址?!究键c(diǎn)4】注釋是對程序的說明,可出現(xiàn)在程序中任意合適的地方,注釋從“/*”開始到最近一個“*/”結(jié)束,其間任何內(nèi)容

2、都不會被計算機(jī)執(zhí)行,注釋不可以嵌套。【考點(diǎn)5】書寫格式每條語句的后面必須有一個分號,分號是語句的一部分。一行內(nèi)可寫多條語句,一個語句可寫在多行上?!究键c(diǎn)6】標(biāo)識符合法的用戶標(biāo)識符考查:合法的要求是由字母,數(shù)字,下劃線組成。有其它元素就錯了。并且第一個必須為字母或則是下劃線。第一個為數(shù)字就錯了。C語言標(biāo)識符分如下3類(1)關(guān)鍵字。它們在程序中有固定的含義,不能另作他用。如int、for、switch等。(2)預(yù)定義標(biāo)識符。預(yù)先定義并具有特定含義的標(biāo)識符。如define、include等。(3)用戶標(biāo)識符。用戶根據(jù)需要定義的標(biāo)識符,符合命名規(guī)則且不與關(guān)鍵字相同。關(guān)鍵字不可以作為用戶標(biāo)識符號。mai

3、n define scanf printf 都不是關(guān)鍵字。迷惑你的地方If 是可以做為用戶標(biāo)識符。因為If 中的第一個字母大寫了,所以不是關(guān)鍵字?!究键c(diǎn)7】實型數(shù)據(jù)實型數(shù)據(jù)的合法形式:小數(shù)形式和指數(shù)形式。掌握判定指數(shù)形式合法性。2.333e-1 就是合法的,且數(shù)據(jù)是2.333×10-1。考試口訣:e 前e 后必有數(shù),e 后必為整數(shù)?!究键c(diǎn)8】字符字符常量由單引號括起來,字符串常量由雙引號括起來。當(dāng)用 scanf 函數(shù)輸入字符串時,字符串中不能含有空格,否則將以空格作為串的結(jié)束符。字符數(shù)據(jù)的合法形式::'1' 是字符占一個字節(jié),"1"是字符串占兩個字

4、節(jié)(含有一個結(jié)束符號0,ASCII 碼為 0)。'0' 的ASCII 數(shù)值表示為48,'a' 的ASCII 數(shù)值是97,'A'的ASCII 數(shù)值是65。字符型和整數(shù)是近親:char a = 65 ;printf(“%c”, a); 得到的輸出結(jié)果:aprintf(“%d”, a); 得到的輸出結(jié)果:65一般考試表示單個字符錯誤的形式:'65' "1"字符是可以進(jìn)行算術(shù)運(yùn)算的,記?。?'0'-0=48大寫字母和小寫字母轉(zhuǎn)換的方法: 'A'+32='a' 相互之間一般

5、是相差32。ASCII碼鍵盤ASCII 碼鍵盤ASCII 碼鍵盤ASCII 碼鍵盤27ESC32SPACE33!34“35#36$37%38&3940(41)42*43+4445-46.47/48049150251352453554655756857958:59;60<61=62>63?6465A66B67C68D69E70F71G72H73I74J75K76L77M78N79O80P81Q82R83S84T85U86V87W88X89Y90Z9192939495_9697a98b99c100d101e102f103g104h105i106j107k108l109m110n

6、111o112p113q114r115s116t117u118v119w120x121y122z123124|125126【考點(diǎn)9】整型數(shù)據(jù)整型一般是兩個字節(jié), 字符型是一個字節(jié),雙精度一般是8個字節(jié):考試時候一般會說,在16 位編譯系統(tǒng),或者是32 位系統(tǒng)。碰到這種情況,不要去管,一樣做題。掌握整型一般是兩個字節(jié), 字符型是一個字節(jié),雙精度一般是8 個字節(jié)就可以了?!究键c(diǎn)10】轉(zhuǎn)義字符轉(zhuǎn)義字符的考查:o 空字符(NULL) n 換行符(LF) r 回車符(CR) 單引號 ”雙引號 反斜杠ddd 任意字符 三位八進(jìn)制 xhh 任意字符 二位十六進(jìn)制在程序中 int a = 0x6d,是把一個十

7、六進(jìn)制的數(shù)給變量a 注意這里的0x 必須存在。在程序中 int a = 06d, 是一個八進(jìn)制的形式。在轉(zhuǎn)義字符中, x6d 才是合法的,0 不能寫,并且x 是小寫。141 是合法的, 0 是不能寫的。108是非法的,因為不可以出現(xiàn)8?!究键c(diǎn)11】算術(shù)運(yùn)算算術(shù)運(yùn)算符一共有+、*、/、%這五個。%符號兩邊要求是整數(shù)。不是整數(shù)就錯了。三種取整丟小數(shù)的情況:不是四舍五入是舍掉小數(shù)部分。、int a =1.6;、(int)a;、1/2; 3/2;【考點(diǎn)12】強(qiáng)制類型轉(zhuǎn)換將一個運(yùn)算對象轉(zhuǎn)換成指定類型,格式為(類型名)表達(dá)式一定是 (int)a 不是 int(a),注意類型上一定有括號的。注意(int)(

8、a+b) 和(int)a+b 的區(qū)別。前是把a(bǔ)+b 轉(zhuǎn)型,后是把a(bǔ) 轉(zhuǎn)型再加b?!究键c(diǎn)13】賦值是表達(dá)式就一定有數(shù)值。賦值表達(dá)式:表達(dá)式數(shù)值是最左邊的數(shù)值,a=b=5;該表達(dá)式為5,常量不可以賦值。復(fù)合賦值運(yùn)算符:注意:a*=m+2 是 a=a*(m+2)自加、自減表達(dá)式:假設(shè)a=5,+a(表達(dá)式的值為6), a+(表達(dá)式的值為5);j=a+;等價于j=a;a=a+1; 而j=+a;等價于a=a+1;j=a;。考試口訣:+在前先加后用,+在后先用后加?!究键c(diǎn)14】逗號運(yùn)算逗號表達(dá)式:優(yōu)先級別最低; 表達(dá)式的數(shù)值是逗號最右邊的那個表達(dá)式的數(shù)值。(2,3,4)的表達(dá)式的數(shù)值就是4。Int a=2(

9、a*2,a*=3),分別求表1,表2值,以表2為結(jié)果為6【考點(diǎn)15】數(shù)制轉(zhuǎn)換一定要記住二進(jìn)制 如何轉(zhuǎn)換成十進(jìn)制。八進(jìn)制是沒有8 的,逢8 進(jìn)1,018 的數(shù)值是非法的。 【考點(diǎn)16】位運(yùn)算會有一到二題考試題目。C語言提供6種位運(yùn)算符:按位求反,按位左移<<,按位右移>>,按位與&,按位異或,按位或|。總的處理方法:幾乎所有的位運(yùn)算的題目都要按這個流程來處理(先把十進(jìn)制變成二進(jìn)制再變成十進(jìn)制)。按位與&是雙目運(yùn)算符,只有對應(yīng)的兩個二進(jìn)位均為1時,結(jié)果位才為1 ,否則為0。按位異或的規(guī)則:0異或1得到1,0異或0得到0,1異或1得到0??捎洖椤跋嗤瑸?,不同

10、為1”。按位或|,只要對應(yīng)的二個二進(jìn)位有一個為1時,結(jié)果位就為1。在沒有舍去數(shù)據(jù)的時候,<<左移一位表示乘以2;>>右移一位表示除以2。(1.a=8,c=a>>3,右移3,即823=1 2.8的二進(jìn)制00001000,右移,即00000001,轉(zhuǎn)換成十進(jìn)制,即1)第二章 數(shù)據(jù)的輸入輸出(順序結(jié)構(gòu))【考點(diǎn)1】printf函數(shù)格式為:printf(輸出控制,輸出列表)。輸出控制是用一對雙引號括起來的,包含格式說明和原樣信息。輸出列表包含若干輸出項。例:int x=017; 一定要弄清楚為什么是這個結(jié)果!過程很重要 printf(“%d”, x); 15 prin

11、tf(“%o”, x); 17 printf(“%#o”,x); 017 printf(“%x”, x); 11 printf(“%#x”,x); 0x11 %d 整型 int %c 字符char %ld 長整型 long int %s 字符串 %f 浮點(diǎn)型 float %o 八進(jìn)制 %e對應(yīng)指數(shù)型 %lf double %#o 帶前導(dǎo)的八進(jìn)制 % 輸出一個百分號 %x 十六進(jìn)制 %#x 帶前導(dǎo)的十六進(jìn)制 %u 無符號整型 舉例說明: printf(“%2d”,123 );第二部分有三位,大于指定的兩位,原樣輸出123 printf(“%5d”,123 ); 第二部分有三位,小于指定的五位,左

12、邊補(bǔ)兩個空格 123 printf(“%10f”,1.25 ); 小數(shù)要求補(bǔ)足6位的,沒有六位的補(bǔ)0,。結(jié)果為 1.250000 printf(“%5.3f”,125 ); 小數(shù)三位,整個五位,結(jié)果為1.250(小數(shù)點(diǎn)算一位) printf(“%3.1f”,1.25 );小數(shù)一位,整個三位,結(jié)果為1.3(要進(jìn)行四舍五入)【考點(diǎn)2】scanf函數(shù)1.格式為:scanf(輸入控制,輸入列表)注意該函數(shù)的第二個部分是&a 這樣的地址,不是a;2.scanf(“%d%d%*d%d”,&a,&b,&c); 跳過輸入的第三個數(shù)據(jù)。3.scanf 函數(shù)中沒有精度控制,如:sc

13、anf("%5.2f",&a);是非法的4.特別注意指針在scanf的考察 例如: int x=2;int *p=&x; scanf(“%d”,x);錯誤 scanf(“%d”,p);正確 scanf(“%d”,&p);錯誤 scanf(“%d”,*p)錯誤 5.指定輸入的長度 (考試重點(diǎn)) 終端輸入:1234567 scanf(“%2d%4d%d”,&x,&y,&z);x為12,y為3456,z為7 終端輸入:1 234567 由于1和2中間有空格,所以只有1位給x scanf(“%2d%4d%d”,&x,&

14、y,&z);x為1,y為2345,z為67【考點(diǎn)3】putchar與getchar函數(shù)可用于輸出或輸入單個字符,這兩個函數(shù)是stdio.h文件中的庫函數(shù),它們是printf與scanf函數(shù)的簡化。char a = getchar() 是沒有參數(shù)的,從鍵盤得到你輸入的一個字符給變量a。putchar(y)把字符y 輸出到屏幕中?!究键c(diǎn)4】如何交換兩個變量如何實現(xiàn)兩個變量x ,y 中數(shù)值的互換(要求背下來)不可以把 x=y ,y=x; 要用中間變量 t=x;x=y;y=t。【考點(diǎn)5】實現(xiàn)保留三位小數(shù)如何實現(xiàn)保留三位小數(shù),第四位四舍五入的程序,(要求背下來)float x=12.34567;

15、float y=(int)(x*1000+0.5)/1000.0;(1000后一定含小數(shù)點(diǎn),除法運(yùn)算符“/”:雙目運(yùn)算具有左結(jié)合性。參與運(yùn)算量均為整型時,結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個是實型,則結(jié)果為雙精度實型。)y=(int)(x*100+0.5)/100.0 這個保留兩位,對第三位四舍五入y=(int)(x*10000+0.5)/10000.0 這個保留四位,對第五位四舍五入這個有推廣的意義,注意 x = (int)x 這樣是把小數(shù)部分去掉。第三章 選擇結(jié)構(gòu)特別要注意:c 語言中是用非0 表示邏輯真的,用0 表示邏輯假的?!究键c(diǎn)1】關(guān)系運(yùn)算關(guān)系運(yùn)算符有6個,分別是>,&g

16、t;=,<,<=,=,!=,前四種優(yōu)先級高于后兩種。關(guān)系表達(dá)式:關(guān)系表達(dá)式真時為1,假時為0當(dāng)關(guān)系的表達(dá)是為真的時候得到1。如 9>8 這個是真的,所以表達(dá)式的數(shù)值就是1?!究键c(diǎn)2】邏輯運(yùn)算只能為1(表示為真),或0(表示假)a) 共有三種邏輯運(yùn)算符號。邏輯非(!),邏輯與(&&),邏輯或(|)。b) !>&&>| 優(yōu)先的級別。c) 注意短路現(xiàn)象。考試比較喜歡考到。例a+|b+,如果表達(dá)式a+的值非零,則表達(dá)式b+不再執(zhí)行。d) 要表示 x 是比0 大,比10 小的方法。0<x<10 是不可以的,是先計算0<x得到

17、的結(jié)果為1或0;再用1或0與10進(jìn)行比較得到的總為真(為1)。所以一定要用(0<x)&&(x<10)【考點(diǎn)3】if語句可以單獨(dú)出現(xiàn),也可以與else匹配出現(xiàn)。if語句可以嵌套,這時else總是與離它最近的且沒有與else匹配的if匹配。注意if語句的子句是緊接if或else的一句,如有多句需要用括起來。1.If(a)等價于if(a!=0)2.if(a<b)t=a;a=b;b=t; if(a<b)t=a;a=b;b=t;兩個的區(qū)別,考試多次考到了! 3.單獨(dú)的if語句:if(a<b)t=a; 標(biāo)準(zhǔn)的if語句:if(a<b)min=a; else

18、 min=b; 嵌套的if語句:if(a<b) if(b>c)printf(“ok!”); 多選一的if語句if(a= =t)printf(“a”); else if(b= =t)printf(“b”); else if(c= =t)printf(“c”); else pritnf(“d”); 4.int a=1,b=0; if(!a)b+; else if(a= =0) if(a)b+=2;else b+=3;請問b的值是多少? 正確的是b為3。 int a=1,b=0; if(!a)b+; 是假的不執(zhí)行 else if(a= =0) 是假的不執(zhí)行 if(a)b+=2; 屬于el

19、se if的嵌套if語句,不執(zhí)行。 else b+=3; if-else-if語句沒有一個正確的,就執(zhí)行else的語句!【考點(diǎn)4】條件運(yùn)算是唯一的三目運(yùn)算符,格式:表達(dá)式1 ?表達(dá)式2 :表達(dá)式3表達(dá)式1值為非0時,整個表達(dá)式值為表達(dá)式2的值,表達(dá)式1值為0時,整個表達(dá)式值為表達(dá)式3的值??荚嚳谠E:真前假后。int a=1,b=2,c=3,d=4,e=5; k=a>b?c:d>e?d:e;求k的數(shù)值時多少?k=5.【考點(diǎn)5】switch語句a) 一定要注意有 break 和沒有break 的差別,書上(53,54 頁)的兩個例子,沒有break時候,只要有一個case 匹配了,剩下

20、的都要執(zhí)行,有break 則是直接跳出了switch 語句。b) switch 只可以和break 一起用,不可以和continue一起用。c) switch(x) x:是整型常量,字符型常量,枚舉型數(shù)據(jù)。case 常量表達(dá)式 1: 語句1;case 常量表達(dá)式 2: 語句2;case 常量表達(dá)式 n: 語句n;default : 語句n+1;switch后小括號里面的表達(dá)式不能為實型,case后表達(dá)式不能有變量,case 后,允許有多個語句,可以不用括起來??谠E:switch表不為實,case表不為變。第四章循環(huán)結(jié)構(gòu)【考點(diǎn)1】三種循環(huán)結(jié)構(gòu)while(為真,執(zhí)行);do- while(為假,停

21、止);for()三種。三種結(jié)構(gòu)的格式及執(zhí)行順序詳見教材第58、62、64頁。b)for 循環(huán)()當(dāng)中必須是兩個分號,千萬不要忘記。c)寫程序的時候一定要注意,循環(huán)一定要有結(jié)束的條件,否則成了死循環(huán)。d) do-while()循環(huán)的最后一個while();的分號一定不能夠丟。(當(dāng)心上機(jī)改錯),dowhile循環(huán)是至少執(zhí)行一次循環(huán)。【考點(diǎn)2】break與continuebreak 和 continue 的差別記憶方法:break:是打破的意思,(破了整個循環(huán))所以看見break 就退出這一層循環(huán)。continue: 是繼續(xù)的意思,是要結(jié)束本次循環(huán),就是循環(huán)體內(nèi)剩下的語句不再執(zhí)行,跳到循環(huán)開始,然后

22、判斷循環(huán)條件,進(jìn)行新一輪的循環(huán)?!究键c(diǎn)3】循環(huán)的嵌套就是有循環(huán)里面還有循環(huán),這種比較復(fù)雜,要一層一層一步一步耐心的計算,一般只考查兩層嵌套,循環(huán)嵌套通常是處理二維數(shù)組。循環(huán)結(jié)構(gòu)是重點(diǎn),筆試所占分值一般在13分左右,在上機(jī)考試中也是必考點(diǎn),應(yīng)用性很強(qiáng)。要求學(xué)員重點(diǎn)理解并多加練習(xí),領(lǐng)會掌握?!究键c(diǎn)4】while(c=getchar())!=n) 和 while(c=getchar() !=n)的差別 先看a = 3 != 2 和 (a=3)!=2 的區(qū)別: (!=號的級別高于=號 所以第一個先計算 3!=2) 第一個a的數(shù)值是得到的1;第二個a的數(shù)值是3。 考試注意點(diǎn): 括號在這里的重要性?!究键c(diǎn)

23、5】每行輸出五個的寫法: for(i=0;i<=100;i+) printf(“%d”,i); if((i+1)%5=0)printf(“n”); 如果i是從1開始的話,就是if(i%5=0)printf(“n”); 【考點(diǎn)6】如何整除一個數(shù): i%5=0表示整除5 I%2=0表示整除2,同時表示是偶數(shù)! 【考點(diǎn)7】輸入123,輸出321逆序輸出數(shù)據(jù) int i=123; while(i!=0) printf(“%d”,i%10); i=i/10; 【考點(diǎn)8】for只管后面一個語句: int i=3; for(i=3;i<6;i+); printf(“#”): 請問最終打印幾個#號

24、?答案為一個! 【考點(diǎn)9】不停的輸入,直到輸入# 停止輸入! while( (x=getchar()!= # ) 不停的輸入,直到輸入$停止輸入! while( (x=getchar()!= $ ) 不停的輸入,直到遇到?停止輸入! while( (x=getchar()!= ? ) 解說:一定要注意這種給出了條件,然后如何去寫的方法! 【考點(diǎn)10】for循環(huán)和switch語句的和在一起考題! 【考點(diǎn)11】多次出現(xiàn)的考題: int k=1; int k=1;while(- -k); while(k- -);printf(“%d”,k); printf(“%d”,k);結(jié)果為0 結(jié)果為-1 第五

25、章 函數(shù)【考點(diǎn)1】函數(shù)的定義函數(shù):是具有一定功能的一個程序塊;是C 語言的基本組成單位。函數(shù)的首部為:函數(shù)類型 函數(shù)名(類型1 形參1,類型2 形參2,)。在函數(shù)定義中不可以再定義函數(shù),即不能嵌套定義函數(shù)。函數(shù)類型默認(rèn)為int型?!究键c(diǎn)2】庫函數(shù)調(diào)用C語言標(biāo)準(zhǔn)庫函數(shù)時要包含include命令,include命令行以#開頭,后面是“”或<>括起來的后綴為”.h”的頭文件。以#開頭的一行稱為編譯預(yù)處理命令行,編譯預(yù)處理不是C語言語句,不加分號,不占運(yùn)行時間。【考點(diǎn)3】函數(shù)的返回值函數(shù)通過return語句返回一個值,返回的值類型與函數(shù)類型一樣。return語句只執(zhí)行一次,執(zhí)行完或函數(shù)體結(jié)

26、束后退出函數(shù)?!究键c(diǎn)4】函數(shù)的聲明函數(shù)要“先定義后調(diào)用”,或“先聲明再調(diào)用后定義”。函數(shù)的聲明一定要有函數(shù)名、函數(shù)返回值類型、函數(shù)參數(shù)類型,但不一定要有形參的名稱?!究键c(diǎn)5】函數(shù)的調(diào)用程序從上往下執(zhí)行,當(dāng)碰到函數(shù)名后,把值傳給調(diào)用函數(shù),當(dāng)程序得到了返回值或調(diào)用函數(shù)結(jié)束,再順序往下執(zhí)行?!究键c(diǎn)6】函數(shù)的參數(shù)及值傳遞形式參數(shù)簡稱形參,是定義函數(shù)時函數(shù)名后面括號中的參數(shù)。實在參數(shù)簡稱實參,是調(diào)用函數(shù)時函數(shù)名后面括號中的參數(shù)。實參和形參分別占據(jù)不同的存儲單元。實參向形參單向傳遞數(shù)值。“傳值”與“傳址”的區(qū)別:傳數(shù)值的話,形參的變化不會改變實參的變化。傳地址的話,形參的變化就有可能改變實參所對應(yīng)的量。(

27、考試的重點(diǎn))函數(shù)的參數(shù),返回數(shù)值(示意圖):【考點(diǎn)7】函數(shù)的遞歸調(diào)用函數(shù)直接或間接地調(diào)用自己稱為函數(shù)的遞歸調(diào)用。遞歸調(diào)用必須有一個明確的結(jié)束遞歸的條件。在做遞歸題時可把遞歸的步驟一步步寫下來,不要弄顛倒了。【考點(diǎn)8】要求掌握的庫函數(shù)sqrt()算術(shù)平方根函數(shù),fabs()絕對值函數(shù),sin()正弦函數(shù),sin(3.14159/180*30);,pow()冪函數(shù),23是由pow(2,3)表示的?!究键c(diǎn)9】如何判斷a是否為質(zhì)數(shù):背誦這個程序! void iszhishu( int a ) for(i=2;i<a/2;i+) if(a%i=0) printf(“不是質(zhì)數(shù)”); printf(“

28、是質(zhì)數(shù)!”); 【考點(diǎn)10】如何求階層:n! 背誦這個程序! int fun(int n) int p=1; for(i=1;i<=n;i+) p=p*i; return p; 【考點(diǎn)11】函數(shù)的參數(shù)可以是常量,變量,表達(dá)式,甚至是函數(shù)調(diào)用。 add(int x,int y)return x+y; main() int sum; sum=add(add(7,8),9);請問sum的結(jié)果是多少? 結(jié)果為24 【考點(diǎn)12】一定要注意參數(shù)之間的傳遞,實參和形參之間 傳數(shù)值,和傳地址的差別。(考試的重點(diǎn)) 傳數(shù)值的話,形參的變化不會改變實參的變化。 傳地址的話,形參的變化就會有可能改變實參的變化

29、。【考點(diǎn)13】函數(shù)聲明的考查: 一定要有:函數(shù)名,函數(shù)的返回類型,函數(shù)的參數(shù)類型。不一定要有:形參的名稱。 填空題也可能會考到!以下是終極難度的考題。int *fun(int a , int b) . 已經(jīng)知道函數(shù)是這樣。橫線上這個函數(shù)的正確的函數(shù)聲明怎么寫? int *fun(int *a , int *b) 這里是函數(shù)聲明的寫法,注意數(shù)組就是指針 int *fun(int a , int b) 這種寫法也是正確的 int *fun(int b , int c) 這種寫法也是正確的,參數(shù)的名稱可以隨便寫 int *fun(int * , int *) 這種寫法也是正確的,參數(shù)的名稱可以不寫第

30、六章 指針【考點(diǎn)1】指針變量指針變量是用來存儲地址的,而一般變量是存儲數(shù)值的。指針變量可指向任意一種數(shù)據(jù)類型,但不管它指向的數(shù)據(jù)占用多少字節(jié),一個指針變量占用四個字節(jié)?!究键c(diǎn)2】指針變量的定義格式為:類型名 *指針變量名。二維指針int *p;可以理解為基類型為(int *)類型?!究键c(diǎn)3】指針變量的初始化指針變量在使用前必須要初始化,把一個具體的地址賦給它,否則引用時會有副作用,如果不指向任何數(shù)據(jù)就賦“空值”NULL。指針變量兩種初始化方法一:int a=2,*p=&a;(定義的同時初始化)方法二:int a=2,*p; (定義之后初始化)p=&a;【考點(diǎn)4】指針變量的引用&

31、amp;是取地址符,*是間接訪問運(yùn)算符,它們是互逆的兩個運(yùn)算符。在指針變量名前加間接訪問運(yùn)算符就等價它所指向的量。【考點(diǎn)5】指針的運(yùn)算int *p 中 *p 和p 的差別:*p 可以當(dāng)做變量來用;*的作用是取后面地址p 里面的數(shù)值p 是當(dāng)作地址來使用。*p+ 和(*p)+的之間的差別:改錯題目中很重要*p+是地址會變化。(*p)+ 是數(shù)值會要變化。三名主義:(考試的重點(diǎn))數(shù)組名:表示第一個元素的地址。數(shù)組名不可以自加,他是地址常量名。(考了很多次)函數(shù)名:表示該函數(shù)的入口地址。字符串常量名:表示第一個字符的地址??荚囍匾脑捳Z:指針變量是存放地址的。并且指向哪個就等價哪個,所有出現(xiàn)*p 的地方

32、都可以用它等價的代替指向的變量。例如:int a=2,*p=&a;*p=*p+2;(由于*p 指向變量,所以指向哪個就等價哪個,這里*p 等價于,可以相當(dāng)于是a=a+2)【考點(diǎn)6】指針變量的本質(zhì)是用來放地址,而一般的變量是放數(shù)值的。 1、int *p 中 *p和p的差別:簡單說*p是數(shù)值,p是地址! *p可以當(dāng)做變量來用;*的作用是取后面地址p里面的數(shù)值 p是當(dāng)作地址來使用??梢杂迷趕canf函數(shù)中:scanf(“%d”,p); 2、*p+ 和 (*p)+的之間的差別:改錯題目中很重要!考試超級重點(diǎn) *p+是 地址會變化。 口訣:取當(dāng)前值,然后再移動地址! (*p)+ 是數(shù)值會要變化。

33、 口訣:取當(dāng)前值,然后再使數(shù)值增加1。 例題:int *p,a=1,3,5,7,9; p=a; 請問*p+和(*p)+的數(shù)值分別為多少? *p+: 這個本身的數(shù)值為1。由于是地址會增加一,所以指針指向數(shù)值3了。 (*p)+ :這個本身的數(shù)值為1。由于有個+表示數(shù)值會增加,指針不移動,但數(shù)值1由 于自加了一次變成了2。 3二級指針:*p:一級指針:存放變量的地址。*q:二級指針:存放一級指針的地址。 ??碱}目: int x=7; int*p=&x,*q=&p; 問你:*p為多少?*q為多少?*q為多少? 7 p 7 再問你:*q=&x的寫法可以嗎? 不可以,因為二級指針只

34、能存放一級指針的地址。4、移動指針(經(jīng)常加入到考試中其他題目綜合考試)char *s=“meikanshu” while(*s)printf(“%c”,*s);s+; 這個s首先會指向第一個字母m然后通過循環(huán)會一次打印出一個字符,s+是地址移動,打印了一個字母后,就會移動到下一個字母!5、傳數(shù)值和傳地址(每年必考好多題目) void fun(int a,int b) void fun(int *a,int *b) int t ; int t ;t=a;a=b;b=t; t=*a;*a=*b;*b=t;main() main() main() int x=1,y=3, int x=1,y=3,f

35、un(x,y); fun(&x,&y)printf(“%d,%d”,x,y); printf(“%d,%d”,x,y); 這個題目答案是1和3。 這個題目的答案就是3和1。 傳數(shù)值,fun是用變量接受,所以fun中 傳地址,fun用指針接受!這個時候fun 的交換不會影響到main中的x和y 。 中的交換,就會影響到main中的x和y。 傳數(shù)值,形參的變化不會影響實參。 傳地址形參的變化絕大多數(shù)會影響到實參!6.函數(shù)返回值是地址,一定注意這個*號(上機(jī)考試重點(diǎn)) int *fun(int *a,int *b) 可以發(fā)現(xiàn)函數(shù)前面有個*,這個就說明函數(shù)運(yùn)算結(jié)果是地址 if(*a&g

36、t;*b)return a; return a 可以知道返回的是a地址。 else returnb; main() int x=7,y=8,*max; max = fun(&x,&y); 由于fun(&x,&y)的運(yùn)算結(jié)果是地址,所以用max來接收。 printf(“%d,%d”,) 6.考試重要的話語: 指針變量是存放地址的。并且指向哪個就等價哪個,所有出現(xiàn)*p的地方都可以用它等價的代替。例如:int a=2,*p=&a; *p=*p+2; (由于*p指向變量,所以指向哪個就等價哪個,這里*p等價于,可以相當(dāng)于是a=a+2)第七章 數(shù)組【考點(diǎn)1】數(shù)組的

37、定義數(shù)組是一組具有相同類型的數(shù)據(jù)的集合,這些數(shù)據(jù)稱為數(shù)組元素。格式為:類型名 數(shù)組名常量表達(dá)式。int a10; 說明整型數(shù)組 a,有10 個元素。不能在方括號中用變量來表示元素的個數(shù), 但是可以是符號常數(shù)或常量表達(dá)式。數(shù)組的所占字節(jié)數(shù)為元素個數(shù)與基類型所占字節(jié)數(shù)的乘積?!究键c(diǎn)2】數(shù)組的初始化1.一維數(shù)組的初始化: int a5=1,2,3,4,5; 合法 int a5=1,2,3, ; 合法 int a=1,2,3,4,5; 合法,??迹竺鏇Q定前面的大??! int a5=1,2,3,4,5,6; 不合法,賦值的個數(shù)多余數(shù)組的個數(shù)了 2、一維數(shù)組的定義:int a5;注意這個地方有一個重要考

38、點(diǎn),定義時數(shù)組的個數(shù)不是變量一定是常量。 int a5 合法,最正常的數(shù)組 int a1+1 合法,個數(shù)是常量2,是個算術(shù)表達(dá)式 int a1/2+4 合法,同樣是算術(shù)表達(dá)式 int x=5,int ax; 不合法,因為個數(shù)是x,是個變量,非法的,define P 5 int aP 合法,define 后的的P是符號常量,只是長得像變量3.二維數(shù)組的初始化:第一維長度可以不寫,其它維必須寫。int a=1,2;合法,int a3=2,3,4;合法,int a2=2,3,4;非法。數(shù)組初始化元素值默認(rèn)為0,沒有初始化元素值為隨機(jī)。如在int a5=0,1,2;中,元素a4值為0;而在int a5

39、;中,元素a4值為一個不確定的隨機(jī)數(shù)。補(bǔ)充: 1)一維數(shù)組的重要概念: 對a10這個數(shù)組的討論。 、a表示數(shù)組名,是第一個元素的地址,也就是元素a0的地址。(等價于&a) 、a是地址常量,所以只要出現(xiàn)a+,或者是a=a+2賦值的都是錯誤的。 、a是一維數(shù)組名,所以它是列指針,也就是說a+1是跳一列。 對a33的討論、 a表示數(shù)組名,是第一個元素的地址,也就是元素a00的地址。 、a是地址常量,所以只要出現(xiàn)a+,或者是a=a+2賦值的都是錯誤的。 、a是二維數(shù)組名,所以它是行指針,也就是說a+1是跳一行。、a0、a1、a2也都是地址常量,不可以對它進(jìn)行賦值操作,同時它們都是列指針,a0+

40、1,a1+1,a2+1都是跳一列。 、注意a和a0 、a1、a2是不同的,它們的基類型是不同的。前者是一行元素,后三者是一列元素?!究键c(diǎn)3】元素的引用數(shù)組元素的下標(biāo)從0開始,到數(shù)組長度減1結(jié)束。所以int a5;中數(shù)組最后一個元素是a4。要把數(shù)組元素看作一個整體,可以把a(bǔ)4當(dāng)作一個整型變量。【考點(diǎn)4】二維數(shù)組數(shù)組a23=1,2,3,4,5,6;中含6個元素,有2行3列。第一行為a0行,第2行為a1行,a0、a1叫行首地址,是地址常量。*(a0+1)是第一行第一個元素往后跳一列,即元素a01值為2,*(a0+3)是第一行第一個元素往后跳三個,即元素a10值為4?!究键c(diǎn)5】行指針是一個指針變量,占

41、四個字節(jié),行指針指向一行連續(xù)數(shù)據(jù),形式為:int(*p)2;,p只能存放含有兩個整型元素的一維數(shù)組的首地址。注意(*p)兩邊的小括號不能省略,否則就成了指針數(shù)組,是若干指針元素的集合?!究键c(diǎn)6】數(shù)組名數(shù)組名是數(shù)組的首地址。數(shù)組名不能單獨(dú)引用,不能通過一個數(shù)組名代表全部元素。數(shù)組名是地址常量,不能對數(shù)組名賦值,所以a+是錯誤的。但數(shù)組名可以作為地址與一個整數(shù)相加得到一個新地址。char c10; scanf("%s",c);不能加&,在執(zhí)行函數(shù) printf("%s",c) 時,按數(shù)組名c 找到首地址,然后逐個輸出數(shù)組中各個字符直到遇到字符串終止標(biāo)

42、志'0'為止。【考點(diǎn)7】元素形式的轉(zhuǎn)換助記:“脫衣服法則”a2變成*(a+2),a23變成*(a+2)3再可變成*(*(a+2)+3)。這個思想很重要!二維數(shù)組做題目的技巧:如果有 a33=1,2,3,4,5,6,7,8,9這樣的題目。步驟一:把他們寫成: 第一列 第二列 第三列a0􀃆 1 2 3 >第一行a1􀃆 4 5 6 >第二行a2􀃆 7 8 9 >第三行步驟二:這樣作題目間很簡單:*(a0+1)我們就知道是第一行的第一個元素往后面跳一列,那么這里就是a01元素,所以是2。*(a1+2)我們就知道是第

43、二行的第一個元素往后面跳二列。那么這里就是a12元素,所以是 6。一定記?。褐灰嵌S數(shù)組的題目,一定是寫成如上的格式,再去做題目,這樣會比較簡單。兩種重要的數(shù)組長度:char a=“a”,“b”,“c”; 數(shù)組長度為,字符串長度不定。sizeof(a)為。char a5= “a”,“b”,“c” 數(shù)組長度為,字符串長度。sizeof(a)為。第八章 字符串【考點(diǎn)1】字符串常量及表示字符串常量是由雙引號括起來的一串字符,如”ABC”。在存儲字符串時,系統(tǒng)會自動在其尾部加上一個空值0,空值也要占用一個字節(jié),也就是字符串”ABC”需要占四個字節(jié)?!究键c(diǎn)2】字符數(shù)組C語言沒有字符串變量,只能采用字符

44、數(shù)組來存儲字符串。數(shù)組的大小應(yīng)該比它將要實際存放的最長字符串多一個元素,從而存放0?!究键c(diǎn)3】字符串賦值字符串賦值的兩種形式:char str=“Hello!”;或char *p;p=“Hello!”;,但不能用下面的形式:char str10;str=”Hello”;因為str是一個地址常量,不能進(jìn)行賦值操作?!究键c(diǎn)4】字符串的輸入與輸出可以用scanf和printf函數(shù),如scanf(”%s”,str);,也可用專門處理字符串的兩個函數(shù)gets和puts函數(shù),還可以對字符數(shù)組逐個元素進(jìn)行賦值,但一定要在最后賦一個0。使用gets函數(shù)可以接收空格,使用puts函數(shù)在最后輸出一個換行。scan

45、f 和 gets 的數(shù)據(jù):如果輸入的是 good good study!那么 scanf(“%s”,a); 只會接收 good. 考點(diǎn):不可以接收空格。gets(a); 會接收 good good study! 考點(diǎn):可以接收空格?!究键c(diǎn)5】字符串函數(shù)要掌握的四個字符串函數(shù):1.字符串拷貝函數(shù)strcpy(),格式: strcpy (字符數(shù)組名 1,字符數(shù)組名 2)功能: 把字符數(shù)組 2中的字符串拷貝到字符數(shù)組 1 中。串結(jié)束標(biāo)志“0”也一同拷貝。字符數(shù)名 2,也可以是一個字符串常量。這時相當(dāng)于把一個字符串賦予一個字符數(shù)組。2.字符串長度函數(shù)strlen(),格式: strlen(字符數(shù)組名)

46、功能:測字符串的實際長度(不含字符串結(jié)束標(biāo)志0) 并作為函數(shù)返回值。3.字符串鏈接函數(shù)strcat(),格式: strcat (字符數(shù)組名 1,字符數(shù)組名 2)功能:把字符數(shù)組 2中的字符串連接到字符數(shù)組 1 中字符串的后面,并刪去字符串1 后的串標(biāo)志“0”。4.字符串比較函數(shù)strcmp(),格式: strcmp(字符數(shù)組名 1,字符數(shù)組名 2)功能:按照 ASCII 碼順序比較兩個數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果。字符串 1字符串 2,返回值0;字符串 1字符串 2,返回值0;字符串 1字符串 2,返回值0。本函數(shù)也可用于比較兩個字符串常量,或比較數(shù)組和字符串常量。由 ASCII

47、 碼可知“dBASE”大于“C Language”故 返回值0,d=100>C=67使用這些函數(shù)需在預(yù)處理部分包含頭文件”string.h”。字符串長度要小于字符數(shù)組的長度,例:char str10=”Hello”;sizeof(str)的值為10(數(shù)組長度),strlen(str)的值為5(字符串長度)。這些函數(shù)是考試常用到的函數(shù),大家一定要熟練應(yīng)用這幾個函數(shù)。第九章 文件【考點(diǎn)1】文件類型指針文件指針是一個指向結(jié)構(gòu)體類型的指針,定義格式為:FILE *指針變量名。在使用文件時,都需要先定義文件指針。【考點(diǎn)2】文本文件與二進(jìn)制文件文本形式存放的是字符的ASCII碼,二進(jìn)制形式存放的是數(shù)

48、據(jù)的二進(jìn)制。例如“100”如果是文本形式就是存儲1、 0、 0三個字符的ASCII碼(00110001 00110000 00110000),如果是二進(jìn)制形式就把100轉(zhuǎn)化成二進(jìn)制(01100100)?!究键c(diǎn)3】打開文件文件的打開形式:FILE *fp; fp=fopen(“c:lab.c”,”rb”);。fopen函數(shù)的前面一部分為文件名,后面一部分為文件的使用方式。打開方式見教材第116頁,其中r代表讀,w代表寫,a代表添加,b代表二進(jìn)制位的文件,t表示文本文件?!究键c(diǎn)4】文件函數(shù)1.判斷文件結(jié)束feof函數(shù),feof函數(shù)的作用是檢查文件是否結(jié)束,當(dāng)結(jié)束時返回的值為非零,否則為零。2.移動

49、文件指針位置fseek函數(shù),fseek 函數(shù)用來移動文件內(nèi)部位置指針,其調(diào)用形式為:fseek(文件指針,位移量,起始點(diǎn));其中:“文件指針”指向被移動的文件?!拔灰屏俊北硎疽苿拥淖止?jié)數(shù),要求位移量是 long 型數(shù)據(jù),以便在文件長度大于 64KB 時不會出錯。當(dāng)用常量表示位移量時,要求加后綴“L”。“起始點(diǎn)”表示從何處開始計算位移量,規(guī)定的起始點(diǎn)有三種:文件首,當(dāng)前位置和文件尾。其表示方法如下表。起始點(diǎn) 表示符號 數(shù)字表示文件首 SEEK_SET 0當(dāng)前位置 SEEK_CUR 1文件末尾 SEEK_END 2例如:fseek(fp,100L,0);其意義是把位置指針移到離文件首 100 個字

50、節(jié)處。還要說明的是 fseek 函數(shù)一般用于二進(jìn)制文件。3.獲得文件位置ftell函數(shù),ftell(文件指針);4.文件位置移到開頭rewind函數(shù),rewind(文件指針);它的功能是把文件內(nèi)部的位置指針移到文件首。5.文件字符輸入輸出fgetc函數(shù)和fputc函數(shù),fgetc 函數(shù)的功能是從指定的文件中讀一個字符,函數(shù)調(diào)用的形式為:字符變量=fgetc(文件指針);例如:ch=fgetc(fp);其意義是從打開的文件 fp 中讀取一個字符并送入 ch 中。fputc 函數(shù)的功能是把一個字符寫入指定的文件中,函數(shù)調(diào)用的形式為:fputc(字符量,文件指針);其中,待寫入的字符量可以是字符常量或變量,例如:fputc('a',fp);其意義是把字符 a 寫入fp 所指向的文件中。6.文件輸入輸出fscanf函數(shù)和fprintf函數(shù),這兩個函數(shù)的調(diào)用格式為:fscanf(文件指針,格式字符串,輸入表列);fprintf(文件指針,格式字符串,輸出表列);例如:fscanf(fp,"%d%s",&i,s);fprintf(fp,"%d%c",j,ch);7.文件字符串輸入輸出fgets函數(shù)和fputs函數(shù),函數(shù)的功能是從指定的文件中讀一個字符串到字符數(shù)組中,函數(shù)調(diào)用的形式為:fge

溫馨提示

  • 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

提交評論