北京交通大學(xué)C語言課件總結(jié)_第1頁
北京交通大學(xué)C語言課件總結(jié)_第2頁
北京交通大學(xué)C語言課件總結(jié)_第3頁
北京交通大學(xué)C語言課件總結(jié)_第4頁
北京交通大學(xué)C語言課件總結(jié)_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、你到你到C僅一步之遙!僅一步之遙!高級語言程序設(shè)計高級語言程序設(shè)計主講教師:丁丁主講教師:丁丁計算機(jī)與信息技術(shù)學(xué)院計算機(jī)與信息技術(shù)學(xué)院考試考試n時間:時間:q1月月9日日q9:0011:00n地點:地點:答疑答疑n時間:時間:q1月月7日日q9:0012:00q14:0017:00n地點:地點:q九教北九教北517考試題型考試題型n一、單項選擇題(一、單項選擇題(1-10小題每題小題每題1分,分,11-25小小題每題題每題2分,共分,共40分)分)n二、請認(rèn)真閱讀下列程序,并請在答題紙上寫出二、請認(rèn)真閱讀下列程序,并請在答題紙上寫出各個程序在控制臺屏幕上的輸出結(jié)果(共各個程序在控制臺屏幕上的輸

2、出結(jié)果(共30分)分)q讀程序?qū)懡Y(jié)果讀程序?qū)懡Y(jié)果q程序填空程序填空n三、編程題(共三、編程題(共30分)分)考試形式及分?jǐn)?shù)分布考試形式及分?jǐn)?shù)分布n考試方式為開卷,學(xué)生最多可以帶三本書??荚嚪绞綖殚_卷,學(xué)生最多可以帶三本書。n總成績平時成績(總成績平時成績(60%)考試成績()考試成績(40%)兩點提示兩點提示n讀程序細(xì)心一些讀程序細(xì)心一些n編程題不要空著,能寫多少寫多少編程題不要空著,能寫多少寫多少課程內(nèi)容課程內(nèi)容第一章第一章 程序設(shè)計和程序設(shè)計和C C語言語言第二章第二章 數(shù)據(jù)對象與計算數(shù)據(jù)對象與計算第三章第三章 變量、函數(shù)和控制結(jié)構(gòu)變量、函數(shù)和控制結(jié)構(gòu)第四章第四章 基本程序設(shè)計技術(shù)基本程序

3、設(shè)計技術(shù)第五章第五章 C C程序結(jié)構(gòu)(函數(shù))程序結(jié)構(gòu)(函數(shù))第六章第六章 數(shù)組數(shù)組第七章第七章 指針指針第八章第八章 文件和輸入輸出文件和輸入輸出第九章第九章 結(jié)構(gòu)和其它數(shù)據(jù)機(jī)制結(jié)構(gòu)和其它數(shù)據(jù)機(jī)制第十章第十章 程序開發(fā)技術(shù)程序開發(fā)技術(shù)第十一章第十一章 標(biāo)準(zhǔn)庫標(biāo)準(zhǔn)庫重點(數(shù)據(jù)控制)重點(數(shù)據(jù)控制)n數(shù)據(jù)數(shù)據(jù)qC數(shù)據(jù)類型及存儲性質(zhì)數(shù)據(jù)類型及存儲性質(zhì)n控制結(jié)構(gòu)控制結(jié)構(gòu)q順序、選擇、循環(huán)結(jié)構(gòu)順序、選擇、循環(huán)結(jié)構(gòu)n函數(shù)函數(shù)q定義、聲明及調(diào)用定義、聲明及調(diào)用n數(shù)組數(shù)組q一維數(shù)組、字符數(shù)組指針一維數(shù)組、字符數(shù)組指針q數(shù)組與指針的關(guān)系數(shù)組與指針的關(guān)系n結(jié)構(gòu)結(jié)構(gòu)q結(jié)構(gòu)的定義及使用結(jié)構(gòu)的定義及使用q鏈表的定義及操

4、做鏈表的定義及操做n文件文件q文件的打開、關(guān)閉文件的打開、關(guān)閉q文件的讀寫文件的讀寫n從問題到程序的編程思想從問題到程序的編程思想q程序的函數(shù)分解程序的函數(shù)分解q模塊化程序設(shè)計模塊化程序設(shè)計難點難點n遞歸遞歸n指針指針q數(shù)組與指針的關(guān)系數(shù)組與指針的關(guān)系q命令行參數(shù)命令行參數(shù)q動態(tài)內(nèi)存分配動態(tài)內(nèi)存分配n鏈表鏈表要點要點1:算法及其表示方法:算法及其表示方法n程序數(shù)據(jù)結(jié)構(gòu)算法程序數(shù)據(jù)結(jié)構(gòu)算法q程序程序n程序規(guī)定了計算機(jī)執(zhí)行的動作和動作的順序。程序規(guī)定了計算機(jī)執(zhí)行的動作和動作的順序。q算法:算法:n解決問題的方法和步驟解決問題的方法和步驟q算法的幾個特性算法的幾個特性n有窮性有窮性n確定性無二義確定

5、性無二義n可執(zhí)行性可執(zhí)行性n有有0個或多個輸入個或多個輸入n有有0個或多個輸出個或多個輸出要點要點2:運算符及表達(dá)式:運算符及表達(dá)式n運算符、表達(dá)式及其優(yōu)先級關(guān)系運算符、表達(dá)式及其優(yōu)先級關(guān)系q一元運算符一元運算符(優(yōu)先級最高)(優(yōu)先級最高)q自增、自減運算符自增、自減運算符(循環(huán)每年必考)(循環(huán)每年必考)q算術(shù)運算符算術(shù)運算符(/和和%)q關(guān)系運算符關(guān)系運算符(考點)(考點)q邏輯運算符邏輯運算符(考點)(考點)q位運算符位運算符q條件運算符條件運算符q賦值運算符賦值運算符q逗號運算符逗號運算符例例1:int a = 1, b = 10; do b -= a;a+; while ( b- 0

6、); 執(zhí)行完之后執(zhí)行完之后b的值是?的值是?8b = (a = 2*5, a*4), a+15;b = ?40int x=10,y=3,z;則語句則語句printf(“%4dn”,z=(x%y,x/y);輸出什么?輸出什么? _3例例2:判斷:判斷char型變量型變量ch是否為大寫字母的正確表達(dá)是否為大寫字母的正確表達(dá)式是式是nA、A=ch=A)&(ch=A)&(ch=Z) nD、(A=ch)nC例例3:按位與運算:按位與運算:int a=7,b=12,c=a&b;變量變量c的值的值是是nA、19 nB、4 nC、5 nD、9nB 例例4:假設(shè):假設(shè)a, b為為int型

7、變量,執(zhí)行語句型變量,執(zhí)行語句a=10; b = (a 10) ? -a : a+; 之后,之后,a, b的值為的值為nA. 11, 10nB. 9, 11nC. 10, 11nD. 9, 9 nA要點要點3:C語言的基本數(shù)據(jù)類型語言的基本數(shù)據(jù)類型n標(biāo)識符、關(guān)鍵字、常量、變量標(biāo)識符、關(guān)鍵字、常量、變量nC語言的基本數(shù)據(jù)類型語言的基本數(shù)據(jù)類型qint, float, double, charn變量的存貯類型及其作用域變量的存貯類型及其作用域qautoqregister /不常用不常用qstatic(循環(huán)考點)(循環(huán)考點)qextern例例5:下面程序的輸出結(jié)果是:下面程序的輸出結(jié)果是int ma

8、in() int a = 2, i; for(i=0;i3;i+) printf(%dn,f(a); A、7 B、 7 C、 7 D、 7 8 9 10 7 9 11 13 7 Aint f( int a) int b=0; static int c = 3; b+; c+; return(a+b+c);例例6:已知:已知c為字符型,則執(zhí)行為字符型,則執(zhí)行c2=A+6-3后,后,c2中的值為中的值為nA、BB、68C、不確定的值、不確定的值 D、C n注意:字符型數(shù)據(jù)可以看作整型數(shù)據(jù)注意:字符型數(shù)據(jù)可以看作整型數(shù)據(jù)nB要點要點4:條件:條件if語句語句n條件條件if語句的三種形式語句的三種形式

9、nIf else語句和語句和switch開關(guān)語句的差別開關(guān)語句的差別nswitch開關(guān)語句的形式開關(guān)語句的形式swith(常量表達(dá)式常量表達(dá)式)case 表達(dá)式表達(dá)式1:語句語句; break;case 表達(dá)式表達(dá)式2:語句語句; break;default:語句;語句;例例7:以下程序的輸出結(jié)果是:以下程序的輸出結(jié)果是: 。int main() int a=0,i;for(i=0; i4; i+) switch(i) case 0:case 3: a+=2; break;case 1:case 2: a+=3;default: a+=5;printf(%dn, a);20要點要點5:循環(huán)語句

10、:循環(huán)語句n循環(huán)語句的三種常見形式循環(huán)語句的三種常見形式n循環(huán)結(jié)構(gòu)的三要素循環(huán)不變關(guān)系循環(huán)結(jié)構(gòu)的三要素循環(huán)不變關(guān)系n如何從循環(huán)中跳出如何從循環(huán)中跳出qbreakqcontinuen常見問題及算法常見問題及算法q累加、累乘累加、累乘q函數(shù)的極數(shù)展開逼近(累加、累乘)函數(shù)的極數(shù)展開逼近(累加、累乘)q方程求根(遞推逼近)方程求根(遞推逼近)q求最大約數(shù)和最小公倍數(shù)(遞歸和遞推)求最大約數(shù)和最小公倍數(shù)(遞歸和遞推)qFibonacci數(shù)列(遞歸和遞推)數(shù)列(遞歸和遞推)q求求100以內(nèi)的素數(shù)、求水仙花數(shù)等等以內(nèi)的素數(shù)、求水仙花數(shù)等等例例8:有下面程序段:有下面程序段: int i,j,r; for(

11、i=20,j=7; r=i%j; i=j, j=r) continue; printf(“%3d”,j);運行結(jié)果是運行結(jié)果是: _1例例9:完成下列程序段:任意輸入一個數(shù):完成下列程序段:任意輸入一個數(shù)m,判斷是否是素數(shù),判斷是否是素數(shù)_int main() int m,i,k; _; k=sqrt(m+1); for_ if(m%i=0) break; if_ printf(“%d is a prime numbern ”,m); else printf(“%d is not a prime numbern”,m);#include #include int main() int m,i,

12、k; scanf(%d,&m); k=sqrt(m); for(i=2;i=k;i+) if(m%i=0) break; if(i=k+1) printf(%d is a prime numbern ,m); else printf(%d is not a prime numbern,m);例例10:以下函數(shù)針對長度為:以下函數(shù)針對長度為Len的整型數(shù)組的整型數(shù)組narr采用冒泡排序法進(jìn)行非采用冒泡排序法進(jìn)行非遞減排序,請補(bǔ)全程序。遞減排序,請補(bǔ)全程序。int BubbleSort(int narr,int Len)int i,j; int Temp; if (Len = 0) ret

13、urn -1;for (i = 0; i Len; i+) for (j = 0; j Len - i; j+)if (_) /判斷大小關(guān)系判斷大小關(guān)系Temp = narrj;/交換元素交換元素_; _; return 0;int BubbleSort(int narr,int Len)int i,j; int Temp; if (Len = 0) return -1;for (i = 0; i Len; i+) for (j = 0; j narrj+1) /判斷大小關(guān)系判斷大小關(guān)系Temp = narrj;/交換元素交換元素narrj = narrj+1; narrj+1 = Temp;

14、 return 0;要點要點6:函數(shù):函數(shù)n函數(shù)的定義、聲明及調(diào)用函數(shù)的定義、聲明及調(diào)用int max(int a, int b)/函數(shù)頭函數(shù)接口函數(shù)頭函數(shù)接口 int maxvalue; /函數(shù)體函數(shù)體 maxvalue=(ab)?a:b; return maxvalue;/函數(shù)返回值,函數(shù)可無返回值函數(shù)返回值,函數(shù)可無返回值n函數(shù)聲明的原則和意義函數(shù)聲明的原則和意義n函數(shù)接口及設(shè)計函數(shù)接口及設(shè)計q函數(shù)定義和使用者內(nèi)外部的觀點函數(shù)定義和使用者內(nèi)外部的觀點n函數(shù)的參數(shù)傳遞函數(shù)的參數(shù)傳遞q單向傳遞單向傳遞q雙向傳遞雙向傳遞幾種常見錯誤幾種常見錯誤1. 函數(shù)嵌套定義函數(shù)嵌套定義 int main(

15、) int max(int x, int y) return xy?x:y; 解決方案:將函數(shù)的定義放置在其他函數(shù)之解決方案:將函數(shù)的定義放置在其他函數(shù)之外,不允許嵌套定義。外,不允許嵌套定義。int max(int x, int y) return xy?x:y;int main() int a=10,b=8; max(a,b);幾種常見錯誤幾種常見錯誤2. 某函數(shù)的定義在調(diào)用該函數(shù)的函數(shù)之后某函數(shù)的定義在調(diào)用該函數(shù)的函數(shù)之后int main() int a=10,b=8; max(a, b);int max(int x, int y) return xy?x:y; 解決方案:將函數(shù)的定義放

16、置在解決方案:將函數(shù)的定義放置在調(diào)用該函數(shù)的函數(shù)調(diào)用該函數(shù)的函數(shù)之前或者聲明該函數(shù)的存在之前或者聲明該函數(shù)的存在int max(int x, int y) return xy?x:y;int main() int a=10,b=8; max(a,b);int max(int x, int y);int main()int a=10,b=8; max(a,b);int max(int x, int y) return xy?x:y;幾種常見錯誤幾種常見錯誤3. 調(diào)用函數(shù)時將數(shù)據(jù)類型也寫上調(diào)用函數(shù)時將數(shù)據(jù)類型也寫上int max(int x, int y) return xy?x:y;int ma

17、in() int a=10,b=8; max(int a, int b); 解決方案:只有在定義和聲明的時候需要寫上數(shù)據(jù)類型,無解決方案:只有在定義和聲明的時候需要寫上數(shù)據(jù)類型,無論是參數(shù)或者是返回值,而在調(diào)用時則只需要寫函數(shù)名以及論是參數(shù)或者是返回值,而在調(diào)用時則只需要寫函數(shù)名以及變量。變量。int max(int x, int y) return xy?x:y;int main() int a=10,b=8; max(a,b);幾種常見錯誤幾種常見錯誤4. 將數(shù)組作為參數(shù)時將數(shù)組作為參數(shù)時int find(int a) return ai;int main() int a10; print

18、f(“%dn”,find(a); 解決方案:數(shù)組作為參數(shù)時只需將數(shù)組名作為實際參數(shù),解決方案:數(shù)組作為參數(shù)時只需將數(shù)組名作為實際參數(shù),a10a10是其中一個元素,是其中一個元素,aa只在幾種情況下有意義。只在幾種情況下有意義。1 1)定)定義數(shù)組時不標(biāo)明數(shù)組大小,通過初始化的元素個數(shù)確定數(shù)組義數(shù)組時不標(biāo)明數(shù)組大小,通過初始化的元素個數(shù)確定數(shù)組大小,大小,2 2)定義或聲明函數(shù)時。)定義或聲明函數(shù)時。int find(int a) return ai;int main() int a10; printf(“%dn”,find(a);函數(shù)參數(shù)的意義函數(shù)參數(shù)的意義n函數(shù)最重要的有四部分:函數(shù)名字、函

19、數(shù)返回函數(shù)最重要的有四部分:函數(shù)名字、函數(shù)返回值類型、函數(shù)參數(shù)、函數(shù)體。值類型、函數(shù)參數(shù)、函數(shù)體。n對于調(diào)用某一個函數(shù)的函數(shù)(稱為主調(diào)函數(shù))對于調(diào)用某一個函數(shù)的函數(shù)(稱為主調(diào)函數(shù))而言,前三部分是需要關(guān)注的。而言,前三部分是需要關(guān)注的。n簡單來說,主調(diào)函數(shù)簡單來說,主調(diào)函數(shù)A將參數(shù)傳遞給某函數(shù)將參數(shù)傳遞給某函數(shù)B,B通過計算得到返回值,將返回值傳遞給主調(diào)通過計算得到返回值,將返回值傳遞給主調(diào)函數(shù)函數(shù)A。int max(int x, int y) return xy?x:y;int main() int a=10,b=8; int c=max(a,b); printf(“%dn”, max(a,

20、b);void swap(int *p, int *q) int t = *p; *p = *q; *q = t;int main() int a=10,b=8; swap(&a,&b); printf(“%4d%4dn”,a,b);只需通過返回值返回結(jié)果只需通過返回值返回結(jié)果需要通過參數(shù)返回結(jié)果需要通過參數(shù)返回結(jié)果 n m 調(diào)用時進(jìn)行調(diào)用時進(jìn)行 參數(shù)值的復(fù)制參數(shù)值的復(fù)制 函數(shù)函數(shù) f 的調(diào)用環(huán)境的調(diào)用環(huán)境 函數(shù)函數(shù) f 的內(nèi)部的內(nèi)部 圖圖 5.3 函數(shù)調(diào)用與參數(shù)值的傳遞函數(shù)調(diào)用與參數(shù)值的傳遞 a b 函數(shù)定義:函數(shù)定義: int f(int a, int b) . . 函數(shù)調(diào)

21、用:函數(shù)調(diào)用: f(m, n); C語言的參數(shù)機(jī)制稱為值參數(shù)(簡稱值參)語言的參數(shù)機(jī)制稱為值參數(shù)(簡稱值參)f內(nèi)對內(nèi)對a和和b的操作與的操作與m和和n沒有任何關(guān)系沒有任何關(guān)系例例11:以下是遞歸求最大公約數(shù)的函數(shù),請補(bǔ)充:以下是遞歸求最大公約數(shù)的函數(shù),請補(bǔ)充int gcd(int m, int n)if(m=n)_else if(mn)_;else_;int gcd(int m, int n)if(m=n)return m;else if(mn)return gcd(n,m);elsereturn gcd(m-n,n);要點要點7:基本輸入輸出語句:基本輸入輸出語句ngetchar()nput

22、char()nscanf()nprintf()ngets()nputs()n數(shù)的批量輸入輸出:基本輸入輸出循環(huán)結(jié)構(gòu)數(shù)的批量輸入輸出:基本輸入輸出循環(huán)結(jié)構(gòu)例例12:int m; scanf(“%d”, &m);int *p; scanf(“%d”, p);double d; scanf(“%lf”, &d);float f; scanf(“%f”, &f);double d=1.0; printf(“%f”, d);char a10, *str=a;scanf(“%s”, str); scanf(“%s”, a);printf(“%s”, str); printf(“%s

23、”, a);na是是int型變量,型變量,c是字符變量。是字符變量。 scanf( “%c%c”, &a, &c); c=c-a; printf(“%4d”, c);輸入輸入70之后結(jié)果是之后結(jié)果是() _-7例例13:輸入一批數(shù)據(jù)輸入一批數(shù)據(jù)n采用循環(huán)采用循環(huán)q固定次數(shù)固定次數(shù) for(i=0; in; i+) scanf(); q采用采用scanf的返回值的返回值int a10, i=0;while(scanf(“%d”,&ai+)=1);q其他類型的數(shù)字類似。其他類型的數(shù)字類似。q但是如果輸入字符串時,無法通過但是如果輸入字符串時,無法通過scanf返回值是返回值

24、是否等于否等于1來確定,因為數(shù)字也可作為字符串的內(nèi)容。來確定,因為數(shù)字也可作為字符串的內(nèi)容。判斷判斷scanf是否返回是否返回EOF作為輸入結(jié)束的條件。作為輸入結(jié)束的條件。要點八:數(shù)組要點八:數(shù)組n數(shù)組名是數(shù)組在內(nèi)存中的首地址數(shù)組名是數(shù)組在內(nèi)存中的首地址n數(shù)組下標(biāo)從數(shù)組下標(biāo)從0開始開始n一維數(shù)組上的重要操作一維數(shù)組上的重要操作q排序排序q查找查找q插入插入q刪除刪除q位置交換位置交換q統(tǒng)計(求最大值,平均值等)統(tǒng)計(求最大值,平均值等)n常見問題及算法常見問題及算法q篩法求素數(shù)等篩法求素數(shù)等q多項式求值多項式求值n二維數(shù)組的定義及存儲方式二維數(shù)組的定義及存儲方式q行主序行主序q二維數(shù)組可以視為

25、特殊的一維數(shù)組二維數(shù)組可以視為特殊的一維數(shù)組q初始化方法初始化方法n二維數(shù)組的使用二維數(shù)組的使用q矩陣相加、相乘、轉(zhuǎn)置矩陣相加、相乘、轉(zhuǎn)置q求最大元素、求鞍點等求最大元素、求鞍點等n字符數(shù)組和字符串的關(guān)系字符數(shù)組和字符串的關(guān)系q字符串結(jié)束標(biāo)志字符串結(jié)束標(biāo)志q字符數(shù)組初始化字符數(shù)組初始化q字符串求長字符串求長q字符串拷備字符串拷備q字符串拼接字符串拼接q處理字符串的常用函數(shù)處理字符串的常用函數(shù)nstrcpy()nstrcmp()nstrcat()nstrlen()nstrstr()q注意:不允許給字符數(shù)組直接注意:不允許給字符數(shù)組直接賦值賦值nchar str10;nstr=“bjtu”; 要點

26、九:指針要點九:指針n變量和地址變量和地址n取地址運算符和取內(nèi)容運取地址運算符和取內(nèi)容運算符算符n指針做函數(shù)參數(shù)(傳地址)指針做函數(shù)參數(shù)(傳地址)q形參、實參都是變量形參、實參都是變量n內(nèi)容交換內(nèi)容交換q形參、實參都是地址形參、實參都是地址n地址交換地址交換n數(shù)組做函數(shù)參數(shù)的本質(zhì)數(shù)組做函數(shù)參數(shù)的本質(zhì)n指針和數(shù)組的關(guān)系指針和數(shù)組的關(guān)系q一級指針和一維數(shù)組一級指針和一維數(shù)組np=arr / int *p, arr10;n下標(biāo)法下標(biāo)法n指針地址法指針地址法n指針法指針法q字符指針和字符數(shù)組字符指針和字符數(shù)組np=str / char *p, str10;np=“bjtu”; q指針和二維數(shù)組指針和二

27、維數(shù)組np=&a00/ int *p, a33;指針要點指針要點nint a, *p=&a;q指針變量指針變量p指向整型變量指向整型變量a,指針變量,指針變量p也是一個變量,在內(nèi)也是一個變量,在內(nèi)存中存放著,這個變量的值是一個整型,即存中存放著,這個變量的值是一個整型,即a的地址。的地址。n指針指針p代表代表p這個變量的值,而這個變量的值,而*p代表代表p所指向的變量所指向的變量的值。的值。int a, *p; qp=&a;令令p的值改為的值改為a的地址,即讓的地址,即讓p指向指向a。q*p=10;令令p指向的變量的值改為指向的變量的值改為10,即讓,即讓a=10。ni

28、nt b10, *p=b;q指針變量指針變量p指向數(shù)組指向數(shù)組b,數(shù)組名,數(shù)組名b和指針和指針p基本等價基本等價,除了無,除了無法更改數(shù)組名法更改數(shù)組名b的值。可以采用的值??梢圆捎胋5、p5、*(p+2)、*(b+2)等方式訪問數(shù)組中元素的值。等方式訪問數(shù)組中元素的值。int a10; b=a;是錯誤的是錯誤的。指針要點指針要點nint a1020;qa是一個二維數(shù)組,實質(zhì)上也可把是一個二維數(shù)組,實質(zhì)上也可把a(bǔ)當(dāng)作一個一維數(shù)組,只不當(dāng)作一個一維數(shù)組,只不過過a數(shù)組中的每一個元素是一個一維數(shù)組。數(shù)組中的每一個元素是一個一維數(shù)組。q因此,因此,a+1指的是指的是a數(shù)組中的第二個元素,即數(shù)組中的第

29、二個元素,即a的第二行的地的第二行的地址。址。q而而*(a+1)指的是第二行第一個元素的地址,因此指的是第二行第一個元素的地址,因此*(a+1)+2是是第二行第三個元素的地址,第二行第三個元素的地址, *(*(a+1)+2)是第二行第三個元素是第二行第三個元素的值。的值。nint c(int *x, int *y)q定義了一個函數(shù)定義了一個函數(shù)c,形式參數(shù)為,形式參數(shù)為x和和y,均為整型指針類型,均為整型指針類型,在調(diào)用函數(shù)在調(diào)用函數(shù)c時,可以用數(shù)組名作為實際參數(shù),也可以用指時,可以用數(shù)組名作為實際參數(shù),也可以用指針作為實際參數(shù)。針作為實際參數(shù)。指針要點指針要點nint *p;qp是一個整型指

30、針。是一個整型指針。qscanf(“%d”, p);q運行錯誤,因為運行錯誤,因為p這個指針,不知道指向哪兒。這個指針,不知道指向哪兒。q兩種方法:兩種方法:1、int a; p = &a; scanf(“%d”, p);q2、動態(tài)分配:、動態(tài)分配:p=(int *)malloc(sizeof(int); scanf(“%d”, p);n即使用指針時一定要即使用指針時一定要注意指針指向哪個變量或注意指針指向哪個變量或者哪塊內(nèi)存者哪塊內(nèi)存。如果沒有令該指針指向一塊內(nèi)存,。如果沒有令該指針指向一塊內(nèi)存,則無法訪問該指針?biāo)赶虻淖兞康闹?,即則無法訪問該指針?biāo)赶虻淖兞康闹?,?p。數(shù)組與指針

31、的實質(zhì)數(shù)組與指針的實質(zhì)n看見指針看見指針p或者數(shù)組或者數(shù)組a就要知道是就要知道是一個地址,與普通變一個地址,與普通變量量不同。不同。n字符數(shù)組與字符指針:字符數(shù)組與字符指針:char a20; char *p = “Programming”; qa不能改變自身的值。不能改變自身的值。qp指向一個字符串常量,無法通過指向一個字符串常量,無法通過*p修改修改p指向的字符串常量指向的字符串常量的值。的值。q即:允許即:允許a0=Q;或者或者*a=Q;不允許不允許char b20; a=b;q即:允許即:允許p=a;不允許不允許*p=Q; 或者或者p0=Q;n為何普通變量作為函數(shù)參數(shù)時不能改變主調(diào)函數(shù)

32、中形為何普通變量作為函數(shù)參數(shù)時不能改變主調(diào)函數(shù)中形式參數(shù)的值?而指針或者數(shù)組就可以呢?式參數(shù)的值?而指針或者數(shù)組就可以呢?例例14:下面程序的運行結(jié)果是(:下面程序的運行結(jié)果是( )。)。void swap(int *a, int *b)int *t; t = a; a = b; b = t; int main() int x = 3, y = 5, *p = &x, *q = &y; swap(p, q); printf(%d, %dn,*p,*q); A. 3, 5B. 5, 3C. 3, 3D.5, 5 A例例15:以下程序的輸出結(jié)果是:以下程序的輸出結(jié)果是#includ

33、e #include int printlength(int a)printf(%dn, sizeof(a);return 0;int printlength2(char *a)printf(%dn, strlen(a);return 0;int main()int a10;char *b=hello world;printlength(a);printlength2(b);411n下列程序段的輸出結(jié)果為(下列程序段的輸出結(jié)果為( )。)。nint a = 6, 7, 8, 9, 10, *ptr = a;n*(ptr + 2) += 2; nprintf (%d, %dn, *ptr, *(

34、ptr+2); nA. 8, 10 B. 6, 8 nC. 7, 9 D. 6, 10 nD例例16:例例17:設(shè)以下程序生成可執(zhí)行文件:設(shè)以下程序生成可執(zhí)行文件test.exe,當(dāng)鍵入,當(dāng)鍵入test C Programming Exam后的輸出結(jié)果是?后的輸出結(jié)果是?#include int main (int argc, char *argv) int i; printf(%d, argc); for (i = 0; i next = head?n輸出結(jié)果:輸出結(jié)果:head-numheadhead涉及到的幾種鏈表操作涉及到的幾種鏈表操作n構(gòu)造鏈表構(gòu)造鏈表n刪除鏈表節(jié)點刪除鏈表節(jié)點n插入

35、鏈表節(jié)點插入鏈表節(jié)點n遍歷鏈表節(jié)點遍歷鏈表節(jié)點構(gòu)造鏈表構(gòu)造鏈表nn=7n一個循環(huán),總共循環(huán)一個循環(huán),總共循環(huán)7次,每次構(gòu)造一個節(jié)點,次,每次構(gòu)造一個節(jié)點,并將新構(gòu)造的節(jié)點插入到鏈表的最后并將新構(gòu)造的節(jié)點插入到鏈表的最后while(i=0; inext=p; q=p;6 6nextnext 5 5nextnext qp構(gòu)造鏈表構(gòu)造鏈表n用函數(shù)實現(xiàn),參數(shù)為人數(shù)用函數(shù)實現(xiàn),參數(shù)為人數(shù)n,返回值為,返回值為struct person *struct person *constructlink(int n) struct person *p=NULL, *q=NULL, *head; for(i=0; inum=i+1; if(NULL!=q) q-next=p; else head=p; q=p; q-next=head; return head;刪除鏈表節(jié)點刪除鏈表節(jié)點n刪除刪除p節(jié)點,讓節(jié)點,讓q的的next指向指向rq-next=r;free(p);6 6nextnext 5 5nextnext qp7 7nextnext r5 5nextnext q7 7nextnext rq-next=p-

溫馨提示

  • 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

提交評論