




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、高級(jí)語言程序設(shè)計(jì)期末總復(fù)習(xí)課程的全部?jī)?nèi)容可分為五大模塊:(1) 基礎(chǔ)知識(shí)(2) 三種基本結(jié)構(gòu)及流程控制(3) 函數(shù)(4) 數(shù)據(jù)類型(5) 文件下面按這五大模塊分別作回顧模塊一:基礎(chǔ)知識(shí)部分需要掌握的知識(shí)要點(diǎn):(1)馮·諾依曼體系結(jié)構(gòu)的計(jì)算機(jī)組成:運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備、輸出設(shè)備,以及各部分的主要功能。(2)C語言程序的組成:由一個(gè)或多個(gè)文件組成,每個(gè)文件由一個(gè)或多個(gè)函數(shù)組成,函數(shù)是C程序的基本單位,一個(gè)程序有且只有一個(gè)main( )函數(shù),這是程序的入口函數(shù)(3)從C的源程序到可執(zhí)行的文件的全過程:編輯、編譯、鏈接最后才能運(yùn)行,各階段生成的文件擴(kuò)展名分別為:.c、.obj、.
2、exe,頭文件的擴(kuò)展名:.h(4)函數(shù)的組成:函數(shù)首部和函數(shù)體,函數(shù)中可有注釋行/* */ (5)編譯預(yù)處理有三種:文件包含、宏、條件編譯:預(yù)處理命令行都必須以“#”號(hào)開始宏定義#define宏名 串也是一種編譯預(yù)處理,取消宏定義用:#undef 宏名 C程序中定義一個(gè)符號(hào)常量是借助于宏定義實(shí)現(xiàn)的,例如: #define NUM 35 注意:不在行末加分號(hào),因?yàn)樵趯?duì)源程序編譯過程中(不是運(yùn)行時(shí))進(jìn)行宏替換時(shí),將宏所代表的字符串原樣替換進(jìn)去,有時(shí)加了分號(hào)是要出錯(cuò)的,例如: int arrNUM 。宏替換因?yàn)橹辉诰幾g時(shí)進(jìn)行,所以不占運(yùn)行時(shí)間,只占編譯時(shí)間帶參數(shù)的宏可以完成一些簡(jiǎn)單函數(shù)的功能,例如:
3、#define MUL(x,y) x*y主函數(shù)中如果有變量定義如下:int a=2,b=3,c;用形如:c= MUL(a,b);實(shí)現(xiàn)求a、b的乘積。但是請(qǐng)大家思考,如果用c= MUL(a+2,b+5),則變量c的值為?因此,一般將宏中的參數(shù)在所定義的串中打上括號(hào),如:#define MUL(x,y) (x)*(y)再求c= MUL(a+2,b+5)(6)C程序中的六種符號(hào):關(guān)鍵字、標(biāo)識(shí)符、運(yùn)算符、分隔符、其它符號(hào)、數(shù)據(jù)(包括常量和變量)熟記所有常見關(guān)鍵字,關(guān)鍵字中最多的是流程控制語句中的關(guān)鍵字,如:for、while、do、if、else、switch、case、default、break、c
4、ontinue、goto、return等,還有一大類是變量類型及存儲(chǔ)類別的,如:int、short、long、signed、unsigned、char、double、float、enum、union、struct、typedef、static、register、auto、extern,還有一些如:void 、sizeof 等;能正確定義標(biāo)識(shí)符(在程序中,符號(hào)常量名、變量名、函數(shù)名都是用戶自定義標(biāo)識(shí)符),自定義標(biāo)識(shí)符的正確與否可從以下幾方面判斷:是否以字母或下劃線開頭;是否是只有字母、數(shù)字、下劃線的序列是否選用了關(guān)鍵字練習(xí):下列哪一個(gè)是合法的用戶自定義標(biāo)識(shí)符_。A、_do_while; B、be
5、gin?end; C、for; D、1st_run;掌握所有的運(yùn)算符及其優(yōu)先級(jí)、結(jié)合方向及特殊的運(yùn)算規(guī)則:34種運(yùn)算符的優(yōu)先級(jí)關(guān)系大致為: 、( )、->、.-à一元運(yùn)算符-à乘除類算術(shù)運(yùn)算符-à加減類算術(shù)運(yùn)算符-à移位運(yùn)算符-à有大小關(guān)系的關(guān)系運(yùn)算符-à等與不等的關(guān)系運(yùn)算符-à位運(yùn)算符-à邏輯與-à邏輯或-à條件運(yùn)算符-à各種賦值運(yùn)算符-à逗號(hào)運(yùn)算符。結(jié)合方向:一元運(yùn)算符、條件運(yùn)算符、賦值運(yùn)算符三種為自右向左結(jié)合,其它均為自左向右結(jié)合能改變變量值的運(yùn)算符:賦值、+、-
6、 -,注意前后+、- -的區(qū)別具有特殊運(yùn)算規(guī)則的運(yùn)算符:邏輯與&&、邏輯或|、條件運(yùn)算符,具有斷路功能,表達(dá)式中的某些部分可能不運(yùn)算;%運(yùn)算符要求兩個(gè)運(yùn)算對(duì)象均為int型注意兩個(gè)運(yùn)算符的區(qū)別:=與= =表達(dá)式運(yùn)算過程中可能進(jìn)行類型轉(zhuǎn)換,原則:低類型自動(dòng)向高類型轉(zhuǎn)換練習(xí):1、表達(dá)式a=4,a*5,b=a+3的結(jié)果是? x/=(a=4,b=a*5,b+)+9執(zhí)行后,變量a、b、x的值分別是多少?表達(dá)式的值呢?2、if (!x) 此處!x相當(dāng)于x= =0 if (x) 此處x相當(dāng)于x! =0常量與變量:常量是其值不可變化的量,有兩種表現(xiàn)形式:字面常量和符號(hào)常量,C是定義符號(hào)常量只有一
7、種方法:#define 常量名 串C中的字面常量有五種:整型常量、實(shí)型常量、字符常量、字符串常量、枚舉常量(不作要求)整型常量有三種合法制式:十、八(如012)、十六(如oxa3),另外還可以有 L(l)、U(u)作后綴,分別表示長(zhǎng)整型及無符號(hào)常量實(shí)型常量有兩種表示形式:小數(shù)形式、指數(shù)形式,注意:小數(shù)形式要求一定要有小數(shù)點(diǎn),小數(shù)點(diǎn)前面或后面的數(shù)字可以缺?。恢笖?shù)形式一定要有E(e),并且在其左邊一定是合法的整數(shù)或小數(shù)形式的實(shí)數(shù),右邊必須是合法的整數(shù)。字符常量是以一對(duì)單括起的單個(gè)字符(191錯(cuò)),需要特別注意的是以右開頭的轉(zhuǎn)義字符的三種形式:n、121、xa5,記住A、a、0、n的ASCII碼分別
8、為:65、97、48、10,字符常量的大小就是其ASCII碼值的大小小寫轉(zhuǎn)大寫:ch=ch-32;大寫轉(zhuǎn)小寫:ch=ch+32;字符串常量是以一對(duì)雙“括起的0個(gè)或多個(gè)字符,需要特別注意字符串的長(zhǎng)度與字符串所占的字節(jié)數(shù)之間相差1練習(xí):1、字符串"12t345012xa489"的長(zhǎng)度是_,占_字節(jié)。2、char c=m;c=c-35;putchar(c);的輸出結(jié)果是_3、下列哪一個(gè)不是合法的常量A、027 B、2.5e2.5 C、 0xfdaL D、10.e+0變量:在程序運(yùn)行過程中其值可變的量,需要先定義后使用。每一個(gè)變量都具有:變量名、變量的當(dāng)前值、變量的地址、變量的存儲(chǔ)
9、屬性,指針變量中存的是地址,其余變量中存放的是值。在所有函數(shù)之外定義的變量稱為全局變量,其作用域?yàn)槎x點(diǎn)開始到程序結(jié)束(去掉含同名局部量的作用區(qū)域);在函數(shù)內(nèi)部定義的變量稱為局部變量(形式參數(shù)也是局部變量),局部變量分auto(默認(rèn))和static兩種,前者是在函數(shù)被調(diào)用時(shí)分配空間,每次函數(shù)執(zhí)行完畢后將不再存在,但是static型的局部變量在函數(shù)第一次被調(diào)用時(shí)進(jìn)行分配空間,只初始化一次,每次函數(shù)執(zhí)行完畢后將繼續(xù)存在,但是只在本函數(shù)中才起作用,因此這種變量的讀程序題一定要注意!練習(xí):#include <stdio.h>int cal(int n)static int f=20;f+=
10、n;return f;void main ( )int i;for(i=1;i<7;i+) if (i%2) printf("%d ",cal(i);模塊二:三種基本結(jié)構(gòu)及流程控制C程序的三種基本結(jié)構(gòu)是順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這三種結(jié)構(gòu)分別需要借助于特定的語句控制實(shí)現(xiàn)。(1)順序結(jié)構(gòu):賦值語句和函數(shù)調(diào)用語句是控制該結(jié)構(gòu)的主要語句。函數(shù)調(diào)用語句中最常用的是:scanf( )、printf( )、getchar( )、putchar( )等用于控制輸入輸出的語句。注意用scanf( )輸入變量值時(shí)要嚴(yán)格按照格式控制串的形式要求輸入,用printf( )輸出時(shí)要進(jìn)行相
11、應(yīng)的格式控制,需要熟記幾種格式轉(zhuǎn)換說明符:%c、%s、%d、%f、%lf(當(dāng)變量為double類型時(shí),在scanf中必須用%lf,但輸出時(shí)用%f就可以了)。練習(xí):1、已知a、b、c為int型變量,用于輸入的語句為:scanf("a=%d,b=%d,c=%d",&a,&b,&c);,若想使a的值為1,b的值為2、c的值為3,應(yīng)當(dāng)怎樣輸入?如果提供的輸入方法為1,2,3<回車>,則對(duì)應(yīng)的輸入語句是什么?2、float v1234.5678;,輸出格式為:輸出總寬度為10,精度為3,則應(yīng)使用語句printf(_);實(shí)現(xiàn);若輸出語句為:print
12、f(“%.3f”,v);,輸出的內(nèi)容為:_(2)選擇結(jié)構(gòu):用if.else、switch語句配合復(fù)合語句、break語句控制實(shí)現(xiàn)。If語句有三種形式:?jiǎn)畏种f、雙分支if、嵌套if,注意else應(yīng)與其前最靠近的未匹配過的if相對(duì)應(yīng),而與對(duì)齊的形式無關(guān),每一個(gè)else實(shí)際上都隱含了一個(gè)條件,要充分利用這些條件分析程序;if后的條件通常是關(guān)系表達(dá)式,但是實(shí)際上可以是任何表達(dá)式,僅以該表達(dá)式是0或非0來判斷條件的假和真。注意:if ( )及else后面都只能控制一條語句,經(jīng)常需要用到復(fù)合語句。switch語句中特別要注意的是:(1)switch后面的表達(dá)式類型應(yīng)當(dāng)為整型、字符型、枚舉型,而不可以是
13、float或double型,因?yàn)楸磉_(dá)式的取值必須是離散值。(2)找到與表達(dá)式匹配的常量后開始執(zhí)行,直到遇到break或語句結(jié)束才會(huì)停止。因此每一個(gè)分支后如果沒有及時(shí)用break,則繼續(xù)向下執(zhí)行,這樣,switch結(jié)構(gòu)可以選擇多個(gè)分支執(zhí)行(3)這些常量的順序調(diào)整不影響程序的正確性,只要每個(gè)分支執(zhí)行的功能固定就可以了。練習(xí):1、已知變量tf為整型,下面的條件語句中,五種表達(dá)有一種與其它四個(gè)不等價(jià),它是?A、 if (tf ) 語句1; else 語句2; B、if ( tf=0 ) 語句2; else 語句1;C、if (tf!=0 ) 語句1; else 語句2;D、if (!tf ) 語句2;
14、 else 語句1;E、if (tf=1 ) 語句1; else 語句2;2、設(shè)以下所有變量均為整型,下列程序所實(shí)現(xiàn)的分段函數(shù)是? if (x>0) y=1; else y=0; if (x<0) y=-1;3、下列程序段執(zhí)行后,a、b的值是? a=1; b=2; c=0;if (a>b)c=a;a=b;b=c;4、設(shè)有聲明int a=1, b=2,則下面程序段的輸出結(jié)果是? 如果是內(nèi)層的每個(gè)case后有break,而外層沒有break,輸出結(jié)果是?switch (a)case 1:printf("#n");switch (b)case 1: printf
15、("*n"); case 2: printf("*n"); case 3: printf("*n"); break;case 2: printf("#n"); break;(3)循環(huán)結(jié)構(gòu):常用while、dowhile、for三種流程控制語句實(shí)現(xiàn),注意while和for屬于當(dāng)型循環(huán),dowhile屬于直到型循環(huán),若while后的條件為非0則繼續(xù)循環(huán),若為0則結(jié)束,三種循環(huán)是可以相互轉(zhuǎn)化的。這里特別強(qiáng)調(diào)的是:循環(huán)的退出一般是條件為0(for的表達(dá)式2,如果表達(dá)式2缺省,則表示永真條件、while或do while后的
16、表達(dá)式就可以表示條件,如:while (A) ,這就是一個(gè)永真條件)時(shí)不進(jìn)入循環(huán)體,但是在循環(huán)體內(nèi)也可以用一定條件下的break語句退出本層循環(huán)。如果表示條件的表達(dá)式值永遠(yuǎn)不可能為0,則為一個(gè)死循環(huán),這一點(diǎn)要注意!在循環(huán)語句中可以用break表示退出本層次循環(huán)、continue表示忽略本次循環(huán)體中的后續(xù)語句,重新開始下一次循環(huán)條件的判斷,以便決定是否要繼續(xù)循環(huán)。循環(huán)體只有一條語句,注意復(fù)合語句的正確使用,不要誤用分號(hào)形成循環(huán)體為空語句,例如:for (i=0;i<3;i+); s+=i;注意:有關(guān)退出的幾個(gè)操作:(1)在循環(huán)結(jié)構(gòu)中用break結(jié)束本層循環(huán)、在switch語句中用break
17、結(jié)束本層switch中當(dāng)前分支的執(zhí)行;(2)在函數(shù)體內(nèi)的return語句結(jié)束本函數(shù)的調(diào)用,返回到調(diào)用點(diǎn);(3)庫函數(shù)exit結(jié)束程序的執(zhí)行,返回到操作系統(tǒng),該函數(shù)在<stdlib.h>頭文件中練習(xí):1、若已有定義int i,則對(duì)于如下循環(huán)語句,循環(huán)體執(zhí)行的次數(shù)分別為_。for( i=0 ; ; i+ )printf("%d ",i);for( ; i=0 ; i+ )printf("%d ",i);for( i=0 ; i<0 ; i+ )printf("%d ",i); i=0; while (i=1) i+;2、
18、下列程序運(yùn)行后,x和y的值分別是?#include<stdio.h> void main()int x=1,y=2;for(;x<10;x+)x+= 2;if ( x>7 )printf("x=%d y=%dn",x,y);break;if ( x= =6 ) continue;y *= x;這一模塊中有很多經(jīng)典算法,下面幾個(gè)是同學(xué)們必須非常熟悉的:(1) 質(zhì)數(shù)問題 判斷一個(gè)整數(shù)是否為質(zhì)數(shù)(用一層循環(huán)可以解決)會(huì)定義函數(shù)實(shí)現(xiàn),函數(shù)原型:int prime(int n); 判斷參數(shù)n是否為質(zhì)數(shù),如果是,返回1,如果不是,返回0。 找出一定范圍內(nèi)所有的質(zhì)
19、數(shù)(用兩層循環(huán)可以解決)會(huì)定義函數(shù)實(shí)現(xiàn),函數(shù)原型:void prime(int low,int high); 找出從low到high范圍內(nèi)的所有質(zhì)數(shù),是質(zhì)數(shù)則輸出。如果函數(shù)需要返回該范圍內(nèi)的質(zhì)數(shù)個(gè)數(shù),則應(yīng)該將返回值類型修改為int。能按一定的格式輸出(2)求最大公約數(shù)問題可以用輾轉(zhuǎn)相減或相除的方法都可以得到。會(huì)定義函數(shù)實(shí)現(xiàn),函數(shù)原型:int gcd(int m,int n);在輾轉(zhuǎn)相除法中,當(dāng)余數(shù)為0時(shí)的除數(shù)即為最大公約數(shù),注意循環(huán)控制方式的不同可能導(dǎo)致返回值的不一樣。求最小公倍數(shù):a*b/gcd(a,b)(3)求和問題:掌握求和問題中條件的控制方式、累加的方式: 可以根據(jù)求和的項(xiàng)數(shù)要求來求解
20、,例如:求100項(xiàng)之和; 可以根據(jù)每一項(xiàng)的精度進(jìn)行求解,例如:求到這一項(xiàng)的絕對(duì)值不超過1E-6為止,注意這時(shí)的循環(huán)條件應(yīng)該為:while(fabs(term)>=1E-6),如果用do.while循環(huán),條件也是這樣表示。 注意分子、分母、當(dāng)前項(xiàng)、和分別用一個(gè)變量表示,正確定義變量的類型,正確解決變符號(hào)問題:s=-s;(4)輸出規(guī)則圖形式問題分析行號(hào)與當(dāng)前行前導(dǎo)空格數(shù)、符號(hào)個(gè)數(shù)、符號(hào)形狀之間的關(guān)系,正確控制換行。(5)利用循環(huán)可以控制輸入數(shù)據(jù)的范圍,這在實(shí)驗(yàn)三的P23頁。int a,b;do scanf(”%d%d”,&a,&b); while (a<10|a>
21、b|b>1000);實(shí)現(xiàn)輸入的a,b范圍是:10<=a<=b<=1000 模塊三:函數(shù)C語言的源程序由一個(gè)或多個(gè)函數(shù)組成,其中必須有且只能有一個(gè)主函數(shù)main( ),程序執(zhí)行總是從main函數(shù)開始的,也是因main函數(shù)的結(jié)束而結(jié)束整個(gè)程序。C函數(shù)只可以嵌套調(diào)用,而不能嵌套定義C函數(shù)可以在定義的時(shí)候調(diào)用自己,這就是直接遞歸方式這一部分需要搞清楚以下問題:(1)函數(shù)定義:包括函數(shù)首部和函數(shù)體,函數(shù)首部又包括了函數(shù)返回值類型 函數(shù)名(形式參數(shù)表),函數(shù)體是由一對(duì)大括號(hào)括起的語句系列組成,函數(shù)的形式參數(shù)名字是無關(guān)緊要的,若函數(shù)無需返回值,則將返回值類型可以定義為void。函數(shù)的
22、返回值由首部的函數(shù)返回值類型決定,return后的表達(dá)式類型若與其不一致,則自動(dòng)轉(zhuǎn)換。函數(shù)只能返回一個(gè)值,如果一個(gè)函數(shù)需要返回多個(gè)信息,則要考慮其中的形式參數(shù)采用指針參數(shù)。例如:int f(int a,int n,int *max); 由函數(shù)返回?cái)?shù)組a的前n個(gè)元素之和,而元素的最大值通過設(shè)定max指針,在函數(shù)體內(nèi)求*max實(shí)現(xiàn),外部調(diào)用時(shí),要用一個(gè)地址實(shí)參對(duì)應(yīng)于形式參數(shù)max。(2)函數(shù)原型:函數(shù)應(yīng)當(dāng)先定義后被調(diào)用,如果出現(xiàn)調(diào)用先于定義的情況,則必須對(duì)后定義的函數(shù)在調(diào)用點(diǎn)之前進(jìn)行原型聲明,函數(shù)原型就是函數(shù)定義的首部最后加一個(gè)分號(hào),在原型聲明中形式參數(shù)名字可以缺省。(3)函數(shù)調(diào)用:形式為:函數(shù)名
23、(實(shí)在參數(shù)表),實(shí)在參數(shù)與形式參數(shù)對(duì)應(yīng)的要求是:個(gè)數(shù)相同、對(duì)應(yīng)位置的類型最好一致(4)形式參數(shù)類型:有值形式參數(shù),這時(shí)實(shí)在參數(shù)將值賦值到值形式參數(shù)變量中;指針形式參數(shù),這時(shí)將實(shí)參的地址賦值到指針形式參數(shù)中,雖然都是單向傳遞,但是可以通過在被調(diào)函數(shù)中修改指針?biāo)赶虻膬?nèi)容達(dá)到修改實(shí)參變量的目的。如:swap(int *x,int *y),在該函數(shù)體內(nèi)交換的是*x和*y的值;對(duì)swap的幾種正確與錯(cuò)誤實(shí)現(xiàn)需要能正確理解。如果函數(shù)原型為:swap(int *x,int y),在函數(shù)體內(nèi)交換*x 和y的值,則主函數(shù)中的調(diào)用形式應(yīng)該為:swap(&a,b);只有實(shí)參a可能會(huì)得到改變,無法完成a、b
24、互換的目的。(5)變量的作用域問題:全局變量在所有函數(shù)之外定義的變量,作用于定義點(diǎn)到程序結(jié)束處,但應(yīng)去除掉同名局部量的作用域部分。局部自動(dòng)變量在某函數(shù)內(nèi)部定義的變量,包括形式參數(shù)也是,其作用域只在本函數(shù)內(nèi),生命期為:所在函數(shù)被調(diào)用時(shí)分配空間,該函數(shù)當(dāng)次結(jié)束時(shí)空間不復(fù)存在。下次再調(diào)用則重新分配空間。在不同函數(shù)中定義的局部量可以同名,因此形式參數(shù)可以與實(shí)在參數(shù)同名,因?yàn)樘幱诓煌暮瘮?shù)。局部靜態(tài)變量在某函數(shù)內(nèi)部定義的變量,有static關(guān)鍵字,其作用域只在本函數(shù)內(nèi),生命期為:所在函數(shù)被調(diào)用時(shí)在靜態(tài)存儲(chǔ)區(qū)分配空間,只初始化一次,本次函數(shù)調(diào)用結(jié)束后仍然存在,其值保留,但是在函數(shù)之外的其余部分均不可見,等
25、該函數(shù)再次被調(diào)用時(shí),該變量就在原來值的基礎(chǔ)上繼續(xù)變化。(6)函數(shù)的遞歸:會(huì)閱讀遞歸函數(shù),并能對(duì)簡(jiǎn)單的調(diào)用得到運(yùn)行結(jié)果,理解遞歸的條件:有明確的邊界條件;原問題可轉(zhuǎn)化為新問題,新舊問題的解決方法一樣。練習(xí):1、若用一維數(shù)組名作為函數(shù)調(diào)用時(shí)的實(shí)在參數(shù),則實(shí)際上傳遞給形參的是_。2、若在主函數(shù)中定義了數(shù)組變量:int arr20,并調(diào)用了函數(shù)f(arr),則下列關(guān)于函數(shù)f的原型聲明,哪幾個(gè)是完全等效的_。A、 void f(int x20); B、 void f(int x ); C、 void f(int x10 ); D、 void f(int x); E、 void f(int *x);3、以
26、下程序的輸出結(jié)果是_。#include <stdio.h>long fun (int n)static long s;if (n= =0 | n= =1) s = n;else s = n+ fun( n-1 );return s;void main ( )int i;for (i=1;i<4;i+) printf("%4ldn", fun(i);此題中既有遞歸調(diào)用,又有靜態(tài)局部變量的使用這兩個(gè)重要的知識(shí)點(diǎn)。教材中的習(xí)題P194,5.3也是涉及靜態(tài)局部變量的使用。教材中的習(xí)題P375,9.2是利用遞歸進(jìn)行十進(jìn)制向二進(jìn)制的轉(zhuǎn)換問題,大家可以思考用類似方法實(shí)現(xiàn)
27、十進(jìn)制向其它進(jìn)制的轉(zhuǎn)換4、有函數(shù)原型為void f(int,int *);主函數(shù)中有變量定義:int a, *p=&a; 則下列幾種調(diào)用正確的是_?A、 f(a,p); B、f(*p,&a); C、f(a,*p); D、f(*p,a); E、f(a,&a); F、f(*p,p); G、f(a,a); H、f(p,p); 5、會(huì)結(jié)合數(shù)組、結(jié)構(gòu)體類型,用多個(gè)函數(shù)完成一個(gè)程序。模塊四:數(shù)據(jù)類型C語言源程序中所處理的任何數(shù)據(jù)(常量或變量)都是屬于某一種數(shù)據(jù)類型的,數(shù)據(jù)類型將決定該類型的值在內(nèi)存中占用空間的大小、數(shù)據(jù)值的表現(xiàn)形式及數(shù)據(jù)范圍、可進(jìn)行的運(yùn)算及操作、變量值的組成情況等。
28、C中數(shù)據(jù)類型分為:基本類型、構(gòu)造類型、指針類型、空類型四大類,其中基本類型包括整型、實(shí)型、字符型、枚舉型;構(gòu)造類型有:數(shù)組類型、結(jié)構(gòu)體類型、共同體類型,指針類型的特殊性在于其變量中存放的是內(nèi)存地址信息而不是內(nèi)存中的值。這一模塊的重點(diǎn)是數(shù)組、結(jié)構(gòu)體、指針類型。(1)數(shù)組類型:基本知識(shí):一維及二維數(shù)組變量的定義及初始化、如何正確訪問元素、一維字符數(shù)組操作字符串、會(huì)正確輸入輸出數(shù)組的元素、正確輸出字符串,掌握string.h函數(shù)中的一些常用函數(shù)的使用,如:兩個(gè)字符串的比較(例如:判斷串s1是否大于s2,不能用s1>s2,而應(yīng)該用strcmp(s1,s2)>0)、字符串的賦值、字符串的連接
29、等。算法:首先要理解一維數(shù)組名作實(shí)參和形式能數(shù)傳地址的實(shí)質(zhì);掌握在一維數(shù)組中:輸入數(shù)組所有元素、輸出數(shù)組所有元素、尋找最大數(shù)、最小數(shù)、求元素的平均值、查找某一個(gè)值是否是數(shù)組中的元素、數(shù)組元素逆置、某種常見排序算法等。數(shù)組元素實(shí)際個(gè)數(shù)隨著輸入動(dòng)態(tài)統(tǒng)計(jì)的方法:應(yīng)當(dāng)設(shè)定一個(gè)輸入結(jié)束標(biāo)志,在輸入該標(biāo)志之前的元素都依次作為數(shù)組的有效元素,該標(biāo)志不計(jì)入內(nèi),用如下代碼輸入以-1為結(jié)尾標(biāo)志的數(shù)組并輸出所有的有效元素:#include <stdio.h>void main()int a100,num=0,i=0;do scanf("%d",&ai+);while (ai-
30、1!=-1);num=i-1;for (i=0;i<num;i+)printf("%5d",ai);printf("n%dn",num);練習(xí):1、有數(shù)組定義int amn,則在aij之前的元素的個(gè)數(shù)為_。2、 以下一維數(shù)組的定義正確的是_A、 int n=3, an; B、#define N=3 int aN;C、 const int n=3; int an; D、#define N 3 int aN*3;3、以下一維數(shù)組定義及初始化正確的是_A、int a ; B、int a=1,2,3 C、int a3=1,2,3,4 D、int a3=,2
31、,4、以下選擇中,能正確定義二維數(shù)組的是_。A、int x 2; B、int x 2 =2*2;C、int x2 =1,2,3,4 ; D、int a23= , 1 ;5、若定義int a10=9,1,15,6,2,11,8,7,19,3;則mm1+2*m4的值是_,*m+m8的值為_。 6、下列字符數(shù)組定義與初始化不正確的是_A、char s =”abc”; B、char s=”abc”;C、char s3=a,b,c; D、char s3=”abc”;7、下列關(guān)于數(shù)組的描述中不正確的是_。A、可以對(duì)字符型數(shù)組進(jìn)行整體輸入、輸出B、可以對(duì)整型數(shù)組進(jìn)行整體輸入、輸出C、利用字符型數(shù)組可以實(shí)現(xiàn)字
32、符串操作D、不能通過賦值運(yùn)算符“=”對(duì)字符型數(shù)組進(jìn)行整體賦值8、下列程序的輸出結(jié)果是?#include <stdio.h>int f (int *a, int num, int x); void main( )int a10=8,6,17,29,34,5,7,23,2,1;int pos;pos=f (a,10,7);printf("%d",pos+1);int f (int *a, int num, int x) int i;for (i=0; i<n; i+) if (x = ai) return i; return -1; ;教材P239的6.3程序
33、填空題,需要認(rèn)真理解。其中的(3)如果改為統(tǒng)計(jì)某一個(gè)字母出現(xiàn)的次數(shù),可以作怎樣的簡(jiǎn)化?(2)指針類型:定義形式為:數(shù)據(jù)類型 *指針變量名,例:int*p;注意p與*p的區(qū)別。指針變量若未賦值,不能對(duì)*p操作,若對(duì)指針賦值為空值,也不能對(duì)*p操作。例如:1、 int *f = NULL; scanf("%d",f)或 *f=10.5;都不正確2、 int t = 'A', *f; f = &t或*f=t均正確;f=t,*f=&t都不正確3、 int *f; f = NULL;正確練習(xí): 1、已知: char *s = "student
34、" 則printf("%sn", c+3)輸出為_ 2、若有說明:int a, b=9, *p=&a;,則能完成a=b賦值功能的語句是_A、a=*p; B、*p=*&b; C、a=&b; D、*p =&*b;指針與數(shù)組的關(guān)系:對(duì)指針操作一維數(shù)組要熟練掌握,理解數(shù)組名是地址常量的概念,指針指向數(shù)組的時(shí)候執(zhí)行p+、p- -的意義,以及數(shù)組元素的下標(biāo)法訪問及指針運(yùn)算符訪問方法:例:int a4=1,2,3,4 ,*p=a +p;p2或*(p+2)都是表示元素a3,但是p+1或a+2都是表示地址概念的,都等于&a2各種指
35、針的含義:int *p /一級(jí)指針,可等于普通int變量地址、一維數(shù)組名、二維數(shù)組中的列地址int (*p)3;/一個(gè)行指針,指向具有3個(gè)整型元素的一維數(shù)組,與二維數(shù)組一起使用,用于獲得行指針值,例int a23 p=a;int *p3;/含3個(gè)整型指針元素的一維指針數(shù)組pint (*p) ( ) ;/函數(shù)指針,指向返回值為int型的函數(shù)入口int *p(形式參數(shù)表); /返回值為int指針的函數(shù)pint *p /二級(jí)指針p,用來獲得一級(jí)指針的地址,必須兩次間接尋址才能訪問int值,例如:int a,int *r=&a,*p=&r 則
36、下列三句等效: (1)a=1 (2)*r=1 (3)*p=1 這里,有幾種訪問是不正確的:(1) r=1 (2)p=&a (3)p=r (4)*p=1 二維數(shù)組中元素的表示:例:int a34;元素aij的正確表示:aij、*(ai+j)、*(*(a+i)+j)、*(*a+i*4+j),但是*(a+i*4+j)不正確,這里需要正確理解行指針與列指針的表示及它們執(zhí)行算術(shù)運(yùn)算每次移動(dòng)的字節(jié)數(shù)用字符指針操作字符串:比用字符數(shù)組操作字符串具有更大的靈活性,注意二者的區(qū)別例:char *s=“ABC”; char *s
37、; s=”ABC”;都是正確的char p4=“ABC”;正確,但是char p4; p=”ABC”;卻錯(cuò)誤s=p;是正確的賦值,但是s=*p,*s=”AB”都是錯(cuò)誤的 練習(xí):下面的函數(shù)代碼是否都能正確實(shí)現(xiàn)字符串的拷貝(將p1串拷貝到p2串中?)代碼段一:void MyStrcpy( char *p2, char *p1 ) while ( (*p2=*p1) != '0' ) /此處換成.!=n呢?p1+;p2+;代碼段二:void MyStrcpy( char *p2, char *p1 ) while (*p1 != '0' ) *p2=*p1p
38、1+;p2+;(3)結(jié)構(gòu)體類型:會(huì)正確定義結(jié)構(gòu)體類型,掌握三種變量定義的方式及變量的初始化方式,理解結(jié)構(gòu)體變量?jī)?nèi)存占用的情況(各成分依次存放,故結(jié)構(gòu)體變量所占空間至少為所有成員需要的空間之和),會(huì)正確訪問結(jié)構(gòu)體變量的成員(用點(diǎn)運(yùn)算符或是箭頭運(yùn)算符),結(jié)合結(jié)構(gòu)體數(shù)組及指針會(huì)正確訪問結(jié)構(gòu)體的元素。練習(xí):1、定義struct Point int x,y; pos =1,2,3,4,5,6, *pt=pos;則表達(dá)式(+pt)->y的值為_ , +(pt->x) 的值為_, +pt->x 的值為_、(*pt).y的值為_。2、以下對(duì)結(jié)構(gòu)體變量stu中成員的非法引用是_。struct
39、Pointint x;int y; pos, *p=&pos;A、pos.x B、(*p).y C、p->x D、Point.y作為函數(shù)參數(shù),通常定義結(jié)構(gòu)體的指針作為形式參數(shù),將實(shí)參結(jié)構(gòu)體變量的地址傳入,這樣省時(shí)效率高,而且可在被調(diào)函數(shù)中修改對(duì)應(yīng)實(shí)參結(jié)構(gòu)體成員的值練習(xí):下列程序的運(yùn)行結(jié)果是?#include <stdio.h>typedef struct Student char name10;double score; STU;void f (STU *s) (*s).score*=20; printf("%s %.1fn", s->nam
40、e, (*s).score);void main() STU stu="LiuBo", 4.5, "JiWei", 4.6, "Lijie", 5.0;f (stu+1);printf("%s %.1fn", stu->name, (*stu).score);利用結(jié)構(gòu)體和指針的遞歸定義可以實(shí)現(xiàn)單鏈表例:struct node int data; struct node *next; *head;在單鏈表中,最重要的是頭指針的信息,頭指針用于指向單鏈表的第一個(gè)結(jié)點(diǎn)處,順著鏈依次尋找其它的結(jié)點(diǎn),單鏈表不可隨機(jī)訪問
41、其中的結(jié)點(diǎn),最后一個(gè)結(jié)點(diǎn)的指針域置為空理解單鏈表的遍歷、插入一個(gè)結(jié)點(diǎn)、刪除一個(gè)結(jié)點(diǎn)等方法。練習(xí):1、設(shè)以下程序的所有的指針均為上面struct node*變量,已知head為頭指針,指針p指向了單鏈表中的某一個(gè)結(jié)點(diǎn)處,但肯定不是指向第一個(gè)結(jié)點(diǎn)和最后一個(gè)結(jié)點(diǎn),指針q指向了某一個(gè)結(jié)點(diǎn)處,該結(jié)點(diǎn)不在鏈表中,下面的代碼實(shí)現(xiàn)的功能是_? (方法提示:根據(jù)描述先畫出單鏈表示意圖來)p=p->next; s->next=p->next; p->next=s;如果p指向的是鏈表中倒數(shù)第二個(gè)結(jié)點(diǎn)處,則上面代碼實(shí)現(xiàn)的功能為_,這時(shí)代碼還可以寫成_?下面的代碼的功能是_?p->next
42、 =p->next->next; delete p->next;下面的代碼的功能是_?for (p=head; p ; p=q) q=p->next; delete p; 下面的代碼的功能是_?p=(struct node*)malloc(sizeof(struct node);p->data=x;p->next=head;head=p;2、鏈表中的結(jié)點(diǎn)的形成可以有兩種方式,一種是靜態(tài)的,即定義了結(jié)構(gòu)體變量,只是將不同變量的next域作了連接,另一種是利用malloc( )函數(shù)逐個(gè)申請(qǐng)動(dòng)態(tài)空間,再進(jìn)行指針間的連接。下面程序代碼的運(yùn)行結(jié)果是:void main() struct node int data; struct node *next *head,*p , a,b,c;int j;a.data=10; b.data=20; c.data=30; b.next=&c; c.next=&a; a.next=0;head=&b; p=head->next;printf("%d n", p->data);動(dòng)態(tài)申請(qǐng)一個(gè)結(jié)點(diǎn)空間:p=( struct node*)malloc(sizeof(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB36-T1818-2023-綠蘆筍產(chǎn)地加工技術(shù)規(guī)程-江西省
- DB36-T1624-2022-丘陵紅壤茶園測(cè)土配方施肥技術(shù)規(guī)程-江西省
- 春節(jié)前后企業(yè)安全生產(chǎn)培訓(xùn)體系
- 初中化學(xué)中考復(fù)習(xí) 2020中考化學(xué)專項(xiàng)突破(課件)專項(xiàng)二 坐標(biāo)曲線題-課件下載
- 2025年平面設(shè)計(jì)師專業(yè)能力測(cè)試卷:平面設(shè)計(jì)創(chuàng)意靈感與思維拓展能力提升能力培養(yǎng)試題
- 女性時(shí)間管理藝術(shù)
- 2025年學(xué)校新教師入職培訓(xùn)方案關(guān)注教師個(gè)性化成長(zhǎng)
- 低鉀血癥護(hù)理教學(xué)查房
- 計(jì)算機(jī)二級(jí)Delphi學(xué)習(xí)常見誤區(qū)試題及答案
- 甘肅省定西市通渭二中2017屆高三上學(xué)期第一次月考化學(xué)試卷含解析
- 中國老年患者術(shù)后譫妄防治專家共識(shí)
- 科學(xué)上海會(huì)考試卷及答案
- 中小學(xué)校園安全風(fēng)險(xiǎn)防控規(guī)范操作手冊(cè)與案例分析
- 大模型備案-落實(shí)算法安全主體責(zé)任基本情況-XX集團(tuán)有限公司
- 重大危險(xiǎn)源安全管理培訓(xùn)
- 封閉管理的疫情防控課件
- 離婚協(xié)議書正規(guī)打?。?025年版)
- 門診口腔院培訓(xùn)
- 世界各地文化創(chuàng)意產(chǎn)業(yè)發(fā)展報(bào)告表
- 園林植物養(yǎng)護(hù)管理 項(xiàng)目4 任務(wù)4.5行道樹整形修剪學(xué)習(xí)資料
- 房地產(chǎn)交易律師見證書范文
評(píng)論
0/150
提交評(píng)論