C語言程序設計教案(湖大)_第1頁
C語言程序設計教案(湖大)_第2頁
C語言程序設計教案(湖大)_第3頁
C語言程序設計教案(湖大)_第4頁
C語言程序設計教案(湖大)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第章 C 語言簡介學習內(nèi)容11 C語言與TURBO C12 TURBO C的特點和配置要求13 簡單C程序介紹14 C語言可執(zhí)行程序的產(chǎn)生過程目的要求: 掌握C語言格式特點熟悉C語言的編輯環(huán)境重點難點: C語言格式特點 TC編輯器的運行、操作重點難點詳解: 【例1.3】通過調用子函數(shù)求兩個數(shù)的和。main() /* 主函數(shù) */int a,b,sum; /* 定義變量 */ a=3;b=4; /* 變量賦值 */ sum=add(a,b); /* 調用add函數(shù)*/ printf("sum=a+b=%d.n",sum);int add(int x,int y) int z;

2、 z=x+y; return(z); /* 將z的值返回 */C程序的組成規(guī)則:1、C 程序是由函數(shù)構成的。C語言是函數(shù)的語言,一個程序是由一個或多個函數(shù)構成的。2、一個函數(shù)有兩部分組成:(1)函數(shù)的首部(函數(shù)的第一行)。(2)函數(shù)體 即函數(shù)首部下面的大括弧內(nèi)的部分。(3)一個C 程序總是從main 主函數(shù)開始執(zhí)行。無論位置如何。(4)每個語句和數(shù)據(jù)定義的最后必須有一個分號“;”。(5)C語言本身沒有輸入/輸出語句,是庫函數(shù)scanf 和 printf 等函數(shù)來完成的。(6)用/* */ 作注釋,以用于增加可讀性。TC編輯器的運行、操作1. 編輯源文件2.源文件的編譯3.目標程序的連接4.執(zhí)行

3、程序 查看結果 操作步驟 Alt+F9 Ctr+F9 Alt+F5 第二章 基本數(shù)據(jù)類型、運算符與表達式學習內(nèi)容21基本數(shù)據(jù)類型22 標識符、常量、變量及其初始化2.3 算術運算符及表達式24 賦值運算符及表達式2.5類型轉換運算符26 逗號運算符和逗號表達式目的要求: 掌握整數(shù)類型與浮點型數(shù)據(jù)類型 掌握標識符的命名規(guī)則 數(shù)據(jù)的儲存方式 字符型數(shù)據(jù) 標識符、常量、變量及初始化 掌握運算符及其表達式 掌握賦值運算符和賦值表達式重點難點: 整數(shù)類型與浮點型數(shù)據(jù)類型 標識符的命名規(guī)則 復合賦值運算符 運算符及其表達式重點難點詳解:整型數(shù)據(jù)1. 整型數(shù)據(jù)的在內(nèi)存中的存放形式 2. 整型變量的分類 1)

4、基本整型 一般為2字節(jié) 2)短整型 一般為2字節(jié) 3)長整型 一般為4字節(jié) 3.整型數(shù)據(jù)的溢出 如何判斷整型常量的類型。 若在-3276832767之間,可認為是普通整型int型或短整型(short型)。 若超出了-3276832767,而在-2147483648+2147483647之間,則認為是長整型(long型)。若認為是int類型的,系統(tǒng)不做檢查,但數(shù)據(jù)會丟失。4.整型常量的類型 (1)十進制整型常量:289、-183等。每個數(shù)位都可以是(0 9)十個代碼。(2)八進制整型常量:以o開頭,如(128)10 =o200 。(3)十六進制整型常量:以ox開頭,如(128)16 =ox80。

5、如何判斷整型常量的類型。 若在-3276832767之間,可認為是普通整型int型或短整型(short型)。 若超出了-3276832767,而在-2147483648+2147483647之間,則認為是長整型(long型)。若認為是int類型的,系統(tǒng)不做檢查,但數(shù)據(jù)會丟失。 若常量是無符號型(unsigned型),那么一個非負值的整數(shù)可以賦值給unsigned型變量,但要注意其范圍。50000可賦給unsigned int型,70000卻不可以。(無符號整型變量最大值 65535.) 如一整型常量后有L或l則表示為long int型的。常用于函數(shù)的調用中。 5.整型變量的定義 變量定義的一般

6、格式 存儲類型 數(shù)據(jù)類型 變量名, 變量名2;例如,int d, l, a;定義變量時指定變量的類型,在編譯時好為其分配相應的存儲單元。另外,還可在編譯時檢查該變量所做運算是否合法。一般稱在定義變量的同時進行賦初值的操作為變量初始化。 變量初始化的一般格式 存儲類型 數(shù)據(jù)類型 變量名=初值,變量名2=初值2,;例如,int d=2, l=6, a;浮點型數(shù)據(jù)類型1 浮點型常量的表示方法 (1)十進制小數(shù)形式:由整數(shù)部分、小數(shù)點和小數(shù)部分組成。(2)指數(shù)形式:由實數(shù)部分、E(e)和整數(shù)部分組成。2. 浮點型數(shù)據(jù)的在內(nèi)存中的存放形式 3. 浮點型變量的分類 單精度型:關鍵字float,一般占字節(jié)(

7、32位),提供位有效數(shù)字。 雙精度型:關鍵字double,一般占個字節(jié)、提供1516位有效數(shù)字。 長雙精度型:關鍵字long double,3.實型數(shù)據(jù)的舍入誤差 請注意有效為數(shù)。4.浮點型常量的類型 一個實型常量賦值給一個實型變量時,只根據(jù)實型變量表示的有效數(shù)字的位數(shù),在實型常量中按從左向右的方向截取數(shù)據(jù)。Float型的變量只能保存七位有效數(shù)字,double型的變量只能保存1516位有效數(shù)字。5. 浮點型變量的定義 和前面整型變量的定義的方法一樣。標識符的命名規(guī)則標識符是一個字符序列,用來標識C語言程序中一個對象的名字。命名時應注意以下幾點:1)標識符是一串英文字母或下劃線開頭的由字母、數(shù)字

8、和下劃線組成的字符串。例如:a aBC x2z y_1 _A n0都是合法的標識符;而3d #asd 110 A*C 都是非法標識符。2)C語言本身并沒有要求標識符的長度,不同的C編譯系統(tǒng)允許包含的字符個數(shù)有所不同,通常標識符的長度可識別的標識符長度常限制為8個字符。3)標識符大小字母含義不同。比如abc Abc ABC 代表三個不同標識符,這一點一定要牢記。復合賦值運算符合賦值運算符是由賦值運算符之前再加一個雙目運算符構成的。 復合賦值運算的一般格式為: 變量 雙目運算符 = 表達式 復合賦值運算符它等價于:變量 = 變量 雙目運算符 (表達式)。 當表達式為簡單表達式時,表達式外的一對圓括

9、號才可缺省,否則可能出錯。例如:x += 3 /* 等價于x=x+3 */ y *= x + 6 /* 等價于y=y*(x+6),而不是y=y*x+6 */C語言規(guī)定的10種復合賦值運算符如下: +=,-=,*=,/=,%=;/*復合算術運算符(5個)*/ &=,=,|=,<<=,>>=;/*復合位運算符(5個)*/其中后五種是位運算的運算符,在位運算那章介紹。運算符及其表達式算術運算符和算術表達式 1.基本的算術表達式+ 加法運算符或正值運算符 - 減法運算符或負值運算符 * 乘法運算符 / 除法運算符 TC2.0采取“向零取整”法 % 模運算符或稱求余運算符

10、 該運算符的兩邊只能是整型數(shù)據(jù)。2.算術表達式和運算符的優(yōu)先級與結合性 左結合性、右結合性3.強制類型轉換運算符 除自動轉換外,語言也允許強制轉換。 數(shù)據(jù)類型強制轉換的一般格式為: (要轉換成的數(shù)據(jù)類型)(被轉換的表達式)(類型)(表達式)例如: (int)(x+y) /*將x+y的結果轉換成int型*/ (float)5/2(等價于(float)(5)/2) /*將5轉換成實型,再除以2(=2.5)*/(float)(5/2) /*將5整除2的結果(2)轉換成實型(2.0)*/注意:強制轉換類型得到的是一個所需類型的中間量,原表達式類型并不發(fā)生變化。例如,(double)a 只是將變量a的值

11、轉換成一個double型的中間量,其數(shù)據(jù)類型并未轉換成double型。4. 自增、自減運算符(+、-) (1)作用 自增運算使單個變量的值增,自減運算使單個變量的值減。(2)用法與運算規(guī)則 自增、自減運算符都有兩種用法。 a)前置運算運算符放在變量之前:變量、變量 先使變量的值增(或減),然后再以變化后的值參與其它運算,即先增減,后運算。b)后置運算運算符放在變量之后:變量、變量 變量先參與其它運算,然后再使變量的值增(或減),即先運算,后增減。例如: k=1; k=1;演示 j=+k; j=k+; 左邊: k先變成2 , j=2 右邊: k為1,j=1然后k為2。 使用中的問題說明:(1)

12、這兩種、運算符只能用于變量,而不能用于常量或表達式。(2) +、-運算符的優(yōu)先相同,但比算術運算符優(yōu)先級要高。其結合性是“從右至左”的。 i=3; j=-(i+);i=3; j=+(+i); printf(“%d,%d”,i,j); printf(“%d,%d”,i,j);結果是:,-3 結果是:,4第三章 結構化程序設計學習內(nèi)容:31 結構化程序設計方法32 順序結構3.3選擇結構34 循環(huán)結構目的要求:掌握順序結構程序設計方法掌握數(shù)據(jù)的輸入輸出掌握關系運算符邏輯、條件運算符及其它們的表達式掌握if語句掌握switch語句掌握while語句、do-while語句、for語句掌握循環(huán)的嵌套重點

13、難點:數(shù)據(jù)的輸入輸出掌握關系運算符邏輯、條件運算符及其它們的表達式掌握if語句掌握switch語句for語句Break和continue語句重點難點詳解:數(shù)據(jù)的輸入輸出1. printf函數(shù)(格式輸出函數(shù))printf()函數(shù)的作用:向計算機系統(tǒng)默認的輸出設備(一般指終端或顯示器)輸出一個或多個任意類型的數(shù)據(jù)。(1)printf函數(shù)調用的一般形式為: printf(“格式字符串”,輸出表列);例如:printf("radius=%fnlength=%7.2f,area=%7.2fn", r, l, a);格式字符串也稱格式控制字符串或格式轉換字符串,其中可以包含下列三種字符

14、: 格式指示符:由“%”和格式字符組成,例如“%f”、“%7.2f”等,這總是由“%”字符開始,到格式字符終止。它的作用是將輸出的數(shù)據(jù)項轉換為指定的格式輸出。輸出表列中的每個數(shù)據(jù)項對應一個格式指示符。 轉義字符:這些字符通常用來控制光標的位置。 普通字符:除格式指示符和轉義字符之外的其他字符,這些字符輸出時原樣輸出,例如上面例子中的“radius=”等。 (2) 類型字符: %d 十進制整數(shù) int a=567;printf ( “%d”,a); 567%o 八進制無符號整數(shù) int a=65;printf(“%o”,a);101%x或X十六進制無符號整數(shù) int a=65;printf(“%

15、x”,a);ff%u不帶符號十進制整數(shù) int a=567;printf(“%u”,a);567%c 單一字符char a=65;printf(“%c”,a);A%f 小數(shù)形式浮點小數(shù)float a=456.789;printf(“%f”,a); 456.789000%s 字符串printf(“%s”,“ABC”);ABC%e或E 指數(shù)形式浮點小數(shù) float a=456.789;printf(“%e”,a); 4.567890e+02 %g或G e和f中較短一種float a=456.789;printf(“%g”,a); 456.789說明:ü 格式字符要用小寫ü 格式

16、字符與輸出項個數(shù)應相同,按先后順序一一對應ü 輸出轉換:格式字符與輸出項類型不一致,自動按指定格式輸出2.scanf函數(shù)(格式輸入函數(shù))(1). scanf函數(shù)的一般形式 格式:scanf(“格式控制字符串”,地址表列);功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表 指定的存儲單元中,并按回車鍵結束返值:正常,返回輸入數(shù)據(jù)個數(shù)地址表列:變量的地址,常用取地址運算符&格式字符:d,i,o,x,u,c,s,f,e使用scanf()時應注意的一些問題:scanf函數(shù)中沒有精度控制,不能企圖用格式控制符來規(guī)定輸入數(shù)據(jù)的精度scanf(“%5.2f”,&a)×scanf

17、中要求給出變量地址,如給出變量名則會出錯。如 scanf("%d",a);是非法的,應改為scnaf("%d",&a);才是合法的。在輸入字符數(shù)據(jù)時,若格式控制串中無非格式字符,則認為所有輸入的字符均為有效字符。 在輸入多個數(shù)值數(shù)據(jù)時,若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格,TAB或回車作間隔。在輸入數(shù)據(jù)時遇到以下情況之一認為一個數(shù)據(jù)輸入結束字符數(shù)據(jù)的輸入輸出1.putchar 函數(shù)(字符輸出函數(shù))putchar 函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個字符。其一般形式為:putchar(字符變量)例如:putchar(

18、'A'); (輸出大寫字母A)putchar(x); (輸出字符變量x的值)putchar('n'); (換行)2.getchar函數(shù)(鍵盤輸入函數(shù))getchar函數(shù)的功能是從鍵盤上輸入一個字符。其一般形式為:getchar();通常把輸入的字符賦予一個字符變量,構成賦值語句,如:char c;c=getchar();If語句用if語句可以構成分支結構。它根據(jù)給定的條件進行判斷, 以決定執(zhí)行某個分支程序段。語言的if語句有三種基本形式。1.第一種形式為基本形式 if(表達式) 語句; 其語義是:如果表達式的值為真,則執(zhí)行其后的語句, 否則不執(zhí)行該語句。2.第二

19、種形式為if-else形式 if(表達式) 語句1; else 語句2; 其語義是:如果表達式的值為真,則執(zhí)行語句1,否則執(zhí)行語句2 。3.第三種形式為if-else-if形式 前二種形式的if語句一般都用于兩個分支的情況。 當有多個分支選擇時,可采用if-else-if語句,其一般形式為: if(表達式1) 語句1; else if(表達式2) 語句2; else if(表達式3) 語句3; else if(表達式m) 語句m; else 語句n; 其語義是:依次判斷表達式的值,當出現(xiàn)某個值為真時, 則執(zhí)行其對應的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。 如果所有的表達式均為假,則執(zhí)行語

20、句n 。 然后繼續(xù)執(zhí)行后續(xù)程序。 if-else-if語句的執(zhí)行過程如圖33所示。4. 在使用if語句中還應注意以下問題(1) 在三種形式的if語句中,在if關鍵字之后均為表達式。 該表達式通常是邏輯表達式或關系表達式, 但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。例如: if(a=5) 語句; if(b) 語句; 都是允許的。只要表達式的值為非0,即為“真”。如在if(a=5);中表達式的值永遠為非0,所以其后的語句總是要執(zhí)行的,當然這種情況在程序中不一定會出現(xiàn),但在語法上是合法的。(2) 在if語句中,條件判斷表達式必須用括號括起來, 在語句之后必須加分號。(3) 在if語

21、句的三種形式中,所有的語句應為單個語句,如果要想在滿足條件時執(zhí)行一組(多個)語句,則必須把這一組語句用 括起來組成一個復合語句。但要注意的是在之后不能再加分號。Switch語句語言還提供了另一種用于多分支選擇的switch語句, 其一般形式為: switch(表達式) case常量表達式1: 語句1; case常量表達式2: 語句2; case常量表達式n: 語句n; default : 語句n+1; 其語義是:計算表達式的值。 并逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時, 即執(zhí)行其后的語句,然后不再進行判斷,繼續(xù)執(zhí)行后面所有case后的語句。 如表達式的值與所有

22、case后的常量表達式均不相同時,則執(zhí)行default后的語句。在使用switch語句時還應注意以下幾點:1.在case后的各常量表達式的值不能相同,否則會出現(xiàn)錯誤。2.在case后,允許有多個語句,可以不用括起來。3.各case和default子句的先后順序可以變動,而不會影響程序執(zhí)行結果。4.default子句可以省略不用。for語句for語句是C語言中所提供的功能最強、使用最為靈活的一種循環(huán)語句。特別適用于循環(huán)次數(shù)固定而循環(huán)條件不確定的情況。 for語句的一般形式如下:for(表達式1;表達式2;表達式3) (1)表達式1通常是用來給循環(huán)變量賦初值,一般是賦值表達式。也允許在for語句之

23、外給循環(huán)變量賦初值,此時可省略該表達式;(2)表達式2通常是循環(huán)條件,一般為關系表達式或邏輯表達式,也可以是其它表達式; (3)表達式3通常可用來修改循環(huán)變量的值,一般是賦值表達式。 三個表達式都是可選項,都可以省略。但特別提請注意的是,表達式1和表達式2后的分號“;”不能省略。 for語句的執(zhí)行過程如下:(1)首先計算表達式1的值;(2)再計算表達式2的值,若值為真(非0)則執(zhí)行循環(huán)體語句一次,否則跳出循環(huán);(3)循環(huán)體語句執(zhí)行完后,再計算表達式3的值,轉(2)步去執(zhí)行。在整個for循環(huán)過程中,表達式1只計算一次,表達式2和表達式3則可能計算多次。 for語句的流程圖for語句最主要的特點是

24、:特別適合已知循環(huán)次數(shù)的循環(huán)語句,下面介紹一下for語句中循環(huán)次數(shù)的計算方法。根據(jù)for循環(huán)的循環(huán)變量的變化情況。循環(huán)次數(shù)的計算可以用公式進行計算: n=(int)(終值-初值+步長)/步長) 其中,初值指循環(huán)變量的初始值,終值指循環(huán)變量滿足條件的最終值,步長指循環(huán)變量每循環(huán)一次所變化的量。 例如:循環(huán)語句for(n=1;n<=100;n+)(設n為整形變量)控制循環(huán)體反復執(zhí)行的次數(shù)為 n=(int)(100-1+1)/1)=100 又如:循環(huán)語句for(n=100;n<0;n=n-2)(設n為整形變量)控制循環(huán)體反復執(zhí)行的次數(shù)為 n=(int)(1-100-2)/(-2))=50

25、 在使用for語句中要注意以下幾點:(1)for語句中的各表達式都可省略,但分號間隔符不能少;如:for(;表達式;表達式)省去了表達式1;for(表達式;表達式)省去了表達式2;for(表達式;表達式;)省去了表達式3;for(;)省去了全部表達式。 (2)在循環(huán)變量已賦初值時,可省去表達式1。如省去表達式2或表達式3則將造成無限循環(huán),這時應在循環(huán)體內(nèi)設法結束循環(huán)。 (3)循環(huán)體可以是空語句。例如:從鍵盤輸入一行字符然后逐個輸出每一個字符。 (4)for語句也可與while,do-while語句相互嵌套,構成多重循環(huán)。Break和continue語句break語句有兩種用法。第一種用法是在s

26、witch語句中,跳出switch結構,轉去執(zhí)行后面的程序,其用法在第三章中已經(jīng)介紹;第二種用法是,繞過一般的循環(huán)條件檢驗,立即強制地中止一個循環(huán)。下面介紹第二種用法:break語句的一般形式如下: break; 當一個循環(huán)體內(nèi)的break語句被執(zhí)行時,循環(huán)立即中斷,并轉向循環(huán)體外的下一條語句.Continue語句有點像break語句。continue語句只能用在循環(huán)體內(nèi),不能用在其他位置。 其一般形式如下: continue;其功能是:結束本次循環(huán),即不再執(zhí)行該循環(huán)體中continue語句之后的語句,轉入下一次循環(huán)條件的判斷與執(zhí)行,所以有時又稱短路語句。應當注意的是:break語句在循環(huán)體中

27、的作用是結束整個循環(huán),而continue語句只結束本次循環(huán),繼續(xù)下一次循環(huán),即并不退出循環(huán)。計算機等級考試試題講解熟練掌握程序設計的三種方法。怎么樣求解完全數(shù)、完備數(shù)求解同構數(shù)、 求解素數(shù)的方法求解Fibonacci數(shù)列、自然數(shù)的階乘第四章 函數(shù)學習內(nèi)容:41函數(shù)的定義42函數(shù)的調用形式4.3 數(shù)據(jù)的存儲類別4.4 函數(shù)的遞歸調用4.5 函數(shù)舉例目的要求:怎么定義函數(shù)函數(shù)怎么樣調用掌握函數(shù)的嵌套掌握函數(shù)的遞歸調用熟悉c中四種存儲類別熟悉外部函數(shù)和內(nèi)部函數(shù)重點難點:函數(shù)的定義函數(shù)的調用函數(shù)的嵌套四種存儲類別重點難點詳解:函數(shù)的定義:1.函數(shù)定義的形式 根據(jù)前面函數(shù)的分類,我們知道函數(shù)中各種各樣的

28、函數(shù)形式是有區(qū)別的,函數(shù)是存在有、無返回值,有、無參數(shù)之分的。我們這里研究最復雜的形式,然后通過簡化得到其它簡單形式。根據(jù)使用方式一般有二種定義形式。 (1)傳統(tǒng)的定義形式 類型標識符 函數(shù)名(形參列表) 形參說明 聲明部分 語句 /* 功能實現(xiàn)部分 */ return 表達式; (2)現(xiàn)代的定義形式 類型標識符 函數(shù)名(數(shù)據(jù)類型 形式參數(shù),數(shù)據(jù)類型 形式參數(shù),) 聲明部分 語句 /* 功能實現(xiàn)部分 */ return 表達式; 函數(shù)的傳統(tǒng)定義形式和現(xiàn)代定義形式主要的區(qū)別是在形式參數(shù)的定義形式上,當沒有形式參數(shù)的時候是一致的。例如一個求2個數(shù)最大值的函數(shù)定義如下:/* 傳統(tǒng)定義形式 */int

29、 max(x,y)int x,y; if(x>y) return x; else return y;/*現(xiàn)代的定義形式*/int max(int x,int y) if(x>y) return x; else return y;現(xiàn)在各種書中一般都采用現(xiàn)代的定義形式,以后例子中我們都是采用現(xiàn)代的定義形式,針對現(xiàn)代定義形式,進行說明: (1)定義形式中最上面的一行是函數(shù)的頭。函數(shù)的頭一般描述了這個函數(shù)的返回值類型、函數(shù)名和形式參數(shù)。由一對花括號“ ”括起來的部分稱為函數(shù)體,函數(shù)體是書寫語句的地方,是函數(shù)的功能實現(xiàn)部分,在這里語句的書寫方式和以前所講過的main函數(shù)的書寫方式是一樣的。(

30、2)函數(shù)名是唯一標識一個函數(shù)的名字,它的命名規(guī)則與變量的命名規(guī)則相同。在一個程序中,除main函數(shù)外,其它的自定義函數(shù)的名字都是由用戶指定的,命名時除了不要與系統(tǒng)的關鍵字、庫函數(shù)的名字相同外,用戶要同變量命名一樣做到“見名知義”。(3)當函數(shù)名前的類型標識符指定為“void”時,這樣的函數(shù)是一個無返回值的函數(shù),對應的函數(shù)體中是不需要return語句的。當函數(shù)名前的類型標識符為一種類型的關鍵字或未指定(默認為int)時,函數(shù)體中的return語句是需要的,這就說明這個函數(shù)是一個有返回值的函數(shù),當函數(shù)執(zhí)行完畢時將帶回一個類型為所指定(未指定時默認為int)的值給主調函數(shù)。當定義了返回值類型,而在函

31、數(shù)體中不用return語句,這樣函數(shù)會帶回一個不確定的值,這樣的值是沒有用的,所以當不需要一個函數(shù)的返回值時,最好定義成無返回值的類型(用void指定)。(4)函數(shù)名后面的一對圓括號中為函數(shù)的形式參數(shù)定義,當括號為空的時候,表示這個函數(shù)是一個無參數(shù)的函數(shù),調用時不需要提供參數(shù)。當括號內(nèi)為非空時,則代表調用這個函數(shù)時需要提供參數(shù),參數(shù)的定義形式同定義一個變量是一樣的。當有多個參數(shù)時,各參數(shù)之間用逗號分割。函數(shù)的調用1.函數(shù)的調用方式當函數(shù)定義好后,就可以在主函數(shù)中調用了,這是最簡單的調用形式了。語言中,函數(shù)調用的一般形式為: 函數(shù)名(實際參數(shù)列表)在函數(shù)調用中,對于無參函數(shù)調用時是沒有實際參數(shù)列

32、表。實際參數(shù)列表中的參數(shù)可以是常數(shù),變量或其它構造類型數(shù)據(jù)及表達式,各實際參數(shù)之間用逗號分隔。(1)函數(shù)表達式:函數(shù)作為表達式中的一項出現(xiàn)在表達式中,這種形式是使用函數(shù)的返回值參與了表達式的運算,這種方式要求函數(shù)是有返回值的。當是無參數(shù)函數(shù)調用時實際參數(shù)列表是空的,但后面的一對圓括號是不能缺少的,當有參數(shù)時要在圓括號中提供實際參數(shù)。例如:z=max(x,y)是一個賦值表達式,把調用max函數(shù)的返回值賦給變量z。(2)函數(shù)語句:函數(shù)調用的一般形式加上分號即構成函數(shù)語句,這種調用形式可以是無返回值的函數(shù)調用形式,或有返回值的并不使用這個函數(shù)返回值也可以這樣調用。例如:printf("%d

33、",a);、print_star();都是以函數(shù)語句的方式調用函數(shù)的。 (3)函數(shù)實參:一個函數(shù)調用作為另一個函數(shù)調用的實際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為另外一個函數(shù)的實際參數(shù)進行使用,因此要求該函數(shù)必須是有返回值的。函數(shù)的嵌套語言中不允許嵌套的函數(shù)定義。因此各函數(shù)之間是平行的,不存在上一級函數(shù)和下一級函數(shù)的問題。但是語言允許在一個函數(shù)的定義中出現(xiàn)對另一個函數(shù)的調用。這樣就出現(xiàn)了函數(shù)的嵌套調用。即在被調函數(shù)中又調用其它函數(shù)。函數(shù)的嵌套調用為自頂向下、逐步求精及模塊化的結構化程序設計提供了最基本的支持。其關系可表示如圖。 main()a();a()b();b()函數(shù)嵌套調用的

34、執(zhí)行過程圖表示了兩層嵌套的情形。main函數(shù)中調用a函數(shù),在a函數(shù)中又調用b 函數(shù),嵌套調用程序的執(zhí)行是一個逐層深入,然后再逐層退出的過程,具體過程如下:(1)程序開始執(zhí)行main函數(shù),順序執(zhí)行main函數(shù)中的語句,即第步。(2)當執(zhí)行到調用a函數(shù)時,main函數(shù)停止執(zhí)行,轉而去執(zhí)行a函數(shù)。(3)順序執(zhí)行a函數(shù)中的語句,即第步。(4)在a函數(shù)中遇到調用b函數(shù)的語句,a函數(shù)停止執(zhí)行,轉而去執(zhí)行b函數(shù)。(5)順序執(zhí)行b函數(shù)中的語句,即第步,如果還有函數(shù)調用,則繼續(xù)進入執(zhí)行。(6)當b函數(shù)執(zhí)行完畢,返回到主調函數(shù)a函數(shù)的斷點繼續(xù)執(zhí)行剩下的語句,即第步。(7)當a函數(shù)執(zhí)行完畢,返回到主調函數(shù)main函

35、數(shù)的斷點繼續(xù)執(zhí)行剩下的語句,直到main函數(shù)結束,則程序結束。即第步。 四種存儲類別C語言中對變量的存儲類型說明有以下四種:auto 自動變量register 寄存器變量static靜態(tài)變量extern外部變量自動變量和寄存器變量屬于動態(tài)存儲方式,外部變量和靜態(tài)變量屬于靜態(tài)存儲方式,在定義變量的時候要加上變量的存儲類型定義。一般形式如下(即在數(shù)據(jù)類型前面加上存儲類型定義): 存儲類型說明符 數(shù)據(jù)類型說明符 變量列表; 例如:auto int a,b;static float c4=1,8,4,7;register int w;extern double x,y; 1.自動變量(auto)自動變

36、量的說明符為auto。這種存儲類型是C程序中最廣泛應用的一種類型。C語言規(guī)定,在函數(shù)內(nèi)凡未加存儲類型說明的變量都視為自動變量,即,自動變量可以省去auto關鍵字。自動變量有以下特點:(1)自動變量只能定義在函數(shù)內(nèi)部,形參、返回值的數(shù)據(jù)類型前面不能加auto關鍵字,否則TURBO C 2.0提示錯誤。(2)自動變量采用動態(tài)存儲方式,當程序執(zhí)行進入它的作用域,就分配內(nèi)存,可以訪問,當程序出了它的作用范圍,變量內(nèi)存就被回收,變量不可使用。(3)自動變量和我們以前使用的局部變量是等價的,使用方法也一樣,其實以前我們使用的局部變量就是自動變量。如:auto int b,c=3; 等價于 int b,c=

37、3; (相當于省略了auto關鍵字)2.寄存器變量(register) 我們知道當前所用到的變量都是在內(nèi)存中開辟空間的,當一個變量頻繁的讀寫就要反復不斷地訪問內(nèi)存,從而浪費了大量的時間。眾所周知CPU中寄存器的存取速度是非??斓?,為了提高效率,C語言允許將局部變量存放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關鍵字register聲明。 使用寄存器變量要注意的問題:(1)只有局部自動變量和形式參數(shù)可以作為寄存器變量;(2)一個計算機系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個寄存器變量;(3)局部靜態(tài)變量(下面講的)不能定義為寄存器變量。 3.外部變量(extern)外部變量(即全局變量)

38、是在函數(shù)的外部定義的,外部變量的存儲空間分配方法是靜態(tài)存儲分配方式,即程序開始運行時,就分配存儲空間,當程序結束時才回收存儲空間。它的作用域為從變量定義處開始,到本程序文件的末尾,如果在定義點之前的函數(shù)或其它源文件中的函數(shù)想引用該外部變量,則應該在引用之前用關鍵字extern對該變量作“外部變量聲明”。表明該變量是一個已經(jīng)定義的外部變量。有了此聲明,就可以從“聲明”處起,到文件結束,合法地使用該外部變量,即用extern可以擴展外部變量的作用域。4.靜態(tài)變量(static) 靜態(tài)變量的說明符是static,用static關鍵字定義的變量才是靜態(tài)變量。靜態(tài)變量分配存儲空間采用的是靜態(tài)存儲方式。即

39、,當程序運行時就在用戶的靜態(tài)存儲區(qū)分配了空間,當程序運行結束的時候才回收內(nèi)存。我們知道變量按作用域分是有全局變量和局部變量之分的。同樣,靜態(tài)的局部變量和靜態(tài)的全局變量是不同的。 (1)用static聲明的靜態(tài)局部變量函數(shù)中的局部變量在調用函數(shù)后要回收空間,變量的值也隨之消失。有時希望函數(shù)中的局部變量的值在函數(shù)調用結束后不消失而保留原值,當下次再調用這個函數(shù)的時候繼續(xù)使用保留的值,這時就應該指定局部變量為“靜態(tài)局部變量”,即用關鍵字static進行聲明。1)靜態(tài)局部變量屬于靜態(tài)存儲類別,程序開始運行時(而不是函數(shù)發(fā)生調用時,這一點一定要注意)在靜態(tài)存儲區(qū)內(nèi)分配存儲單元。在程序整個運行期間都不釋放

40、,每次調用函數(shù)時靜態(tài)變量的值都是上次調用后的值。而自動變量(即動態(tài)局部變量)屬于動態(tài)存儲類別,在動態(tài)存儲區(qū)內(nèi)分配空間,函數(shù)調用結束后就釋放。2)靜態(tài)局部變量的作用域和動態(tài)局部變量的作用域是一致的,雖然靜態(tài)局部變量在整個程序運行過程中都存在,但在其它函數(shù)中并不能使用該變量。3)靜態(tài)局部變量在程序開始執(zhí)行前賦初值,即只賦一次初值;而自動變量賦初值是在函數(shù)調用時進行的,每調用一次函數(shù)就對自動變量重新賦一次初值。4)如果在定義局部變量時不賦初值,則對靜態(tài)局部變量來說,運行時自動賦初值0(對數(shù)值型變量)或空字符(對字符變量)。而對自動變量來說,如果不賦初值則它的值是一個不確定的值。5)局部靜態(tài)變量不能定

41、義為寄存器變量。 (2)用static聲明靜態(tài)外部變量 外部變量雖然采用的是靜態(tài)存儲方式,但不能說外部變量是靜態(tài)變量,當外部變量使用static關鍵字定義時,這就是靜態(tài)外部變量。我們知道外部變量的作用域可以使用extern關鍵字進行拓展,而靜態(tài)外部變量是不能拓展,即使用了extern關鍵字也不能拓展它的作用域。外部變量和靜態(tài)外部變量都采用的是靜態(tài)存儲方式,唯一不同的就是作用域。 第五章 預處理命令學習內(nèi)容:5.1 宏定義5.2 文件包含5.3條件編譯目的要求:掌握常用的預處理命令與文件包含重點難點:宏定義的應用重點難點詳解:宏定義的應用:宏定義功能是定義符號常量和常參數(shù)的宏,宏定義編譯預處理語

42、句的格式如下 : #define 字符串1 字符串2它把字符串1定義為字符串2,字符串1稱為字符串2的宏定義,例如,下面是符號常量的宏定義: #define ON 1 #define OFF 0 它把符號常量ON定義為1,OFF定義為0。符號常量經(jīng)過宏定義后,就可以在程序中作為常量使用。在宏定義語句中,可以使用已經(jīng)定義過的符號常量定義新的符號常理。例如: #define WID 40 #define LEN (WID+20) 其中第二個宏定義中使用了第一個宏定義的符號常量WID。在執(zhí)行編譯預處理時,程序中出現(xiàn)的所有符號常量WID都將被40置換。1、不帶參數(shù)的宏定義:用一個指定的標識符(即名字)

43、來代表一個字符串。一般形式:#define 標識符 字符串例:#define PI 3.14159說明:(1)宏名一般習慣用大寫字母表示。(2)使用宏名代替一個字符串,可以減少程序中重復書寫某些字符串的工作量。(3)宏定義是用宏名代替一個字符串,也就是作簡單的置換,不作正確性檢查。(4)宏定義不是C語句,不必在行末加分號. #define PI 3.14159; area=PI*r*r; 展開: area=3.14159;*r*r; 出現(xiàn)語法錯誤(5)#define命令出現(xiàn)在程序中函數(shù)的外面,宏名的有效范圍為定義命令之后到本源文件結束。(6)可以用#undef命令終止宏定義的作用域。 格式:#

44、undef 宏名7)在進行宏定義時,可以引用已定義的宏名,可以層層置換。 #define R 3.0 #define PI 3.14159 #define L 2*PI*R #define S PI*R*R main( ) printf(“L=%fnS=%fn”,L,S); (8)對程序中用雙括號括起來的字符串內(nèi)的字符,即使與宏名相同,也不進行置換。(9)宏定義是專門用于預處理命令,只作字符替換。2、帶參數(shù)的宏定義:一般形式: #define 宏名(參數(shù)表) 字符串#define MULT2(X) X*X 其中,MULT2(X)稱為帶參數(shù)的宏,X是它的形式參數(shù)。該宏定義把MULT2(X)定義為

45、X*X。在此定義后,MULT2(X)就可以用在程序中代替定義它的運算表達式X*X。它的形式參數(shù)的使用特性類似于函數(shù)的形式參數(shù)。在程序中需要計算某個數(shù)的平方值時,可以使用這個已定義 的宏,例如:a=10;c=MULT2(a); 在進行編譯預處理時,帶參數(shù)的宏用它的定義置換,其中的形式參數(shù)用實際使用的實際參數(shù)置換。因此,上面的賦值表達式置換后的形式是:c=a*a; 其中定義式中的形式參數(shù)X被實際參數(shù)a置換,該運算表達式的結果是100。當程序中需要計算某兩個變量和的平方時,如果使用上面定義的帶參數(shù)的宏的話,如下所示:w=6;v=4;c=MULT2(w+v); 進行編譯預處理后,上面的賦值表達式置換后

46、的形式是: c=w+v*w+v; 它的運算順序與預定的順序完全不同,計算結果是34。如果上面的宏定義改為下列形式: #define MULT2(X) (X)*(X)上面的賦值表達式置換后就成為: c=(w+v)*(w+v); 它的運算結果就正確了。這里又一次看到在定義式中使用必要圓括號的重要性。 第六章 構造數(shù)據(jù)類型學習內(nèi)容:6.1 枚舉類型6.2數(shù)組6.3結構體6.4位域與位運算6.5共同體6.6 typedef目的要求:掌握結構體的定義和使用掌握一維數(shù)組定義初始化掌握選擇排序、氣泡排序、插入排序的解題方法掌握二維數(shù)組定義初始化掌握字符數(shù)組和字符串的區(qū)別如何利用字符數(shù)組來存放字符串掌握共同體

47、的定義和使用重點難點:二維數(shù)組使用字符數(shù)組的應用字符串的存放結構體的應用重點難點詳解:二維數(shù)組使用二維字符數(shù)組的每一行可以看作一維字符數(shù)組,即二維字符數(shù)組的每一行可以存放一個字符串,于是二維字符數(shù)組又稱為字符串數(shù)組. #include <stdio.h>void main()int i,j;char diamond55=' ',' ','*',' ','*',' ','*','*',' ',' ',' ',&

48、#39;*',' ','*',' ','*',' ',' ','*'for(i=0;i<5;i+) for(j=0;j<5;j+) printf("%c",diamondij); printf("n"); 字符數(shù)組的應用一、字符數(shù)組的定義:char a19, a1010; 二初始化:1、將逐個字符賦給數(shù)組中個元素。 static char a4=h,o,w,!2.可直接將一C字符串賦予某一字符數(shù)組。 static char

49、str8=”program”;三字符數(shù)組的引用??梢砸米址麛?shù)組中每一個元素,得到一個字符。%c可以對整體處理。%s四、字符串和字符串結束標志字符串的結束標志是0,這是系統(tǒng)自動加上的。在初始化時,注意: static char c4=b,o,y;與 static char c4=“boy”; 有區(qū)別。字符串的存放1、puts()函數(shù):輸出字符串(以'0'結尾)。例、 static char c6="China" printf、puts均以'0'結尾. printf("%sn",c); printf需要格式控制符%s put

50、s(c); puts不需要格式控制符,且自動換行 2、gets()函數(shù):輸入字符串到數(shù)組。例、 static char str12; gets(str); 注意:gets()、puts()一次只能輸入輸出一個字符串。而scanf()、printf()可以輸入輸出幾個字符串。例:#include “stdio.h” main() char str80; gets(str); puts(str); 注意:scanf():輸入字符串使用“%s”,輸入的字符串中不能包含0字符(空格),否則輸入結束,輸入的字符數(shù)組名不要加入“&”,一個scanf()語句一次可以輸入多個字符串。Printf():

51、 輸出字符串使用“%s”,輸出的字符串中不能包含0字符,否則輸出結束,一個prinft()語句一次可以輸出多個字符串。 gets():使用gets(字符數(shù)組名)形式,輸入字符串中可以包含0字符,但一個gets()一次只可以輸入一個字符串。 puts():使用puts(字符數(shù)組名)形式,輸出字符串可以包含0字符,但一個gets()一次只可以輸出一個字符串。3、strcat():連接字符串。 strcat(字符串1,字符串2); 把“字符串2”連接到“字符串1”的后面。4、strcpy():字符串拷貝。 strcpy(字符串1,字符串2); 把“字符串2”的值拷貝到“字符串1”中 不能用賦值語句將

52、一個字符串常量直接賦給一個字符數(shù)組,應使用strcpy()函數(shù)。5、strcmp():字符串比較。比較“字符串1”、“字符串2”,例、 strcmp(str1,str2); strcmp("China", "Korea"); strcmp(str1, "Beijing"); 比較規(guī)則:逐個字符比較ASCII碼,直到遇到不同字符或0,比較結果是該函數(shù)的返回值。6、strlwr():將字符串中的大寫字母轉換為小寫字母(lwr:lowercase小寫)。7、strupr():將字符串中的小寫字母轉換為大寫字母(upr:uppercase大寫)。 注意:以上函數(shù)均是庫函數(shù),使用時必須用#include語句包含頭文件。#include “string.h”結構體的應用:結構體是由不

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論