




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