C語言程序設(shè)計(jì)復(fù)習(xí)提綱_第1頁
C語言程序設(shè)計(jì)復(fù)習(xí)提綱_第2頁
C語言程序設(shè)計(jì)復(fù)習(xí)提綱_第3頁
C語言程序設(shè)計(jì)復(fù)習(xí)提綱_第4頁
C語言程序設(shè)計(jì)復(fù)習(xí)提綱_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、- PAGE 36 -C語言程序設(shè)計(jì)復(fù)習(xí)提綱一、Visual C+6.0開發(fā)環(huán)境1、了解Visual C+6.0的安裝過程;2、了解Visual C+6.0的工作界面,菜單和工具欄的使用;二、掌握C語言程序運(yùn)行的過程1、編輯:是指把按照C語法規(guī)則編寫的程序代碼通過編輯器(Visual C+ 6.0,Turbo C 3.0)輸入計(jì)算機(jī),并存盤。在存盤時(shí),C源文件的擴(kuò)展名為 .c 2、編譯:對(duì)源程序進(jìn)行編譯,即將源程序轉(zhuǎn)換為擴(kuò)展名為.obj的二進(jìn)制代碼;即生成該源文件的目標(biāo)代碼。 3、連接:將用戶程序生成的多個(gè)目標(biāo)代碼文件(.obj)和系統(tǒng)提供的庫文件(.lib)中的某些代碼連接在一起,生成一個(gè)可

2、執(zhí)行文件(.exe)。4、執(zhí)行:執(zhí)行生成的可執(zhí)行代碼,并輸出結(jié)果。5、調(diào)試:是將編制的程序投入實(shí)際運(yùn)行前,用手工或編譯程序等方法進(jìn)行測(cè)試,修正語法錯(cuò)誤和邏輯錯(cuò)誤的過程。三、結(jié)構(gòu)化程序設(shè)計(jì)的基本概念1、概念以模塊化設(shè)計(jì)為中心,將待開發(fā)的軟件系統(tǒng)劃分為若干個(gè)相互獨(dú)立的模塊,將原來較為復(fù)雜的問題化簡(jiǎn)為一系列簡(jiǎn)單模塊的設(shè)計(jì),任何模塊都可以使用一些基本的結(jié)構(gòu)來實(shí)現(xiàn),任何復(fù)雜的程序,都可以使用這些基本結(jié)構(gòu)按一定的順序組合起來,這些基本結(jié)構(gòu)的特點(diǎn)都是只有一個(gè)入口、一個(gè)出口,這樣的程序設(shè)計(jì)方法稱為結(jié)構(gòu)化程序設(shè)計(jì)。2、基本思想結(jié)構(gòu)化程序設(shè)計(jì)的基本思想是采用自頂向下,逐步細(xì)化、模塊化設(shè)計(jì)、結(jié)構(gòu)化編碼的程序設(shè)計(jì)方法

3、和單入口單出口的控制結(jié)構(gòu)。自頂向下、逐步細(xì)化的程序設(shè)計(jì)方法從問題本身開始,經(jīng)過逐步細(xì)化,將解決問題的步驟分解為由基本程序結(jié)構(gòu)模塊組成的結(jié)構(gòu)化程序框圖;單入口單出口的思想認(rèn)為一個(gè)復(fù)雜的程序,如果它僅是由順序、選擇和循環(huán)三種基本程序結(jié)構(gòu)通過組合、嵌套構(gòu)成,那么這個(gè)新構(gòu)造的程序一定是一個(gè)單入口單出口的程序。據(jù)此就很容易編寫出結(jié)構(gòu)良好、易于調(diào)試的程序來。3、三種基本結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)4、三種基本結(jié)構(gòu)的特點(diǎn)只有一個(gè)入口只有一個(gè)出口每一個(gè)基本結(jié)構(gòu)中的每一部分都有機(jī)會(huì)執(zhí)行到結(jié)構(gòu)內(nèi)不存在“死循環(huán)”5、設(shè)計(jì)原則自頂向下逐步細(xì)化模塊化設(shè)計(jì)結(jié)構(gòu)化編碼6、結(jié)構(gòu)化程序設(shè)計(jì)方法要求把程序的結(jié)構(gòu)規(guī)定為順序、選擇和

4、循環(huán)三種基本機(jī)構(gòu),并提出了自頂向下、逐步求精、模塊化程序設(shè)計(jì)等原則。結(jié)構(gòu)化程序設(shè)計(jì)是把模塊分割方法作為對(duì)大型系統(tǒng)進(jìn)行分析的手段,使其最終轉(zhuǎn)化為三種基本結(jié)構(gòu),其目的是為了解決由許多人共同開發(fā)大型軟件時(shí),如何高效率地完成可靠系統(tǒng)的問題。程序的可讀性好、可維護(hù)性好成為評(píng)價(jià)程序質(zhì)量的首要條件。缺點(diǎn):程序和數(shù)據(jù)結(jié)構(gòu)松散地耦合在一起。解決此問題的方法就是采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(OOP)。四、C程序的基本組成:C程序是由若干個(gè)函數(shù)構(gòu)成的,至少有一個(gè)主函數(shù)main(),各函數(shù)在程序中的前后位置是任意的。C程序的基本組成:聲明區(qū)、主程序區(qū)、函數(shù)定義區(qū)。1、聲明區(qū)處在程序文件的所有函數(shù)的外部,一般包含:包含頭

5、文件、宏定義、類定義、結(jié)構(gòu)體定義、函數(shù)聲明、全局變量聲明、條件編譯等。2、主程序區(qū)主程序以main()函數(shù)開始,main()函數(shù)(主函數(shù))是程序運(yùn)行時(shí)的入口,包含局部變量的聲明、函數(shù)調(diào)用、一般運(yùn)算、結(jié)構(gòu)控制、對(duì)象與結(jié)構(gòu)的處理、文件處理等。3、函數(shù)定義區(qū)函數(shù)的定義包含函數(shù)說明和函數(shù)體兩部分。圖1 C語言數(shù)據(jù)類型數(shù)據(jù)類型基本類型空類型(無值類型)void構(gòu)造類型指針類型實(shí)型(浮點(diǎn)型)聯(lián)合型類型union單字符型char整型int單精度型float雙精度型double字符型寬字符型w-char邏輯型bool類類型class枚舉型類型enum結(jié)構(gòu)類型struct數(shù)組類型五、C的數(shù)據(jù)類型、運(yùn)算符、表達(dá)式

6、1、常量和變量、常量:在程序中直接用符號(hào)(文字)表示的數(shù)據(jù) 整型常量:表示形式有十進(jìn)制、八進(jìn)制(以0開頭)和十六進(jìn)制(以0 x或0X開頭)。整型常量可以后綴字母L(或l)表示長(zhǎng)整數(shù),后綴字母U(或u)表示無符號(hào)整數(shù)。實(shí)型常量(浮點(diǎn)型常量):表示形式有一般形式和指數(shù)形式。實(shí)型常量缺省為double型,如后綴f或F,則為float型。字符常量:用單引號(hào)括起來的一個(gè)字符。不可顯示的字符可用轉(zhuǎn)義序列的方法來表示(見P26)。字符串常量:用雙引號(hào)括起來的字符序列。布爾常量:false,true。 符號(hào)常量:#define 宏名 常數(shù)例:下列哪些常量是合法的常量:12.7, -6.87E-2, 0XAbC

7、D, 、0625L, 87U, -0 x98C2變量:指程序在運(yùn)行時(shí)其值可改變的量。變量應(yīng)先定義(聲明其類型和名稱)后使用; 變量定義的一般形式為: ,;在定義一個(gè)變量的同時(shí),也可以給它賦以初值。 變量的命名規(guī)則(見P9)2、數(shù)據(jù)類型、基本數(shù)據(jù)類型(見P23)、構(gòu)造類型又稱為組合類型,它是由基本類型按照某種規(guī)則組合而成的。數(shù)組:是由具有相同數(shù)據(jù)類型的元素組成的集合。結(jié)構(gòu)體:是由不同的數(shù)據(jù)類型構(gòu)成的一種混合的數(shù)據(jù)結(jié)構(gòu),構(gòu)成結(jié)構(gòu)體的成員的數(shù)據(jù)類型一般不同,并且在內(nèi)存中分別占據(jù)不同的存儲(chǔ)單元。共用體:是類似于結(jié)構(gòu)體的一種構(gòu)造類型,與結(jié)構(gòu)體不同的是構(gòu)成共同體的數(shù)據(jù)成員共用同一段內(nèi)存單元。枚舉:是將變量

8、的值一一列舉出來,變量的值只限于列舉出來的值的范圍內(nèi)。、指針類型變量用于存儲(chǔ)另一變量的地址,而不能用來存放基本類型的數(shù)據(jù)。它在內(nèi)存中占據(jù)一個(gè)存儲(chǔ)單元。、類是一個(gè)數(shù)據(jù)類型,它定義的是一種對(duì)象類型,由數(shù)據(jù)和方法組成,描述了屬于該類型的所有對(duì)象的性質(zhì)。 3、運(yùn)算符和表達(dá)式、算術(shù)運(yùn)算符和算術(shù)表達(dá)式注意:int i=1.2*3; /結(jié)果為3,而不是3.6。 int i=5/3結(jié)果為1。、賦值運(yùn)算符和賦值表達(dá)式注意:賦值運(yùn)算符的結(jié)合性是從右至左的復(fù)合賦值運(yùn)算符:int a=12; a+=a-=a*=a;、關(guān)系運(yùn)算符和關(guān)系表達(dá)式注意:關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。例如:a+bc 等價(jià)于 (a+b)c,a

9、!=bc等價(jià)于a!=(bc) “=”與“=”的區(qū)別關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符、邏輯運(yùn)算符與邏輯表達(dá)式注意:邏輯非的優(yōu)先級(jí)最高,邏輯與次之,邏輯或最低邏輯運(yùn)算符的短路特性。int x,y,z; x=y=z=-1; +x&+y|+z; printf(“x=%dty=%dtz=%dn”,x,y,z);(結(jié)果:0 -1 0)x=y=z=-1; +x|+y&+z; printf(“x=%dty=%dtz=%dn”,x,y,z); (結(jié)果:0 0 -1)x=y=z=-1; +x&+y&+z; printf(“x=%dty=%dtz=%dn”,x,y,z); (結(jié)果:0 -1 -1)、自增(+)、自減

10、(-)運(yùn)算符注意:自增(+)、自減(-)運(yùn)算符的前置用法和后置用法的區(qū)別。int i, j, k; int m, n, p; i = 8; j = 10; k = 12; /* 自增在操作數(shù)之前 */ m = +i;printf(i = %dn, i);printf(m = %dn, m); (結(jié)果:9 9)/* 自減在操作數(shù)之后 */n = j-; printf(j = %dn, j); printf(n = %dn, n); (結(jié)果:9 10)/* 自增、自減的混合運(yùn)算 */p = (+m)*(n+)+(-k); printf(k = %dn, k); printf(p = %dn, p)

11、; (結(jié)果:11 111)、條件運(yùn)算符表達(dá)式1?表達(dá)式2:表達(dá)式3注意:結(jié)合性是自右向左。ab?a:cd?c:d相當(dāng)于ab?a:(cd?c:d)條件運(yùn)算符的優(yōu)先級(jí)別高于賦值運(yùn)算符,低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。如:ab?a-b:b-a相當(dāng)于ab?(a-b):(b-a) 、位運(yùn)算符位運(yùn)算符是對(duì)其操作數(shù)按其二進(jìn)制形式逐位進(jìn)行運(yùn)算,參加位運(yùn)算的操作數(shù)必須為整數(shù)。如:int a=5,b=6;a&b=4;a|b=7;ab=3;b=249;b2=1。、逗號(hào)運(yùn)算符表達(dá)式, 表達(dá)式, , 表達(dá)式n注意:自左至右,依次計(jì)算各表達(dá)式的值,“表達(dá)式n” 的值即為整個(gè)逗號(hào)表達(dá)式的值。如:a = 3 * 5, a * 4

12、, a + 5的值為20。4、運(yùn)算符的優(yōu)先級(jí)與結(jié)合性、所謂結(jié)合性是指,當(dāng)一個(gè)操作數(shù)兩側(cè)的運(yùn)算符具有相同的優(yōu)先級(jí)時(shí),該操作數(shù)是先與左邊的運(yùn)算符結(jié)合,還是先與右邊的運(yùn)算符結(jié)合。自左至右的結(jié)合方向,稱為左結(jié)合性。反之,稱為右結(jié)合性。結(jié)合性是語言的獨(dú)有概念。除單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符是右結(jié)合性外,其它運(yùn)算符都是左結(jié)合性。、表達(dá)式求值按運(yùn)算符的優(yōu)先級(jí)高低次序執(zhí)行。例如,先乘除后加減。如果在一個(gè)運(yùn)算對(duì)象(或稱操作數(shù))兩側(cè)的運(yùn)算符的優(yōu)先級(jí)相同,則按語言規(guī)定的結(jié)合方向(結(jié)合性)進(jìn)行。例如,算術(shù)運(yùn)算符的結(jié)合方向是“自左至右”,即:在執(zhí)行“a b + c”時(shí),變量b先與減號(hào)結(jié)合,執(zhí)行“a - b”;然后

13、再執(zhí)行加c的運(yùn)算。六、順序結(jié)構(gòu)程序設(shè)計(jì)數(shù)據(jù)的輸入和輸出1、格式化輸出printf()函數(shù)和格式化輸入scanf()函數(shù)、格式化輸出函數(shù)(printf())和格式化輸入函數(shù)(scanf())都包含在頭文件“stdio.h”中。、格式化輸出printf()函數(shù)printf()函數(shù)的一般格式如下:printf(格式字符串 ,輸出項(xiàng)表);如:printf(“x=%d”,x)輸出項(xiàng)表:要輸出的數(shù)據(jù)項(xiàng)(可以沒有,多個(gè)時(shí)以“,”分隔)格式控制串:包含兩種信息格式說明: %修飾符格式字符 ,用于指定輸出格式普通字符或轉(zhuǎn)義序列:原樣輸出。格式控制字符:格式轉(zhuǎn)換字符含義舉例%d,%i以十進(jìn)制整數(shù)輸出int a=6

14、5;printf(“%d”,a)/65%x,%X以十六進(jìn)制數(shù)輸出無符號(hào)整數(shù)int a=65;printf(“%x”,a)/41%o以八進(jìn)制數(shù)輸出無符號(hào)整數(shù)int a=65;printf(“%o”,a)/101%u以十進(jìn)制數(shù)輸出無符號(hào)整數(shù)int a=-1;printf(“%u”,a)/65535%c輸出一個(gè)字符型數(shù)據(jù)int a=65;printf(“%c”,a)/A%s輸出一個(gè)字符串printf(“%s”,“abcd”)%e,%E以指數(shù)形式輸出一個(gè)浮點(diǎn)型數(shù)據(jù)(小數(shù)位數(shù)缺省值為6位)float x=984.235497426;printf(%e,x);/9.842355e+002%f以十進(jìn)制小數(shù)形

15、式輸出一個(gè)浮點(diǎn)型數(shù)據(jù)(小數(shù)位數(shù)缺省值為6位)float x=984.235432426;printf(%f,x);/984.235413%g,%G按照%e,%f輸出寬度較短的格式輸出,不輸出無意義的0float x=9.8;printf(%g,x);/9.8、格式化輸入scanf()函數(shù)scanf()函數(shù)的一般格式scanf(格式字符串, 輸入項(xiàng)首地址表);格式字符串。格式字符串可以包含3種類型的字符:格式指示符、空白字符(空格、Tab鍵和回車鍵)和非空白字符(又稱普通字符)。格式指示符與printf()函數(shù)的相似,空白字符作為相鄰2個(gè)輸入數(shù)據(jù)的缺省分隔符,非空白字符在輸入有效數(shù)據(jù)時(shí),必須原樣

16、一起輸入。輸入項(xiàng)首地址表由若干個(gè)輸入項(xiàng)首地址組成,相鄰2個(gè)輸入項(xiàng)首地址之間,用逗號(hào)分開。輸入項(xiàng)首地址表中的地址,可以是變量的首地址,也可以是字符數(shù)組名或指針變量。變量首地址的表示方法: &變量名其中“&”是地址運(yùn)算符。數(shù)據(jù)輸入操作如果相鄰2個(gè)格式指示符之間,不指定數(shù)據(jù)分隔符(如逗號(hào)、冒號(hào)等),則相應(yīng)的2個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)空格分開,或者用Tab鍵分開,或者輸入1個(gè)數(shù)據(jù)后,按回車,然后再輸入下1個(gè)數(shù)據(jù)。例如,scanf(%d%d,&num1,&num2);假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為:1236或者:12 36 注:使用“”符號(hào)表示按回車鍵操作,在輸入數(shù)據(jù)操

17、作中的作用是,通知系統(tǒng)輸入操作結(jié)束?!案袷阶址敝谐霈F(xiàn)的普通字符(包括轉(zhuǎn)義字符形式的字符),務(wù)必原樣輸入。 例如,scanf(%d,%d,&num1,&num2); 假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:12,36七、選擇結(jié)構(gòu)程序設(shè)計(jì)1、if語句、if語句的一般格式 if(表達(dá)式) 語句組1; else 語句組2; if語句中的“表達(dá)式”必須用“(”和“)”括起來。else子句(可選)是if語句的一部分,必須與if配對(duì)使用,不能單獨(dú)使用。當(dāng)if和else下面的語句組,僅由一條語句構(gòu)成時(shí),也可不使用復(fù)合語句形式(即去掉花括號(hào))。、if語句的執(zhí)行過程缺省else子句時(shí)當(dāng)“

18、表達(dá)式”的值不等于0(即判定為“邏輯真”)時(shí),則執(zhí)行語句組1,否則直接轉(zhuǎn)向執(zhí)行下一條。指定else子句時(shí)當(dāng)“表達(dá)式”的值不等于0(即判定為“邏輯真”)時(shí),則執(zhí)行語句組1,然后轉(zhuǎn)向下一條語句;否則,執(zhí)行語句組2。、if語句的嵌套與嵌套匹配原則if語句允許嵌套。所謂if語句的嵌套是指,在“語句組1”或(和)“語句組2”中,又包含有if語句的情況。if語句嵌套時(shí),else子句與if的匹配原則:與在它上面、距它最近、且尚未匹配的if配對(duì)。例:鐵路托運(yùn)行李,假設(shè)每張車票可按每公斤0.5元托運(yùn)50公斤以內(nèi)的行李,如果超過50公斤時(shí),超過的部分每公斤加價(jià)0.3元,試編寫一道計(jì)算行李托運(yùn)費(fèi)的程序。解:/*程序

19、功能:計(jì)算行李托運(yùn)費(fèi)*/#include Void main() float w,x; printf(輸入行李的重量:); scanf(%f,&w); if(w50.0) x=50.0*0.5+(w-50.0)*0.8; else x=w*0.5;printf(行李重量w=%.2f公斤,托運(yùn)費(fèi)x=%.2f元n,w,x); 2switch語句、switch語句的一般形式switch(表達(dá)式) case 常量表達(dá)式1:語句組;break; case 常量表達(dá)式2:語句組;break; case 常量表達(dá)式:語句組;break; default:語句組;break; 、執(zhí)行過程 當(dāng)switch后面“

20、表達(dá)式”的值,與某個(gè)case后面的“常量表達(dá)式”的值相同時(shí),就執(zhí)行該case后面的語句(組);當(dāng)執(zhí)行到break語句時(shí),跳出switch語句,轉(zhuǎn)向執(zhí)行switch語句的下一條。如果沒有任何一個(gè)case后面的“常量表達(dá)式”的值,與“表達(dá)式”的值匹配,則執(zhí)行default 后面的語句(組)。然后,再執(zhí)行switch語句的下一條。說明switch后面的“表達(dá)式”,可以是int、char和枚舉型中的一種。每個(gè)case后面“常量表達(dá)式”的值,必須各不相同,否則會(huì)出現(xiàn)相互矛盾的現(xiàn)象(即對(duì)表達(dá)式的同一值,有兩種或兩種以上的執(zhí)行方案)。case后面的常量表達(dá)式僅起語句標(biāo)號(hào)作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入

21、口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行,不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上break語句,以便結(jié)束switch語句。各case及default子句的先后次序,不影響程序執(zhí)行結(jié)果。多個(gè)case子句,可共用同一語句(組)用switch語句實(shí)現(xiàn)的多分支結(jié)構(gòu)程序,完全可以用if語句或if語句的嵌套來實(shí)現(xiàn)。例:從鍵盤上輸入一個(gè)百分制成績(jī)score,按下列原則輸出其等級(jí):score90,等級(jí)為A;80score90,等級(jí)為B;70score80,等級(jí)為C;60score70,等級(jí)為D;score60,等級(jí)為E。解:#include Void main()int score, grade; printf(“Input a

22、score(0100): ”); scanf(“%d”, &score); grade = score/10; /*將成績(jī)整除10,轉(zhuǎn)化成switch語句中的case標(biāo)號(hào)*/ switch (grade)case 10: case 9: printf(“grade=An”); break;case 8: printf(grade=Bn); break; case 7: printf(grade=Cn); break; case 6: printf(grade=Dn); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“

23、grade=En”); break; default: printf(“The score is out of range!n”);八、循環(huán)程序設(shè)計(jì)1、while語句、一般格式 while(循環(huán)繼續(xù)條件) 循環(huán)體語句組;、執(zhí)行過程求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值為非0,轉(zhuǎn);否則轉(zhuǎn)。執(zhí)行循環(huán)體語句組,然后轉(zhuǎn)。執(zhí)行while語句的下一條。例:/*程序功能:求1100的累計(jì)和*/#include void main() int i=1,sum=0; /*初始化循環(huán)控制變量i和累計(jì)器sum*/ while( i=100 ) sum += i;/*實(shí)現(xiàn)累加*/ i+;/*循環(huán)控制變量i增1*/ pr

24、intf(“sum=%dn”,sum); 程序運(yùn)行情況如下:sum=50502、do-while語句(直到型循環(huán))、一般格式 do 循環(huán)體語句組; while(循環(huán)繼續(xù)條件);/*本行的分號(hào)不能缺省*/當(dāng)循環(huán)體語句組僅由一條語句構(gòu)成時(shí),可以不使用復(fù)合語句形式。、執(zhí)行過程執(zhí)行循環(huán)體語句組。計(jì)算“循環(huán)繼續(xù)條件”表達(dá)式。如果“循環(huán)繼續(xù)條件”表達(dá)式的值為非 0(真),則轉(zhuǎn)向繼續(xù)執(zhí)行;否則,轉(zhuǎn)向。執(zhí)行do-while的下一條語句。、do-while循環(huán)語句的特點(diǎn)是:先執(zhí)行循環(huán)體語句組,然后再判斷循環(huán)條件。do-while語句比較適用于處理:不論條件是否成立,先執(zhí)行1次循環(huán)體語句組的情況。例:用do-wh

25、ile語句求解1100的累計(jì)和。/*程序功能:求1100的累計(jì)和*/main() int i=1, sum=0; /*定義并初始化循環(huán)控制變量,以及累計(jì)器*/ Do sum += i; /*累加*/ i+; while(i=100);/*循環(huán)繼續(xù)條件:i=100*/ printf(“sum=%dn”,sum); 3、for語句、for語句的一般格式 for(變量賦初值;循環(huán)繼續(xù)條件;循環(huán)變量增值) 循環(huán)體語句組;、for語句的執(zhí)行過程求解“變量賦初值”表達(dá)式。求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值非0,執(zhí)行;否則,轉(zhuǎn)至。執(zhí)行循環(huán)體語句組,并求解“循環(huán)變量增值”表達(dá)式,然后轉(zhuǎn)向。執(zhí)行for語句的下

26、一條語句。、說明“變量賦初值”、“循環(huán)繼續(xù)條件”和“循環(huán)變量增值”部分均可缺省,甚至全部缺省,但其間的分號(hào)不能省略。當(dāng)循環(huán)體語句組僅由一條語句構(gòu)成時(shí),可以不使用復(fù)合語句形式?!把h(huán)變量賦初值”表達(dá)式,既可以是給循環(huán)變量賦初值的賦值表達(dá)式,也可以是與此無關(guān)的其它表達(dá)式(如逗號(hào)表達(dá)式)。例如,for(sum=0;i=100;i+) sum += i; for(sum=0,i=1;i=100;i+) sum += i;“循環(huán)繼續(xù)條件”部分是一個(gè)邏輯量,除一般的關(guān)系(或邏輯)表達(dá)式外,也允許是數(shù)值(或字符)表達(dá)式。如:while(!E)等價(jià)于while(0),while(E)等價(jià)于while(1)。例

27、:求n的階乘n!(n!=1*2*n)。/*程序功能:求n!*/main() int i, n; long fact=1;/*將累乘器fact初始化為1*/ printf(“Input n: ”); scanf(“%d”, &n); for(i=1; i=n; i+)fact *= i;/*實(shí)現(xiàn)累乘*/ printf(%d ! = %ldn, n, fact); 程序運(yùn)行情況如下:Input n: 55 ! = 1204、循環(huán)的比較、While和 for都是先判斷后循環(huán),而do-while是先循后判斷。即do-while語句在條件不成立時(shí)循環(huán)體也要被執(zhí)行一次。、while和do-while語句的

28、條件表達(dá)式只有一個(gè),只起到控制循環(huán)結(jié)束的作用,循環(huán)變量的初值等都用其他語句完成;for語句則有3個(gè)表達(dá)式,不僅能起到控制循環(huán)結(jié)束的作用,還可給循環(huán)變量賦初值。5、循環(huán)的嵌套、循環(huán)語句的循環(huán)體內(nèi),又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。循環(huán)嵌套的概念,對(duì)所有高級(jí)語言都是一樣的。、for語句和while語句允許嵌套,do-while語句也不例外。例:編程: 打印下列圖形 * * * * *解:/*程序功能:打印5行*,第一行1個(gè),第二行3個(gè),第三行5個(gè).*/#include void main() int i=1; while(i=5) int j=1,k=1; while(j=5-i) pr

29、intf( ); j+; while(k=2*i-1) printf(*); k+; printf(n); i+; 6、break語句與continue語句、一般格式: break; continue;、功能break:強(qiáng)行結(jié)束循環(huán),轉(zhuǎn)向執(zhí)行循環(huán)語句的下一條語句。continue:對(duì)于for循環(huán),跳過循環(huán)體其余語句,轉(zhuǎn)向循環(huán)變量增量表達(dá)式的計(jì)算;對(duì)于while和do-while循環(huán),跳過循環(huán)體其余語句,但轉(zhuǎn)向循環(huán)繼續(xù)條件的判定。、說明break能用于循環(huán)語句和switch語句中,continue只能用于循環(huán)語句中。循環(huán)嵌套時(shí),break和continue只影響包含它們的最內(nèi)層循環(huán),與外層循環(huán)無

30、關(guān)。例:求輸入的十個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及其平均值#include void main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d,&a);if(a=0) continue;num+;sum+=a; printf(%d plus integers sum :%6.0fn,num,sum); printf(Mean value:%6.2fn,sum/num);例:編程:設(shè)計(jì)一個(gè)程序完成以下功能:若輸入英文字母,則原樣輸出;輸入其他字符,則不輸出,直到輸入q鍵結(jié)束。解:#include void main()char ch;doch=g

31、etchar();if(ch=Q | ch=q)break;else if(ch=A & ch=a & ch=z)putchar(ch);while(1);九、數(shù)組及其使用1、一維數(shù)組、一維數(shù)組的定義:數(shù)據(jù)類型 數(shù)組名常量表達(dá)式, 數(shù)組名2常量表達(dá)式2;“數(shù)據(jù)類型”是指數(shù)組元素的數(shù)據(jù)類型。數(shù)組名,與變量名一樣,必須遵循標(biāo)識(shí)符命名規(guī)則。“常量表達(dá)式”必須用方括號(hào)括起來,指的是數(shù)組的元素個(gè)數(shù)(又稱數(shù)組長(zhǎng)度),它是一個(gè)整型值,其中可以包含常數(shù)和符號(hào)常量,但不能包含變量。數(shù)組元素的下標(biāo),是元素相對(duì)于數(shù)組起始地址的偏移量,所以從0開始順序編號(hào)。數(shù)組名中存放的是一個(gè)地址常量,它代表整個(gè)數(shù)組的首地址。同一數(shù)

32、組中的所有元素,按其下標(biāo)的順序占用一段連續(xù)的存儲(chǔ)單元。、數(shù)組元素的引用引用數(shù)組中的任意一個(gè)元素的形式: 數(shù)組名下標(biāo)表達(dá)式“下標(biāo)表達(dá)式”可以是任何非負(fù)整型數(shù)據(jù),取值范圍是0(元素個(gè)數(shù)-1)。1個(gè)數(shù)組元素,實(shí)質(zhì)上就是1個(gè)變量,它具有和相同類型單個(gè)變量一樣的屬性,可以對(duì)它進(jìn)行賦值和參與各種運(yùn)算。在C語言中,數(shù)組作為1個(gè)整體,不能參加數(shù)據(jù)運(yùn)算,只能對(duì)單個(gè)的元素進(jìn)行處理。、一維數(shù)組元素的初始化初始化格式:數(shù)據(jù)類型 數(shù)組名常量表達(dá)式初值表如果對(duì)數(shù)組的全部元素賦以初值,定義時(shí)可以不指定數(shù)組長(zhǎng)度(系統(tǒng)根據(jù)初值個(gè)數(shù)自動(dòng)確定)。如果被定義數(shù)組的長(zhǎng)度,與初值個(gè)數(shù)不同,則數(shù)組長(zhǎng)度不能省略?!俺踔当怼敝械某踔祩€(gè)數(shù),可以

33、少于元素個(gè)數(shù),即允許只給部分元素賦初值。例:從鍵盤上任意輸入n個(gè)整數(shù),用冒泡法按從小到大地排序,并在屏幕上顯示出來。解:冒泡法排序的基本思想:從第一個(gè)數(shù)開始依次對(duì)相鄰兩數(shù)進(jìn)行比較,如次序?qū)t不做任何操作;如次序不對(duì)則使這兩個(gè)數(shù)交換位置。第一遍的(N-1)次比較后,最大的數(shù)已放在最后,第二遍只需考慮(N-1)個(gè)數(shù),以此類推直到第(N-1)遍比較后就可以完成排序。#include iostream.h#define N 10 /*定義符號(hào)常量(數(shù)據(jù)個(gè)數(shù)N)*/void main() int dataN;/*定義1個(gè)1維整型數(shù)組data*/ int i,j,temp;/*定義循環(huán)變量和臨時(shí)變量*/

34、cout請(qǐng)輸入10個(gè)數(shù):n; for(i=0; idatai; /*冒泡法排序*/ for(i=0; iN-1; i+) /*外循環(huán):控制比較趟數(shù)*/ for(j=0; jdataj+1) /*如果dataj大于dataj+1,交換兩者的位置*/ temp=dataj; dataj=dataj+1; dataj+1=temp; ; /*輸出排序后的數(shù)據(jù)*/ coutn輸出排序后的結(jié)果:n; for(i=0; iN; i+) coutdatai ; coutendl; 2、二維數(shù)組、二維數(shù)組的定義: 數(shù)據(jù)類型 數(shù)組名行常量表達(dá)式列常量表達(dá)式, 數(shù)組名2行常量表達(dá)式2列常量表達(dá)式2;數(shù)組元素在內(nèi)存

35、中的排列順序?yàn)椤鞍葱写娣拧?,即先順序存放第一行的元素,再存放第二行,以此類推。設(shè)有一個(gè)m*n的數(shù)組x,則第i行第j列的元素xij在數(shù)組中的位置為:i*n+j(注意:行號(hào)、列號(hào)均從0開始計(jì)數(shù))。、二維數(shù)組元素的引用引用2維數(shù)組元素的形式為:數(shù)組名行下標(biāo)表達(dá)式列下標(biāo)表達(dá)式“行下標(biāo)表達(dá)式”和“列下標(biāo)表達(dá)式”,都應(yīng)是整型表達(dá)式或符號(hào)常量?!靶邢聵?biāo)表達(dá)式”和“列下標(biāo)表達(dá)式”的值,都應(yīng)在已定義數(shù)組大小的范圍內(nèi)。假設(shè)有數(shù)組x34,則可用的行下標(biāo)范圍為02,列下標(biāo)范圍為03。對(duì)基本數(shù)據(jù)類型的變量所能進(jìn)行的操作,也都適合于相同數(shù)據(jù)類型的2維數(shù)組元素。、二維數(shù)組元素的初始化按行賦初值數(shù)據(jù)類型 數(shù)組名行常量表達(dá)式列

36、常量表達(dá)式第0行初值表,第1行初值表,最后1行初值表;賦值規(guī)則:將“第0行初值表”中的數(shù)據(jù),依次賦給第0行中各元素;將“第1行初值表”中的數(shù)據(jù),依次賦給第1行各元素;以此類推。按2維數(shù)組在內(nèi)存中的排列順序給各元素賦初值數(shù)據(jù)類型 數(shù)組名行常量表達(dá)式列常量表達(dá)式初值表;賦值規(guī)則:按2維數(shù)組在內(nèi)存中的排列順序,將初值表中的數(shù)據(jù),依次賦給各元素。如果對(duì)全部元素都賦初值,則“行數(shù)”可以省略。注意:只能省略“行數(shù)”。例:有M個(gè)學(xué)生,學(xué)習(xí)N門課程,已知所有學(xué)生的各科成績(jī),編程:分別求每個(gè)學(xué)生的平均成績(jī)和每門課程的平均成績(jī)。解:/*功能:計(jì)算個(gè)人平均成績(jī)與各科平均成績(jī),并在屏幕上顯示出來。*/#define

37、NUM_std 5 /*定義符號(hào)常量人數(shù)為5*/#define NUM_course 4 /*定義符號(hào)常量課程為4*/#include stdio.hvoid main() int i,j; static float scoreNUM_std+1NUM_course+1=78,85,83,65, 88,91,89,93, 72,65,54,75,86,88,75,60, 69,60,50,72; for(i=0;iNUM_std;i+) for(j=0;jNUM_course;j+) scoreiNUM_course += scoreij;/*求第i個(gè)人的總成績(jī)*/scoreNUM_stdj

38、+= scoreij; /*求第j門課的總成績(jī)*/ scoreiNUM_course /= NUM_course;/*求第i個(gè)人的平均成績(jī)*/ for(j=0;jNUM_course;j+) scoreNUM_stdj /= NUM_std; /*求第j門課的平均成績(jī)*/ /*輸出表頭*/ printf(學(xué)生編號(hào) 課程1 課程2 課程3 課程4 個(gè)人平均n); /*輸出每個(gè)學(xué)生的各科成績(jī)和平均成績(jī)*/for(i=0;iNUM_std;i+)printf(學(xué)生%dt,i+1); for(j=0;jNUM_course+1;j+) printf(%6.1ft,scoreij); printf(n)

39、; /*輸出1條短劃線*/ for(j=0;j8*(NUM_course+2);j+) printf(-); printf(n課程平均); /*輸出每門課程的平均成績(jī)*/ for(j=0;jNUM_course;j+) printf(%6.1ft,scoreNUM_stdj); printf(n); 3、字符數(shù)組、字符數(shù)組的定義1維字符數(shù)組,用于存儲(chǔ)和處理1個(gè)字符串,其定義格式與1維數(shù)值數(shù)組一樣。2維字符數(shù)組,用于同時(shí)存儲(chǔ)和處理多個(gè)字符串,其定義格式與2維數(shù)值數(shù)組一樣。、字符數(shù)組的初始化字符數(shù)組的初始化,可以通過為每個(gè)數(shù)組元素指定初值字符來實(shí)現(xiàn)。、字符數(shù)組的引用 字符數(shù)組的逐個(gè)字符引用,與引用

40、數(shù)值數(shù)組元素類似。字符數(shù)組的輸入除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用getchar()或scanf()函數(shù)輸入字符。字符數(shù)組的輸出 字符數(shù)組的輸出,可以用putchar()或printf()函數(shù)。4、字符串及其結(jié)束標(biāo)志所謂字符串,是指若干有效字符的序列。C語言中的字符串,可以包括字母、數(shù)字、專用字符、轉(zhuǎn)義字符等。C語言規(guī)定:以0作為字符串結(jié)束標(biāo)志(0代表ASCII碼為0的字符,表示一個(gè)“空操作”,只起一個(gè)標(biāo)志作用)。因此可以對(duì)字符數(shù)組采用另一種方式進(jìn)行操作了字符數(shù)組的整體操作。注意:由于系統(tǒng)在存儲(chǔ)字符串常量時(shí),會(huì)在串尾自動(dòng)加上1個(gè)結(jié)束標(biāo)志,所以無需人為地再加1個(gè)。另外,由于

41、結(jié)束標(biāo)志也要在字符數(shù)組中占用一個(gè)元素的存儲(chǔ)空間,因此在說明字符數(shù)組長(zhǎng)度時(shí),至少為字符串所需長(zhǎng)度加1。字符數(shù)組的整體初始化字符串設(shè)置了結(jié)束標(biāo)志以后,對(duì)字符數(shù)組的初始化,就可以用字符串常量來初始化字符數(shù)組。字符數(shù)組的整體引用字符串的輸入除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用scanf()函數(shù)輸入字符串。字符串的輸出printf()函數(shù),不僅可以逐個(gè)輸出字符數(shù)組元素,還可以整體輸出存放在字符數(shù)組中的字符串。5、常用的字符串處理函數(shù)字符串標(biāo)準(zhǔn)函數(shù)的原型在頭文件string.h中。、輸入字符串gets()函數(shù)調(diào)用方式:gets(字符數(shù)組)函數(shù)功能:從標(biāo)準(zhǔn)輸入設(shè)備(stdin)鍵盤上,讀

42、取1個(gè)字符串(可以包含空格),并將其存儲(chǔ)到字符數(shù)組中去。使用說明gets()讀取的字符串,其長(zhǎng)度沒有限制,編程者要保證字符數(shù)組有足夠大的空間,存放輸入的字符串。該函數(shù)輸入的字符串中允許包含空格,而scanf()函數(shù)不允許。輸出字符串puts()函數(shù)調(diào)用方式:puts(字符數(shù)組)函數(shù)功能:把字符數(shù)組中所存放的字符串,輸出到標(biāo)準(zhǔn)輸出設(shè)備中去,并用n取代字符串的結(jié)束標(biāo)志0。所以用puts()函數(shù)輸出字符串時(shí),不要求另加換行符。使用說明字符串中允許包含轉(zhuǎn)義字符,輸出時(shí)產(chǎn)生一個(gè)控制操作。該函數(shù)一次只能輸出一個(gè)字符串,而printf()函數(shù)也能用來輸出字符串,且一次能輸出多個(gè)。、字符串比較strcmp()

43、函數(shù)調(diào)用方式:strcmp(字符串1 ,字符串2)其中“字符串”可以是串常量,也可以是1維字符數(shù)組。函數(shù)功能:比較兩個(gè)字符串的大小。如果:字符串1=字符串2,函數(shù)返回值等于0; 字符串1字符串2,函數(shù)返回值正整數(shù)。使用說明如果一個(gè)字符串是另一個(gè)字符串從頭開始的子串,則母串為大。不能使用關(guān)系運(yùn)算符“”來比較兩個(gè)字符串,只能用strcmp() 函數(shù)來處理。、拷貝字符串strcpy()函數(shù)調(diào)用方式:strcpy(字符數(shù)組, 字符串)其中“字符串”可以是串常量,也可以是字符數(shù)組。函數(shù)功能:將“字符串”完整地復(fù)制到“字符數(shù)組”中,字符數(shù)組中原有內(nèi)容被覆蓋。使用說明字符數(shù)組必須定義得足夠大,以便容納復(fù)制過

44、來的字符串。復(fù)制時(shí),連同結(jié)束標(biāo)志0一起復(fù)制。不能用賦值運(yùn)算符“”將一個(gè)字符串直接賦值給一個(gè)字符數(shù)組,只能用strcpy()函數(shù)來處理。連接字符串strcat()函數(shù)調(diào)用方式:strcat(字符數(shù)組, 字符串)函數(shù)功能:把“字符串”連接到“字符數(shù)組”中的字符串尾端,并存儲(chǔ)于“字符數(shù)組”中?!白址麛?shù)組”中原來的結(jié)束標(biāo)志,被“字符串”的第一個(gè)字符覆蓋,而“字符串”在操作中未被修改。使用說明由于沒有邊界檢查,編程者要注意保證“字符數(shù)組”定義得足夠大,以便容納連接后的目標(biāo)字符串;否則,會(huì)因長(zhǎng)度不夠而產(chǎn)生問題。連接前兩個(gè)字符串都有結(jié)束標(biāo)志0,連接后“字符數(shù)組”中存儲(chǔ)的字符串的結(jié)束標(biāo)志0被舍棄,只在目標(biāo)串的

45、最后保留一個(gè)0。求字符串長(zhǎng)度strlen()函數(shù)(len是length的縮寫)調(diào)用方式:strlen(字符串)函數(shù)功能:求字符串(常量或字符數(shù)組)的實(shí)際長(zhǎng)度(不包含結(jié)束標(biāo)志)。將字符串中大寫字母轉(zhuǎn)換成小寫strlwr()函數(shù)調(diào)用方式:strlwr(字符串)函數(shù)功能:將字符串中的大寫字母轉(zhuǎn)換成小寫,其它字符(包括小寫字母和非字母字符)不轉(zhuǎn)換。將字符串中小寫字母轉(zhuǎn)換成大寫strupr()函數(shù)調(diào)用方式:strupr(字符串)函數(shù)功能:將字符串中小寫字母轉(zhuǎn)換成大寫,其它字符(包括大寫字母和非字母字符)不轉(zhuǎn)換。十、函數(shù)的定義與調(diào)用1、函數(shù)的定義任何函數(shù)(包括主函數(shù)main())都是由函數(shù)說明和函數(shù)體兩部

46、分組成。根據(jù)函數(shù)是否需要參數(shù),可將函數(shù)分為無參函數(shù)和有參函數(shù)兩種。、無參函數(shù)的一般形式 函數(shù)類型 函數(shù)名( void ) 說明語句部分; 可執(zhí)行語句部分; 注意:在舊標(biāo)準(zhǔn)中,函數(shù)可以缺省參數(shù)表。但在新標(biāo)準(zhǔn)中,函數(shù)不可缺省參數(shù)表;如果不需要參數(shù),則用“void”表示,主函數(shù)main()例外。、有參函數(shù)的一般形式函數(shù)類型 函數(shù)名( 數(shù)據(jù)類型 參數(shù),數(shù)據(jù)類型 參數(shù)2 ) 說明語句部分; 可執(zhí)行語句部分; 有參函數(shù)比無參函數(shù)多了一個(gè)參數(shù)表。調(diào)用有參函數(shù)時(shí),調(diào)用函數(shù)將賦予這些參數(shù)實(shí)際的值。為了與調(diào)用函數(shù)提供的實(shí)際參數(shù)區(qū)別開,將函數(shù)定義中的參數(shù)表稱為形式參數(shù)表,簡(jiǎn)稱形參表。例:定義一個(gè)函數(shù),用于求兩個(gè)數(shù)中

47、的大數(shù)。解:/*功能:定義一個(gè)求較大數(shù)的函數(shù)并在主函數(shù)中調(diào)用*/int max(int n1, int n2) /*定義一個(gè)函數(shù)max()*/ return (n1n2?n1:n2); main()int max(int n1, int n2);/*函數(shù)說明*/ int num1,num2; printf(input two numbers:n); scanf(%d%d, &num1, &num2);printf(max=%dn, max(num1,num2);、說明函數(shù)定義不允許嵌套。在語言中,所有函數(shù)(包括主函數(shù)main())都是平行的。一個(gè)函數(shù)的定義,可以放在程序中的任意位置,主函數(shù)ma

48、in()之前或之后。但在一個(gè)函數(shù)的函數(shù)體內(nèi),不能再定義另一個(gè)函數(shù),即不能嵌套定義??蘸瘮?shù)既無參數(shù)、函數(shù)體又為空的函數(shù)。其一般形式為:函數(shù)類型 函數(shù)名(void) 在老版本C語言中,參數(shù)類型說明允許放在函數(shù)說明部分的第2行單獨(dú)指定。 2、函數(shù)的返回值與函數(shù)類型函數(shù)返回值與return語句有參函數(shù)的返回值,是通過函數(shù)中的return語句來獲得的。return語句的一般格式: return ( 返回值表達(dá)式 );return語句的功能:返回調(diào)用函數(shù),并將“返回值表達(dá)式”的值帶給調(diào)用函數(shù)。注意:調(diào)用函數(shù)中無return語句,并不是不返回一個(gè)值,而是一個(gè)不確定的值。為了明確表示不返回值,可以用“void

49、”定義成“無(空)類型”。函數(shù)類型在定義函數(shù)時(shí),對(duì)函數(shù)類型的說明,應(yīng)與return語句中、返回值表達(dá)式的類型一致。如果不一致,則以函數(shù)類型為準(zhǔn)。如果缺省函數(shù)類型,則系統(tǒng)一律按整型處理。3、對(duì)被調(diào)用函數(shù)的說明和函數(shù)原型在ANSI C新標(biāo)準(zhǔn)中,采用函數(shù)原型方式,對(duì)被調(diào)用函數(shù)進(jìn)行說明,其一般格式如下:函數(shù)類型 函數(shù)名(數(shù)據(jù)類型 參數(shù)名, 數(shù)據(jù)類型 參數(shù)名2);/C語言同時(shí)又規(guī)定,在以下2種情況下,可以省去對(duì)被調(diào)用函數(shù)的說明:當(dāng)被調(diào)用函數(shù)的函數(shù)定義出現(xiàn)在調(diào)用函數(shù)之前時(shí)。因?yàn)樵谡{(diào)用之前,編譯系統(tǒng)已經(jīng)知道了被調(diào)用函數(shù)的函數(shù)類型、參數(shù)個(gè)數(shù)、類型和順序。如果在所有函數(shù)定義之前,在函數(shù)外部(例如文件開始處)預(yù)先

50、對(duì)各個(gè)函數(shù)進(jìn)行了說明,則在調(diào)用函數(shù)中可缺省對(duì)被調(diào)用函數(shù)的說明。4、函數(shù)的調(diào)用 一般形式為: 函數(shù)名(實(shí)際參數(shù)表) 切記:實(shí)參的個(gè)數(shù)、類型和順序,應(yīng)該與被調(diào)用函數(shù)所要求的參數(shù)(形參)個(gè)數(shù)、類型和順序一致,才能正確地進(jìn)行數(shù)據(jù)傳遞。、調(diào)用函數(shù)方式:函數(shù)表達(dá)式。函數(shù)作為表達(dá)式的一項(xiàng),出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運(yùn)算。函數(shù)語句。C/C語言中的函數(shù)可以只進(jìn)行某些操作而不返回函數(shù)值,這時(shí)的函數(shù)調(diào)用可作為一條獨(dú)立的語句。函數(shù)實(shí)參。函數(shù)作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實(shí)參進(jìn)行傳送,因此要求該函數(shù)必須是有返回值的。、說明:調(diào)用函數(shù)時(shí),函數(shù)名稱必須與具有該功能的自定義函數(shù)

51、名稱完全一致。實(shí)參在類型上按順序與形參,必須一一對(duì)應(yīng)和匹配。如果類型不匹配,C編譯程序?qū)促x值兼容的規(guī)則進(jìn)行轉(zhuǎn)換。如果實(shí)參和形參的類型不賦值兼容,通常并不給出出錯(cuò)信息,且程序仍然繼續(xù)執(zhí)行,只是得不到正確的結(jié)果。如果實(shí)參表中包括多個(gè)參數(shù),對(duì)實(shí)參的求值順序隨系統(tǒng)而異。有的系統(tǒng)按自左向右順序求實(shí)參的值,有的系統(tǒng)則相反。Turbo C和MS C是按自右向左的順序進(jìn)行的 。5、函數(shù)的形參與實(shí)參、函數(shù)的參數(shù)分為形參和實(shí)參兩種,作用是實(shí)現(xiàn)數(shù)據(jù)傳送。形參出現(xiàn)在函數(shù)定義中,只能在該函數(shù)體內(nèi)使用。發(fā)生函數(shù)調(diào)用時(shí),調(diào)用函數(shù)把實(shí)參的值復(fù)制1份,傳送給被調(diào)用函數(shù)的形參,從而實(shí)現(xiàn)調(diào)用函數(shù)向被調(diào)用函數(shù)的數(shù)據(jù)傳送。 例:實(shí)參

52、對(duì)形參的數(shù)據(jù)傳遞。/*實(shí)參對(duì)形參的數(shù)據(jù)傳遞。*/void main() void s(int n); /*說明函數(shù)*/ int n=100; /*定義實(shí)參n,并初始化*/ s(n); /*調(diào)用函數(shù)*/ printf(n_s=%dn,n); /*輸出調(diào)用后實(shí)參的值,便于進(jìn)行比較*/ void s(int n) int i; printf(n_x=%dn,n); /*輸出改變前形參的值*/ for(i=n-1; i=1; i-) n=n+i; /*改變形參的值*/ printf(n_x=%dn,n); /*輸出改變后形參的值*/ 、說明:實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等。無論實(shí)參是何種類型的量

53、,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給形參。形參變量只有在被調(diào)用時(shí),才分配內(nèi)存單元;調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只有在該函數(shù)內(nèi)有效。調(diào)用結(jié)束,返回調(diào)用函數(shù)后,則不能再使用該形參變量。實(shí)參對(duì)形參的數(shù)據(jù)傳送是單向的,即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。實(shí)參和形參占用不同的內(nèi)存單元,即使同名也互不影響。6、函數(shù)的嵌套調(diào)用和遞歸調(diào)用、函數(shù)的嵌套調(diào)用 指在執(zhí)行被調(diào)用函數(shù)時(shí),被調(diào)用函數(shù)又調(diào)用了其它函數(shù)。如圖所示:、函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用是指,一個(gè)函數(shù)在它的函數(shù)體內(nèi),直接或間接地調(diào)用它自身。7、內(nèi)部變量與外部變量、內(nèi)部變量在一個(gè)函數(shù)

54、內(nèi)部說明的變量是內(nèi)部變量,它只在該函數(shù)范圍內(nèi)有效。只有在包含變量說明的函數(shù)內(nèi)部,才能使用被說明的變量,在此函數(shù)之外就不能使用這些變量了。所以內(nèi)部變量也稱“局部變量”。、關(guān)于局部變量的作用域還要說明以下幾點(diǎn):主函數(shù)main()中定義的內(nèi)部變量,也只能在主函數(shù)中使用,其它函數(shù)不能使用。同時(shí),主函數(shù)中也不能使用其它函數(shù)中定義的內(nèi)部變量。因?yàn)橹骱瘮?shù)也是一個(gè)函數(shù),與其它函數(shù)是平行關(guān)系。形參變量也是內(nèi)部變量,屬于被調(diào)用函數(shù);實(shí)參變量,則是調(diào)用函數(shù)的內(nèi)部變量。允許在不同的函數(shù)中使用相同的變量名,它們代表不同的對(duì)象,分配不同的單元,互不干擾,也不會(huì)發(fā)生混淆。在復(fù)合語句中也可定義變量,其作用域只在復(fù)合語句范圍內(nèi)

55、。 、外部變量在函數(shù)外部定義的變量稱為外部變量。外部變量不屬于任何一個(gè)函數(shù),其作用域是:從外部變量的定義位置開始,到本文件結(jié)束為止。外部變量可被作用域內(nèi)的所有函數(shù)直接引用,所以外部變量又稱全局變量。例:輸入長(zhǎng)方體的長(zhǎng)(l)、寬(w)、高(h),求長(zhǎng)方體體積及正、側(cè)、頂三個(gè)面的面積。解:/*功能:利用全局變量計(jì)算長(zhǎng)方體的體積及三個(gè)面的面積*/int s1,s2,s3;int vs(int a,int b,int c) int v;v=a*b*c; s1=a*b; s2=b*c; s3=a*c;return v;main()int v,l,w,h;printf(ninput length,widt

56、h and height: );scanf(%d%d%d,&l,&w,&h);v=vs(l,w,h);printf(v=%d s1=%d s2=%d s3=%dn,v,s1,s2,s3);十一、指針1、指針和指針變量的概念、指針即地址一個(gè)變量的地址稱為該變量的指針。通過變量的指針能夠找到該變量。指針變量專門用于存儲(chǔ)其它變量地址的變量2、指針變量的定義與應(yīng)用、指針變量的定義:數(shù)據(jù)類型 *指針變量, *指針變量2;、取地址運(yùn)算()和指針運(yùn)算(*)取地址運(yùn)算的格式:變量指針運(yùn)算的格式:*指針變量例:#include void main()int a,b;int *p1,*p2;a=100;b=10;

57、p1=&a;p2=&b;printf(a =%dn, a);printf(b+2=%dn, b+2);printf(p1=%xn, p1);printf(p2=%xn,p2);printf(*p1=%dn,*p1);printf(*p2+2=%dn,*p2+2);例:編寫程序,實(shí)現(xiàn)從鍵盤輸入兩個(gè)數(shù),輸出時(shí)從大到小排列(利用指針概念),#include void main() int *p1,*p2,*p,a,b; scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(

58、max=%d,min=%dn,*p1,*p2);3、指針與數(shù)組指針和一維數(shù)組數(shù)組名代表數(shù)組的首地址,是一個(gè)常量。數(shù)組指針:就是指向數(shù)組元素地址的指針變量。例:從n個(gè)數(shù)中找出最大值和最小值(見P180)指針和二維數(shù)組用數(shù)組名表示二維數(shù)組的行地址數(shù)組元素三種形式引用: aij 下標(biāo)法 *(ai+j) 用一維數(shù)組名 *(*(a+i)+j) 用二維數(shù)組名 指針數(shù)組指針數(shù)組:數(shù)組的所有元素都是存放指針的數(shù)組稱為指針數(shù)組。即:指針數(shù)組中每一個(gè)元素(下標(biāo)變量)都是指針變量。指針數(shù)組的定義形式: 數(shù)組長(zhǎng)度=地址列表;4、指針與字符串將字符串的首地址賦給指針,用字符指針變量來處理字符串。字符指針變量與字符指針數(shù)

59、組字符數(shù)組和字符指針變量都能實(shí)現(xiàn)字符串的存儲(chǔ)與運(yùn)算,但兩者之間還是有區(qū)別的,主要包括以下幾點(diǎn):字符數(shù)組由若干元素組成,每個(gè)元素存放一個(gè)字符;字符指針變量存放的是字符串的首地址。賦值方式不同:不能用賦值語句給字符數(shù)組賦值。char str14;str=“I love china!” 這是錯(cuò)誤的。字符指針變量可以采用下面的形式賦值:char *p;p=“china!” 這是正確的。但要注意賦給指針變量p的不是字符串,而是字符串的首地址。定義一個(gè)數(shù)組,在編譯時(shí)分配存放n個(gè)元素的存儲(chǔ)空間;定義指針變量只分配存放一個(gè)地址的空間。5、指針與函數(shù)函數(shù)指針函數(shù)名就代表函數(shù)的入口地址。函數(shù)指針:函數(shù)的入口地址稱

60、為函數(shù)指針。即指向函數(shù)的指針變量為函數(shù)指針。函數(shù)指針定義格式: (*指針變量名)();其中:“存儲(chǔ)類型”是函數(shù)指針本身的存儲(chǔ)類型;“數(shù)據(jù)類型”是指函數(shù)返回值的數(shù)據(jù)類型;例如:int (*p)();定義一個(gè)指向整形函數(shù)的指針變量p。例:求a和b中的最大者。 程序如下:void main()int max();int (*p)();int a,b,c;p=max; /*函數(shù)max入口地址賦給p*/scanf(“%d,%d”,&a,&b);c=(*p)(a,b);printf(“a=%d,b=%d,max=%d”,a,b,c);int max(int x,int y)int z;if (xy) z=

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論