




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、PAGE PAGE 33C語(yǔ)言最重要的知識(shí)點(diǎn)復(fù)習(xí)資料!總體上必須清楚的:1)程序結(jié)構(gòu)是三種: 順序結(jié)構(gòu) , 循環(huán)結(jié)構(gòu)(三個(gè)循環(huán)結(jié)構(gòu)), 選擇結(jié)構(gòu)(if 和 switch)2)讀程序都要從main()入口, 然后從最上面順序往下讀(碰到循環(huán)做循環(huán),碰到選擇做選擇)。3)計(jì)算機(jī)的數(shù)據(jù)在電腦中保存是以二進(jìn)制的形式. 數(shù)據(jù)存放的位置就是它的地址.4)bit是位,是指為0或者1。 byte 是指字節(jié), 一個(gè)字節(jié) = 八個(gè)位.5) 一定要記住 二進(jìn)制 如何劃成 十進(jìn)制。概念??嫉降模?、編譯預(yù)處理不是C語(yǔ)言的一部分,不再運(yùn)行時(shí)間,占編譯時(shí)間。C語(yǔ)言編譯的程序稱為源程序,它以ASCII數(shù)值存放在文本文件中。、
2、每個(gè)C語(yǔ)言程序中main 函數(shù)是有且只有一個(gè)。、在函數(shù)中不可以再定義函數(shù)。、算法的是一定要有輸出的,他可以沒(méi)有輸入。、break可用于循環(huán)結(jié)構(gòu)和switch語(yǔ)句,continue只用于循環(huán)。、逗號(hào)運(yùn)算符的級(jí)別最低。第一、二章 C語(yǔ)言基礎(chǔ)及簡(jiǎn)單程序設(shè)計(jì)c語(yǔ)言由什么構(gòu)成;(函數(shù):一個(gè)C語(yǔ)言程序由一個(gè)至多個(gè)函數(shù)組成,)main()是主函數(shù),該函數(shù)既是入口又是出口(一個(gè)入口,一個(gè)出口)數(shù)據(jù)類型:基本數(shù)據(jù)類型(整型,字符,實(shí)型, 枚舉型),占用內(nèi)存的字節(jié)數(shù),表示范圍常量:123,0101(沒(méi)有8和9), 0 x41, 1,-2.30, -1.2E+5在一個(gè)字節(jié)內(nèi),字符通整型,整型通字符合法的用戶標(biāo)識(shí)符考
3、查:合法的要求是由字母,數(shù)字,下劃線組成,并且第一個(gè)必須為字母或則是下劃線。關(guān)鍵字不可以作為用戶標(biāo)識(shí)符號(hào)。main define scanf printf 都不是關(guān)鍵字。迷惑你的地方If是可以做為用戶標(biāo)識(shí)符。因?yàn)镮f中的第一個(gè)字母大寫了,所以不是關(guān)鍵字。實(shí)型數(shù)據(jù)的合法形式:考試口訣:e前e后必有數(shù),e后必為整數(shù)。.2.333e-1 就是合法的,且數(shù)據(jù)是2.33310-1。字符和字符串?dāng)?shù)據(jù)的合法形式:: 1 是字符占一個(gè)字節(jié),1是字符串占兩個(gè)字節(jié)(含有一個(gè)結(jié)束符號(hào))。0 的ASCII數(shù)值表示為48,a 的ASCII數(shù)值是97,A的ASCII數(shù)值是65。轉(zhuǎn)義字符的考查(p28):轉(zhuǎn)義符: n, 0
4、, ddd, xdd等強(qiáng)制類型轉(zhuǎn)換: 一定是 (int)a 不是 int(a),注意類型上一定有括號(hào)的。 注意(int)(a+b)和(int)a+b 的區(qū)別。 前是把a(bǔ)+b轉(zhuǎn)型,后是把a(bǔ)轉(zhuǎn)型再加b。 自加、自減表達(dá)式:假設(shè)a=5,+a(是為6), a+(為5);運(yùn)行的機(jī)理:+a 是先把變量的數(shù)值加上1,然后把得到的數(shù)值放到變量a中,然后再用這個(gè)+a表達(dá)式的數(shù)值為6,而a+是先用該表達(dá)式的數(shù)值為5,然后再把a(bǔ)的數(shù)值加上1為6,再放到變量a中。 進(jìn)行了+a和a+后在下面的程序中再用到a的話都是變量a中的6了??荚嚳谠E:+在前先加后用,+在后先用后加。逗號(hào)表達(dá)式:優(yōu)先級(jí)別最低 ;表達(dá)式的數(shù)值逗號(hào)最右
5、邊的那個(gè)表達(dá)式的數(shù)值。如(2,3,4)的表達(dá)式的數(shù)值就是4。位運(yùn)算的考查:口訣:先轉(zhuǎn)二進(jìn)制再運(yùn)算總的處理方法:(先把十進(jìn)制變成二進(jìn)制再變成十進(jìn)制)。例1:char a = 6, b;b = a2; 這種題目的計(jì)算是先要把a(bǔ)的十進(jìn)制6化成二進(jìn)制,再做位運(yùn)算。例2:在沒(méi)有舍去數(shù)據(jù)的時(shí)候,右移一位表示除以2。% 符號(hào)兩邊要求是整數(shù)。不是整數(shù)就錯(cuò)了。變量:變量的命名規(guī)則滿足標(biāo)識(shí)符的命名規(guī)則,區(qū)分大小寫,關(guān)鍵字(p7)除外,變量的定義一般都要放在函數(shù)或程序的開頭位置(即先定義后使用)分號(hào): 表示一個(gè)語(yǔ)句結(jié)束變量的定義: 類型名 變量名列表; (不同的類型要寫成兩句), 定義的時(shí)候給值成為變量的初始化,初
6、始化的時(shí)候不能連等(如 int a=b=c=1;是錯(cuò)的! int a,b,c; a=b=c=1;是對(duì)的)。變量的賦值: 變量名=表達(dá)式 或 變量名復(fù)合賦值運(yùn)算符表達(dá)式 (復(fù)合賦值運(yùn)算符:+=,*=,=,.), 如: xyz+2=c行嗎?不行(賦值表達(dá)式左邊只能是變量)!賦值的時(shí)候可以連等。輸入一個(gè)字符: x=getchar(), putchar(x), 有這兩個(gè)函數(shù)及FILE時(shí)一定要加上#include /標(biāo)準(zhǔn)輸入輸出的頭文件包含getch(), 表示暫停程序運(yùn)行,可直接查看結(jié)果,否則運(yùn)行完后不顯示結(jié)果(需按ALT+F5)。printf(xxxxxxxxxxxxxxx); 或 printf(格
7、式控制符, 變量列表);變量列表不加&scanf(格式控制符, 地址列表), 地址列表可為數(shù)組名、指針變量名及普通變量名(普通變量名前要加加&)。printf(%m.nf, 32.6789)scanf的格式控制符中,除了逗號(hào),一般不加其他字符;一定要記住,有逗號(hào)時(shí)輸入要加逗號(hào), 否則:數(shù)據(jù)用空格隔開,字符連著輸入; 沒(méi)有%m.nf的寫法, 只有%mf的寫法,float型用%f, double型用%lf, long double用%Lf不同類型的數(shù)值型數(shù)據(jù)進(jìn)行混合運(yùn)算不同類型的數(shù)值型數(shù)據(jù)進(jìn)行混合運(yùn)算時(shí), 先要把低數(shù)據(jù)類型向高數(shù)據(jù)類型轉(zhuǎn)換, 成為同一類型后才進(jìn)行運(yùn)算。橫向箭頭表示必須進(jìn)行的轉(zhuǎn)換。逗
8、號(hào)運(yùn)算符是最低的運(yùn)算符常量不能+、-;例:b=(a=1,a+,a+), 又例:b=(a=2)+(a=3),又例:a=1;b=(+a)+(+a) =與=的區(qū)別(賦值和等號(hào))在C語(yǔ)言中,對(duì)于邏輯運(yùn)算,非零的數(shù)(不管實(shí)數(shù)還是整數(shù))都認(rèn)為是真的,真的就是1,假的就是0;關(guān)系運(yùn)算的結(jié)果是邏輯值(真為1假為0)。運(yùn)算符:運(yùn)算符的優(yōu)先序(p246):成單算移關(guān)于,異或邏條賦逗。運(yùn)算符的結(jié)合性(p246):條件、單目、賦值運(yùn)算符。(printf輸出也是自右而左運(yùn)算) 所有運(yùn)算符成員運(yùn)算:(), ,-,結(jié)構(gòu)體成員.) 單目運(yùn)算:(!,-,+,-,取值*,取址&,位取反) 算術(shù)運(yùn)算:(*,/,%)級(jí)別高于(+,-
9、) 位移運(yùn)算:() 關(guān)系運(yùn)算:(,=,=)級(jí)別高于(=,!=) 位與運(yùn)算:(&) 位異或運(yùn)算:() 位或運(yùn)算:(|) 邏輯運(yùn)算:(&)級(jí)別高于(|) 條件運(yùn)算:(? :) 賦值算:(=,+=, . ,=,&=,|=,=) 逗號(hào)運(yùn)算:(,)例如.以下程序的運(yùn)行結(jié)果是struct st int n; float x;*p;void main() struct st arr3=10,5.6,12,7.1,14,6.7; p=arr; printf(“%d n”,+p-n);p+; printf(“%d,%.2f n”,p-n,p-x);A) 12 B) 11 C) 11 D)12 12,7.10 1
10、0,5.60 12,7.10 14,6.70第三、四章 選擇和循環(huán)結(jié)構(gòu)C程序一般采用自頂向下的編寫格式, 模塊化(函數(shù))C程序結(jié)構(gòu)有三種: 順序, 選擇(分支), 循環(huán) : 用在函數(shù), 或復(fù)合語(yǔ)句分支結(jié)構(gòu)(或選擇結(jié)構(gòu))if結(jié)構(gòu)和switch結(jié)構(gòu)if分支結(jié)構(gòu)單分支: if(表達(dá)式) 語(yǔ)句;或if(表達(dá)式) 語(yǔ)句組雙分支: if(表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2;多分支if: if(表達(dá)式1) 語(yǔ)句1; else if(表達(dá)式2) 語(yǔ)句2; . else if(表達(dá)式n-1) 語(yǔ)句n-1; else 語(yǔ)句n;多分支switch: switch(x) case x1: 語(yǔ)句1;break; .
11、case xn: 語(yǔ)句n; break; default: 語(yǔ)句; break; 例:main() int c; while(c=getchar()!= n) switch(c-2) case 0 : case 1 : putchar(c+4); case 2 : putchar(c+4); break; case 3 : putchar(c+3); default: putchar(c+2); break; printf(n);當(dāng)輸入:247,程序的輸出結(jié)果是( )。 (A) 689 (B) 6689 (C) 66778 (D) 66887switch總結(jié):其語(yǔ)義是:先計(jì)算出表達(dá)式的值,用此
12、值與哪個(gè)case后的常量表達(dá)式的值相一致,則執(zhí)行那個(gè)case后的語(yǔ)句組,如果語(yǔ)句組后有break語(yǔ)句則直接退出switch結(jié)構(gòu),如語(yǔ)句組執(zhí)行后沒(méi)有break語(yǔ)句則繼續(xù)執(zhí)行后續(xù)case后的語(yǔ)句組,直到遇到break語(yǔ)句退出switch結(jié)構(gòu),如沒(méi)有break語(yǔ)句則會(huì)執(zhí)行后續(xù)所有case或default后的語(yǔ)句組再退出switch結(jié)構(gòu)。若計(jì)算出表達(dá)式的值與case后的所有常量表達(dá)式的值都不同則只執(zhí)行default及之后的語(yǔ)句組一直執(zhí)行到最后(若遇break則終止退出switch結(jié)構(gòu)),如沒(méi)有default語(yǔ)句則直接退出switch結(jié)構(gòu)。循環(huán)語(yǔ)句: (1) for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3)
13、或 for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 循環(huán)體語(yǔ)句組; 循環(huán)體語(yǔ)句; . break; /*用于結(jié)束當(dāng)層循環(huán),跳到當(dāng)層循環(huán)后面的語(yǔ)句。*/ . continue; /*用于結(jié)束當(dāng)次循環(huán),跳過(guò)當(dāng)次循環(huán)后面的語(yǔ)句,進(jìn)入下次循環(huán)。*/ . (2) while(表達(dá)式) while(表達(dá)式) 循環(huán)體語(yǔ)句組; 循環(huán)體語(yǔ)句; . break; . continue; . (3) do 循環(huán)體語(yǔ)句組; . break; . continue; . while(表達(dá)式);例: for (i=1; i=10; i+) for (i=1; i=10; i+) if ( i%2=0 ) break; if
14、( i%2=0 ) continue; printf(“%d”, i); printf(“%d”, i); 循環(huán)嵌套: 從外循環(huán)進(jìn)來(lái),內(nèi)循環(huán)結(jié)束后,再到外循環(huán),如此反復(fù),直到外循環(huán)結(jié)束) x=0; 或 x=0; for(i=1; i=2; i+) for(i=1; i=2; i+) for(j=1; j=i; j+) j=1; x+=i*j; while(j=i) x+=i*j; j+; break可用于switch和循環(huán)語(yǔ)句, 一個(gè)break只退出一層; 而continue只對(duì)循環(huán)有效 記住:質(zhì)數(shù)的判斷,斐波那契數(shù)列, 輾轉(zhuǎn)相除法,求數(shù)列的和(有正符號(hào)如何處理?置標(biāo)志位)循環(huán)總結(jié):for 循
15、環(huán)與 while 循環(huán)類似,屬于先判斷后執(zhí)行; do while,屬于先執(zhí)行后判斷for 語(yǔ)句中有三個(gè)表達(dá)式:表達(dá)式1通常用來(lái)給循環(huán)變量賦初值;表達(dá)式2通常是循環(huán)條件;表達(dá)式3用來(lái)更新循環(huán)變量的值for 語(yǔ)句中的各個(gè)表達(dá)式都可以省略,但要注意分號(hào)分隔符不能省略如果省略表達(dá)式2和表達(dá)式3需要在循環(huán)體內(nèi)設(shè)法結(jié)束循環(huán),否則會(huì)導(dǎo)致死循環(huán)break 語(yǔ)句用在循環(huán)中時(shí),可以直接終止當(dāng)前循環(huán),將控制轉(zhuǎn)向循環(huán)后面的語(yǔ)句continue 語(yǔ)句的作用是跳過(guò)循環(huán)體中剩余的語(yǔ)句而執(zhí)行下一次循環(huán)嵌套循環(huán)時(shí),必須將被嵌套的循環(huán)語(yǔ)句完整地包含在外層循環(huán)的循環(huán)體內(nèi)第五章 函數(shù)系統(tǒng)函數(shù):數(shù)學(xué)類函數(shù)(math.h),輸入輸出函數(shù)
16、(stdio.h),字符串類函數(shù)(string.h)自定義函數(shù):格式類型名 函數(shù)名(形式參數(shù)列表) 函數(shù)體 不寫函數(shù)類型名默認(rèn)為整型如果函數(shù)類型名為void表示無(wú)返回值函數(shù)(不寫return)聲明如果調(diào)用函數(shù)寫在被調(diào)函數(shù)之前,且被調(diào)函數(shù)類型名不是整型(或字符型),則在調(diào)用函數(shù)中或調(diào)用函數(shù)之前應(yīng)該先聲明,如何聲明?聲明: 類型名 函數(shù)名(形式參數(shù)列表);函數(shù)的遞歸:直接或者間接調(diào)用自身。(如階乘)全局變量:在函數(shù)外定義的變量,如果定義時(shí)沒(méi)給值,默認(rèn)為0局部變量:在函數(shù)內(nèi)定義的變量、形式參數(shù)、復(fù)合語(yǔ)句中定義的變量,如果沒(méi)給具體的值,該值不確定對(duì)于全局變量和局部變量主要觀察在函數(shù)中是否被重新定義,若
17、全局變量和局部變量同名,則自動(dòng)屏蔽掉全局變量。函數(shù)調(diào)用時(shí),實(shí)參向形參傳遞:(1) 按值傳遞:形參的變化不會(huì)改變實(shí)參的變化。(若有返回值將值帶回,否則帶回控制流,函數(shù)的返回值類型與函數(shù)類型一致);(2) 按地址傳遞:形參的變化就會(huì)有可能改變實(shí)參的變化。(3) 數(shù)組傳遞,通常就把數(shù)組名及數(shù)組元素傳過(guò)去如果一個(gè)函數(shù)名為:fun(x),嚴(yán)禁出現(xiàn):fun(x)=, 不管遞歸與否(滿足標(biāo)識(shí)符命名)return y; 或return (y);不要寫成 return y1, y2;靜態(tài)變量: static int x; (1) 沒(méi)給值,默認(rèn)為0; (2) 始終占用內(nèi)存,其值會(huì)保留下來(lái)(即賦值一次,不再重新賦值
18、,保留上次運(yùn)行結(jié)果) 靜態(tài)變量舉例 eg:以下程序的運(yùn)行結(jié)果是( C )。fun3(int x) main() static int a=3; int k=2,m=1,n; a+=x; n=fun3(k); return a; n=fun3(m); printf(%dn,n); A、3 B、4 C、6 D、9 宏定義:#define 標(biāo)識(shí)符 字符串,宏一定要先替換后計(jì)算分帶參和無(wú)參宏定義 無(wú)參宏定義 如#define P x*x /表示碰到P時(shí)用x*x替換帶參宏定義 如#define P(x) x*x /表示碰到P(x)時(shí)用x*x替換 無(wú)參宏定義舉例 若有定義:#define N 3+2,則表
19、達(dá)式N*2的值為( B )。A 、5 B、 7 C、10 D 、0解釋:N*2=3+2*2=3+4=7。 帶參宏定義舉例 以下程序運(yùn)行后輸出結(jié)果是( B ) 。#define MIN(m,n) mn?m:nmain() int a=3,b=5,c;c=2*MIN(a,b);printf(%d,c); A、3 B、5 C、6 D、10解釋:c=2*MIN(a,b)=2* ab?a:b2*35?3:5。第六章 數(shù)組一維數(shù)組的定義格式為:類型說(shuō)明符 數(shù)組名常量表達(dá)式;例如: int a10; 常量表達(dá)式可以是整型常量或字符常量或枚舉值或符號(hào)常量表達(dá)式(注意不能包含變量). 例如,下面這樣定義數(shù)組是不
20、行的:舉例: int n; scanf(“%d,&n); int an; int k,M=5, ak,bM; /* 不能用變量說(shuō)明數(shù)組大小*/ float a0;/* 數(shù)組大小為0沒(méi)有意義 */int b(2); /* 不能使用圓括號(hào) */數(shù)組元素下標(biāo)可以是整型常量、變量、變量或整型表達(dá)式。C語(yǔ)言規(guī)定,下標(biāo)的最小值是0,最大值則是數(shù)組大小減1 。eg:m8中,表示數(shù)組m有8個(gè)元素,下標(biāo)從0開始一直到7。這8個(gè)數(shù)組元素分別是:m0、 m1、 m2、 m3、 m4、 m5、 m6、 m7,注意沒(méi)有m8。對(duì)一維數(shù)組的初始化賦值(1)可以只給部分元素賦初值。沒(méi)有賦值的元素:對(duì)于數(shù)值型數(shù)組,自動(dòng)賦初值為
21、0;對(duì)字符型數(shù)組,自動(dòng)賦初值為空字符。(2)只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值。int m5=2,2,2,2,2; 不能寫成: int m5=2;(3)如果給全部元素賦值,則在數(shù)組說(shuō)明中,可以不給出數(shù)組元素的個(gè)數(shù),其長(zhǎng)度等于初值表中數(shù)組元素的個(gè)數(shù)。 int m=1,2,3,4,5;二維數(shù)組元素的引用 形式: 數(shù)組名下標(biāo)1下標(biāo)2;二維數(shù)組元素的初始化分行初始化:存儲(chǔ)類型符 數(shù)據(jù)類型 數(shù)組變量名行常量表達(dá)式列常量表達(dá)式 第0行初值表,第1行初值表,最后1行初值表;Eg:若有定義:int s34=1,2,0,3,4,5;則s21的值為( B )。 A. 3B. 4 C. 0 D. 1省略一維大小
22、:存儲(chǔ)類型符 數(shù)據(jù)類型 數(shù)組變量名行常量表達(dá)式列常量表達(dá)式 初值表 ; Eg:int a4=1,2,3,4,5,6,7,8,9,10,11,12; printf(%dn,a12);A. 2 B. 3C. 6D. 7字符數(shù)組的定義格式:char 數(shù)組名常量表達(dá)式;在c語(yǔ)言中,沒(méi)有專門的字符串變量,通常是用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串,由于字符串總是以0作為串的結(jié)束標(biāo)志,因此當(dāng)把一個(gè)字符串存入一個(gè)數(shù)組時(shí),也把結(jié)束符0存入數(shù)組,并以此作為該字符串結(jié)束的標(biāo)志C語(yǔ)言允許用字符串的方式對(duì)數(shù)組做初始化賦值。有兩種方式:(1)按單個(gè)字符的方式賦初值,其中必須有一個(gè)字符是字符串的結(jié)束標(biāo)記(但字符數(shù)組可以不包括0
23、) 。 如char s=1,2,3,0;(2)直接在初值表中寫一個(gè)字符串常量。如char s=“123”;可以省略 char s=1,2,3,0; char s=“123”; char s=“123”;設(shè)已定義char s =NameAddress023n;,則字符串所占的字節(jié)數(shù)是( B )。A.19 B. 16 C. 18 D. 14字符串的常用串函數(shù)strlen函數(shù)測(cè)試字符串長(zhǎng)度格式: strlen(字符數(shù)組); 功能:測(cè)試指定字符串的實(shí)際長(zhǎng)度(不含字符串結(jié)束標(biāo)志0),并返回字符串的長(zhǎng)度其中,函數(shù)的參數(shù)可以是字符型數(shù)組名或字符串常數(shù),函數(shù)的返回值是字符串的長(zhǎng)度。strlen得到的是有效字符
24、的個(gè)數(shù)(不包括0)sizeof得到的是整個(gè)數(shù)組的長(zhǎng)度(包括0)strcat函數(shù)字符串連接函數(shù)格式: strcat(字符數(shù)組1,字符數(shù)組 2); 功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,同時(shí)刪去字符串1的串標(biāo)志0,組成新的字符串。該函數(shù)返回值是字符數(shù)組1的首地址 strcmp函數(shù)字符串比較函數(shù)格式:strcmp(字符串1,字符串2);功能:字符串1和字符串2可以是字符型數(shù)組名或字符串常量。按照ASCII碼順序比較兩個(gè)數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果 strcpy函數(shù)字符串拷貝函數(shù)格式: strcpy(字符數(shù)組1,字符數(shù)組2);功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)
25、組1中。字符串結(jié)束標(biāo)志0也一同拷貝。字符數(shù)組2也可以是一個(gè)字符串常量,這時(shí)相當(dāng)于把一個(gè)字符串賦予一個(gè)字符數(shù)組 注意:字符數(shù)組1必須定義的足夠大,以便能容納被復(fù)制的字符串,字符數(shù)組1的長(zhǎng)度不應(yīng)該小于字符串2的長(zhǎng)度;字符數(shù)組1必須寫成數(shù)組名形式,字符數(shù)組2可以是字符數(shù)組名,也可以是一個(gè)字符串常量;有時(shí)只需要復(fù)制字符數(shù)組2中前面若干個(gè)字符,這些用strcpy函數(shù)也能實(shí)現(xiàn)。如:strcpy(m1,m2,3)表示將m2前面3個(gè)字符復(fù)制到m1中,從而取代m1中最前面的3個(gè)字符。冒泡排序、直接排序、交換排序楊輝三角、矩陣轉(zhuǎn)置(矩陣轉(zhuǎn)置只要循環(huán)一半就可以)。一維數(shù)組倒序存放、矩陣轉(zhuǎn)置只要循環(huán)一半就可以指針本章
26、主要內(nèi)容:指針的概念、定義和引用、指針與函數(shù)、指針與數(shù)組、指針與字符串、指針數(shù)據(jù)類型小結(jié) 指針變量的本質(zhì)是用來(lái)放地址,而一般的變量是放數(shù)值的。int *p 中 *p和p的差別:*p可以當(dāng)做變量來(lái)用;*的作用是取后面地址p指向的數(shù)值,p是當(dāng)作地址來(lái)使用。*p+ 和 (*p)+的之間的差別:改錯(cuò)題目中很重要*p+是 地址會(huì)變化;(*p)+ 是數(shù)值會(huì)要變化。指針變量的定義:一般形式為:類型符 *指針變量名;如:int *p; 指針變量的引用。兩種基本的指針運(yùn)算:&:取變量的地址* :指針運(yùn)算符(或稱“間接訪問(wèn)”運(yùn)算符)指針變量作函數(shù)參數(shù)例7.3 用函數(shù)實(shí)現(xiàn)兩個(gè)變量的交換void swap(int *
27、p1,int *p2)int *t;t=*p1;*p1=*p2;*p2=t;main()int a=5,b=9;swap(&a,&b);printf(“a=%d,b=%dn”,a,b); 指針函數(shù)(函數(shù)的返回值為指針)一般定義為:類型符 *函數(shù)名(參數(shù)表) HYPERLINK 9-4.txt例7.4 把兩個(gè)數(shù)中的最大值設(shè)為0int *max(int *q1,int *q2) return *q1 *q2 ? q1 : q2;main() int x=5,y=9,*p;p=max(&x,&y);*p=0;printf(x=%d,y=%dn,x,y); 函數(shù)指針(用一個(gè)指針變量存儲(chǔ)一個(gè)函數(shù)入口地址
28、,即指向函數(shù),這樣的指針?lè)Q函數(shù)指針)定義形式為:類型符 (*函數(shù)指針變量)(); 如:int (*p)(); 使函數(shù)指針指向一個(gè)函數(shù),一般的格式為:函數(shù)指針變量=函數(shù)名;如:p=max; 調(diào)用函數(shù)。一般格式為: (*函數(shù)指針)(實(shí)參表) 如:c=(*p)(a,b); HYPERLINK 9-5.txt 例7.5 通過(guò)函數(shù)指針調(diào)用函數(shù) int max(int x,int y)return xy?x:y;int min(int x,int y)return xy?x:y;main()int a=5,b=9,c,d;int (*p)(); /定義函數(shù)指針p=max; /指向函數(shù)c=(*p)(a,b)
29、; /調(diào)用函數(shù)p=min; d=(*p)(a,b);printf(“Max=%d ,Min=%dn”,c,d); 指針與數(shù)組的關(guān)系一個(gè)變量有地址,一個(gè)數(shù)組包含若干個(gè)數(shù)組元素,每個(gè)數(shù)組元素都在內(nèi)存中占用存儲(chǔ)單元,它們都有相應(yīng)的地址,這個(gè)地址就可以用指針來(lái)實(shí)現(xiàn)存儲(chǔ)。如有:int a5, *p,*q; p=&a0; q=&a2;*p=5;*q=8; 則a0和a2值分別為5和8。C語(yǔ)言規(guī)定:數(shù)組名代表數(shù)組的首地址,也就是第一個(gè)元素a0的地址。因此: a &a0。 若: p=a;/* 或?qū)懗蓀=&a0; */則: p+1 &a1 *(p+1) a1 p+i &ai *(p+i) ai引用一個(gè)數(shù)組元素,可
30、以用HYPERLINK 9-6-1.txt下標(biāo)法或指針?lè)?。HYPERLINK 9-6-2.txt 通過(guò)數(shù)組的起始地址計(jì)算數(shù)組元素的地址 ,即*(a+i) 或*(p+i) 形式。 HYPERLINK 9-6-3.txt 用指針變量處理數(shù)組元素 ,即p+ 形式: main()int a5=3,8,9,2,6,i,*p;p=a;for(i=0;i5;i+)printf(“%d “,*p); p+; 【例7.5 】指針運(yùn)算符“*”與增1運(yùn)算符“+”同時(shí)作用于一個(gè)指針變量的情況。main()int i, a= 11, 22, 33, 44, 55, 66 , *p=a;printf(%3d, (*p)+
31、); 11printf(%3d, *p+); 12printf(%3d, *+p); 33printf(%3dn, +*p); 34for(p=a; pa+6; p+) printf(%3d,*p); 12 22 34 44 55 66printf(n);getch();2、通過(guò)指針引用二維數(shù)組元素(1)二維數(shù)組和數(shù)組元素的地址int a34= 1, 2, 3, 4 ,6, 7, 8, 9,11, 12,13,14 a0 a1 a2則 a &a0, a+1 &a1, a+2 &a2對(duì)于一維數(shù)組名為a0,則a0 &a00, a0+1 &a01.所以第0行第1列的地址表示為a0+1. 所以ai+j
32、是第i行第j列元素的地址 &aij,又ai 等價(jià)于 *(a+i)所以在二維數(shù)組里*(a+i)+j和ai+j都表示地址。 (2) 通過(guò)地址訪問(wèn)二維數(shù)組假設(shè)有如下定義: int a35, i, j;則二維數(shù)組a中的任一元素aij,可以用下述表達(dá)式之一來(lái)引用表示:*(ai+j)由上述知ai+j是第i行第j列元素的地址,因此*(ai+j)與aij等價(jià)*(*(a+i)+j) , *(a+i)+j也是第i行第j列元素的地址,因此*(*(a+i)+j)與aij等價(jià)(*(a+i)j,相當(dāng)于先取*(a+i)+j地址,再取其內(nèi)的值,所以與aij等價(jià)*(&a00+5*i+j) 由于每行個(gè)元素,&a00+5*i+j就
33、是第i行第j列元素的地址,因此*(&a00+5*i+j)也與aij等價(jià)*(&a00+5*i+j) *(a0+5*i+j) *(*a+5*i+j) aij(3) 通過(guò)指向元素指針訪問(wèn)二維數(shù)組 如: int a35, i, j, *p; p=&a00; 或 p=*a; 或 p=a0; 則 aij 等價(jià)于 *(p+i*5+j) 等價(jià)于 pi*5+j數(shù)組名作函數(shù)參數(shù)的指針解釋HYPERLINK 9-7.txt例7.7 對(duì)形參數(shù)組改為指針。int array_max(int x ,int n) int i,m= x0 ;for(i=1;in;i+)if(m xi )m= xi ;return m;mai
34、n() int a =8,7,55,23,49,max;max=array_max(a,5);printf(“Max=%dn”,m); 指針數(shù)組一般說(shuō)明形式為:類型符 *數(shù)組名數(shù)組大??; 如:int *p5; HYPERLINK 9-8.txt例7.8 指針數(shù)組的簡(jiǎn)單使用main()int a5=1,3,5,7,9;int *num5,i;for(i=0;i5;i+)numi=&ai;for(i=0;i5;i+)printf(“%d “,*numi); 多級(jí)指針有:int a,*p=&a; 若使:q=&p; 則q是就指向指針變量的指針變量,稱q為二級(jí)指針。二級(jí)指針定義的一般形式為:類型符 *指
35、針變量名; 如:int *q;則:a=5; 或*p=5; 或*q=5; 結(jié)果相同。同樣可以有三級(jí)、四級(jí)指針等等,我們把二級(jí)及二級(jí)以上的指針?lè)Q為多級(jí)指針。HYPERLINK 9-9.txt例7.9 數(shù)組的輸出main()int a5=1,3,5,7,9;int *b5,i,*p;for(i=0;i5;i+) bi=&ai;p=b;for(i=0;i5;i+) printf(“%d “,*p+); 指針與字符串 字符串的表示形式 char 字符數(shù)組名數(shù)組元素個(gè)數(shù)如有:char str80=“China”, *p=str;printf(“%s”,str); printf(“%s”,p); print
36、f(“%s”,”China”); 用%s輸入/輸出字符串時(shí),只需要知道字符串的開始地址即可。使p指向字符串的開始地址,可寫成: char *p=”China”; 字符指針作函數(shù)參數(shù)HYPERLINK 9-11.txt例7.11 將例7.10改用函數(shù)完成int StrLen(char *s) int n=0; while(*s+) n+; return n;main( )char str =”abc”,*p;int len;p=str; len=StrLen(p);printf(“%s的長(zhǎng)度為%dn”,p,len); 運(yùn)行結(jié)果:abc的長(zhǎng)度為3返回字符串的函數(shù)HYPERLINK 9-13.txt
37、例7.13 改寫字符串復(fù)制函數(shù)char *StrCopy(char *str1,char *str2) char *p=str1; while(*str1=*str2)!=0) str1+; str2+; return p;main() char s180,s2 = “abc”; printf(“復(fù)制之后的字符串:%sn”,StrCopy(s1,s2); 復(fù)制之后的字符串:abc 字符指針數(shù)組HYPERLINK 9-14.txt例7.14將若干字符串輸出main()char *str =“Word”,”Excel”,”O(jiān)utlook”;int i;for(i=0;i3;i+)printf(“%
38、sn”,stri); HYPERLINK 9-15.txt例7.15使用多級(jí)指針完成若干字符串輸出main()char *str =“Word”,”Excel”,”O(jiān)utlook”;char *p;for(p=str;p第一行 a1 4 5 6 第二行 a2 7 8 9 第三行步驟二:這樣作題目間很簡(jiǎn)單:*(a0+1)我們就知道是第一行的第一個(gè)元素往后面跳一列,那么這里就是a01元素,所以是。*(a1+2)我們就知道是第二行的第一個(gè)元素往后面跳二列。那么這里就是 a12元素,所以是6。一定記住:只要是二維數(shù)組的題目,一定是寫成如上的格式,再去做題目,這樣會(huì)比較簡(jiǎn)單。數(shù)組的初始化,一維和二維的,
39、一維可以不寫,二維第二個(gè)一定要寫int a=1,2 合法。int a4=2,3,4合法 。但int a4=2,3,4非法。二維數(shù)組中的行指針int a12;其中a現(xiàn)在就是一個(gè)行指針,a+1跳一行數(shù)組元素。 搭配(*)p2指針 a0,a1現(xiàn)在就是一個(gè)列指針。a0+1 跳一個(gè)數(shù)組元素。搭配*p2指針數(shù)組使用還有記住脫衣服法則:a2變成*(a+2)a23變成 *(a+2)3再可以變成*(*(a+2)+3)這個(gè)思想很重要!不能對(duì)字符數(shù)組整體賦值,而字符指針允許整體賦值指針p可以p+(后移)或p-(前移)或p+i,而數(shù)組名a只能用,a+i(注意一維數(shù)組和二維數(shù)組的區(qū)別)兩個(gè)地址(指針)可以比較大小,后面
40、大前面小;可以相減表示差幾個(gè)元素對(duì)字符數(shù)組或字符串的操作一般用:while(*s) 或while(si) 或for(p=a; p成員名(指針引用); (*結(jié)構(gòu)指針).成員名(將指針轉(zhuǎn)化為名字引用);結(jié)構(gòu)變量占用內(nèi)存情況結(jié)構(gòu)變量的各個(gè)成員分量在內(nèi)存中占用連續(xù)存儲(chǔ)區(qū)域,所占內(nèi)存大小為結(jié)構(gòu)中每個(gè)成員的占用內(nèi)存的長(zhǎng)度之和。聯(lián)合類型(union)表示法同結(jié)構(gòu)類型首地址起共用允許對(duì)第一個(gè)成員賦值共用體變量任何時(shí)刻-只有一個(gè)成員存在共用體變量定義分配內(nèi)存,長(zhǎng)度=最長(zhǎng)成員所占字節(jié)數(shù)(即字節(jié)數(shù)取最大的)共用體變量的定義形式有三種(類似結(jié)構(gòu)體變量的定義)枚舉類型enum weekdays Sun,Mon,Tue,
41、Wed,Thu,Fri,Sat;枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。取值表中的值稱為枚舉元素,枚舉元素是常量。在編譯器中,按定義的順序取值0、1、2、.。所以枚舉元素可以進(jìn)行比較,比較規(guī)則是:序號(hào)大者為大。例如,上例中的Sun=0、Mon=1、Sat=6,所以MonSun、Sat最大。枚舉元素的值也是可以人為改變的:定義時(shí)由程序指定。例如,如果enum weekdays Sun=7, Mon=1 ,Tue, Wed, Thu, Fri, Sat;則Sun=,Mon=,從Tue=2開始,依次增。定義別名typedef type newname;用戶定義的類型名已有數(shù)據(jù)類型名類型定義語(yǔ)句關(guān)鍵字 eg:t
42、ypedef int X, Y10, *Z;X a;Y b;Z c;其中a,b,c各代表什么?整型變量a, 整型數(shù)組b10, 整型指針變量c。第九章 文件操作與位運(yùn)算6個(gè)位運(yùn)算符 : 位左移、按位取反、位與&、位或 |、位異或 。位運(yùn)算題目計(jì)算是先要把十進(jìn)制化成二進(jìn)制,再做位運(yùn)算。在沒(méi)有舍去數(shù)據(jù)的時(shí)候,右移一位表示除以2。所謂“文件”一般指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。 按文件中數(shù)據(jù)的組織形式來(lái)分,可分為文本文件(即ASCII碼文件)和二進(jìn)制文件。 文件操作的過(guò)程:對(duì)磁盤文件的操作必須“先打開,后讀寫,最后關(guān)閉”。文件的打開方式打開方式含義及說(shuō)明r 以只讀方式打開一個(gè)文本文件,只允許讀數(shù)據(jù)w以只
43、寫方式打開或建立一個(gè)文本文件,只允許寫數(shù)據(jù)a以追加方式打開一個(gè)文本文件,并在文件末尾寫數(shù)據(jù)r+以讀寫方式打開一個(gè)文本文件,允許讀和寫w+以讀寫方式打開或建立一個(gè)文本文件,允許讀寫a+ 以讀寫方式打開一個(gè)文本文件,允許讀,或在文件末追加數(shù)據(jù) rb 以只讀方式打開一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù) wb 以只寫方式打開或建立一個(gè)二進(jìn)制文件,只允許寫數(shù)據(jù) ab 以追加方式打開一個(gè)二進(jìn)制文件,并在文件末尾寫數(shù)據(jù) rb+ 以讀寫方式打開一個(gè)二進(jìn)制文件,允許讀和寫 wb+ 以讀寫方式打開或建立一個(gè)二進(jìn)制文件,允許讀和寫 ab+ 以讀寫方式打開一個(gè)二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù) 常用文件操作函數(shù)函數(shù)名功能
44、調(diào)用舉例返回值fopen打開文件文件指針名=fopen(文件名,使用文件方式);FILE *fp; fp=fopen(c:tcsource.dat ,r);fclose(關(guān)閉文件fclose(文件指針變量);fclose(fp);成功關(guān)閉返回值為0,如果關(guān)閉出錯(cuò)為EOF(-1)。)ferror出錯(cuò)檢測(cè)ferror(文件指針變量);ferror(fp);/*默認(rèn)初值為零*/返回0,表示未出錯(cuò);返回非0,表示出錯(cuò)。feof指針是否到尾feof(文件指針變量);feof(fp);若到文件末尾,函數(shù)值為真ftell返回位置指針當(dāng)前位置(用相對(duì)文件開頭的位移量表示)ftell(FILE *fp)i = ftell(fp);if(i=-1L) printf(“errorn”);返值成功,返回當(dāng)前位置指針位置;失敗,返回-1Lfseek用來(lái)移動(dòng)文件內(nèi)部位置指針。fseek(文件指針,位移量,起始點(diǎn));起始點(diǎn):表示從何處開始計(jì)算位移量.位移量:以起始點(diǎn)為基點(diǎn),向前移動(dòng)的字節(jié)數(shù)。一般要求為long型fseek( fp,100L,0);/*將位置指針移到離文件頭100個(gè)字節(jié)處*/起始點(diǎn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中入學(xué)勞動(dòng)合同范本
- 亞克力開模合同范本
- 出售債權(quán)合同范本
- 儲(chǔ)存酒合同范例
- 保定租賃庫(kù)房合同范本
- 企業(yè)融資電子合同范本
- 出納購(gòu)買服務(wù)合同范本
- 債權(quán)傭金合同范本
- 包清工勞務(wù)合同范例
- 統(tǒng)編教材四年級(jí)下冊(cè)語(yǔ)文第二單元教學(xué)解讀及建議1
- 火電機(jī)組整套啟動(dòng)前安全技術(shù)交底卡
- 菲斯特轉(zhuǎn)子秤的
- 藥學(xué)專業(yè)教學(xué)資源庫(kù)建設(shè)申報(bào)書
- 解讀《泰州市市區(qū)城市排水管理辦法》
- 人教版五年級(jí)下冊(cè)口算題大全(全冊(cè)齊全)
- 林則徐課件完整版
- 旅行社運(yùn)營(yíng)實(shí)務(wù)電子課件 6.1 初涉旅行社管理
- 電力承裝安全生產(chǎn)安全安全培訓(xùn)制度完整優(yōu)秀版
- 2020年交安A、B、C證(公路)考試題庫(kù)1088題(含答案)
- GB/T 5532-2008動(dòng)植物油脂碘值的測(cè)定
評(píng)論
0/150
提交評(píng)論