



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、杭州電子科技大學(xué)C 語言要點總結(jié)草稿鄔惠峰2011-5-20 PAGE PAGE 69目錄 HYPERLINK l _bookmark0 第1 章C 語言程序的基本形式4 HYPERLINK l _bookmark1 C 語言的結(jié)構(gòu)4 HYPERLINK l _bookmark2 標(biāo)識符4 HYPERLINK l _bookmark3 保留字(即關(guān)鍵字)5 HYPERLINK l _bookmark4 基本數(shù)據(jù)類型5 HYPERLINK l _bookmark5 算術(shù)表達(dá)式7 HYPERLINK l _bookmark6 C 語言的基本語句7 HYPERLINK l _bookmark7 第2
2、 章 流程控制11 HYPERLINK l _bookmark8 控制表達(dá)式11 HYPERLINK l _bookmark9 for 循環(huán)語句12 HYPERLINK l _bookmark10 while 語句13 HYPERLINK l _bookmark11 Do- while 語句15 HYPERLINK l _bookmark12 if 語句15 HYPERLINK l _bookmark13 條件表達(dá)式運算符19 HYPERLINK l _bookmark14 break 語句19 HYPERLINK l _bookmark15 continue 語句20 HYPERLINK l
3、 _bookmark16 switch 語句20 HYPERLINK l _bookmark17 第3 章 數(shù)組與字符串22 HYPERLINK l _bookmark18 一維數(shù)組22 HYPERLINK l _bookmark19 多維數(shù)組23 HYPERLINK l _bookmark20 數(shù)組元素初始化24 HYPERLINK l _bookmark21 字符串25 HYPERLINK l _bookmark22 字符串函數(shù)27 HYPERLINK l _bookmark23 字符函數(shù)和字符轉(zhuǎn)換及運算27 HYPERLINK l _bookmark24 第4 章 函數(shù)與變量29 HYP
4、ERLINK l _bookmark25 4.1C 程序設(shè)計的一般形式29 HYPERLINK l _bookmark26 4.2 函數(shù)30 HYPERLINK l _bookmark27 函數(shù)返回值32 HYPERLINK l _bookmark28 函數(shù)的調(diào)用33 HYPERLINK l _bookmark29 遞歸函數(shù)與遞歸調(diào)用34 HYPERLINK l _bookmark30 外部函數(shù)和內(nèi)部函數(shù)(了解)34 HYPERLINK l _bookmark31 變量的存儲類型35 HYPERLINK l _bookmark32 第 5 章 指針41 HYPERLINK l _bookmar
5、k33 指針和地址41 HYPERLINK l _bookmark34 指針變量和指針運算符41 HYPERLINK l _bookmark35 指針與函數(shù)參數(shù)45 HYPERLINK l _bookmark36 指針、數(shù)組和字符串指針46 HYPERLINK l _bookmark37 指針數(shù)組49 HYPERLINK l _bookmark38 多級指針51 HYPERLINK l _bookmark39 返回指針的函數(shù)52 HYPERLINK l _bookmark40 函數(shù)指針53 HYPERLINK l _bookmark41 第6 章結(jié)構(gòu)體54 HYPERLINK l _bookm
6、ark42 結(jié)構(gòu)的定義54 HYPERLINK l _bookmark43 結(jié)構(gòu)數(shù)組56 HYPERLINK l _bookmark44 結(jié)構(gòu)與函數(shù)57 HYPERLINK l _bookmark45 結(jié)構(gòu)的初始化58 HYPERLINK l _bookmark46 第7 章預(yù)處理程序60 HYPERLINK l _bookmark47 什么是預(yù)處理程序60 HYPERLINK l _bookmark48 宏定義和宏替換60 HYPERLINK l _bookmark49 文件包含61 HYPERLINK l _bookmark50 條件編譯61 HYPERLINK l _bookmark51
7、 7.4 格式化輸入/輸出61 HYPERLINK l _bookmark52 第8 章枚舉、位操作63 HYPERLINK l _bookmark53 8.1 枚舉63 HYPERLINK l _bookmark54 8.2 位操作運算符63 HYPERLINK l _bookmark55 第9 章文件66 HYPERLINK l _bookmark56 ASCII 碼文件的存取66 HYPERLINK l _bookmark57 二進(jìn)制文件的存取67第1 章C 語言程序的基本形式C 語言的結(jié)構(gòu)C (Function)C C void main()void main()變量說明語句; 執(zhí)行語
8、句;main()只能有一個main 許多常用的函數(shù)做成標(biāo)準(zhǔn)函數(shù)與C *This program is sum of two integer and the results*void*This program is sum of two integer and the results*voidmain()inta,b,sum;/*a,b sum */ a=123;b=456; sum=a+b;rf“Te mf%ddds%,);main()a,b sum (int)標(biāo)識符C 語言中所使用的每個函數(shù)和變量都應(yīng)有唯一的名稱,這樣才能被識別和使用。通常, 這種函數(shù)和變量名稱用一串字符表達(dá),稱為標(biāo)識符。C
9、 語言使用的標(biāo)識符有嚴(yán)格限制:, ;()。: 正確的函或變量名:_abc,veb7,lev_5錯誤的函數(shù)或變量名稱的實例:3H, sUM$,char保留字(即關(guān)鍵字)在 C 語言中保留字或關(guān)鍵字并不太多,原先規(guī)定有 28 個,新標(biāo)準(zhǔn)規(guī)定改為 32 個,如下所示:autodefaultlongvoidbreakdoforregisterstructvolatilecasedoublefloatreturnswitchwhilecharenumgotosizeoftypedefelseifsignedunionintshortunsigned基本數(shù)據(jù)類型C 語言可以使用多種數(shù)據(jù)類型整類型實類(類型
10、): 度點型float 度點型字類型char枚類型(2)類型數(shù)類型結(jié)類型struct聯(lián)類型(3)類型&,*(4)型void整數(shù)型(integerint 型)整數(shù)型常量不僅可以用十進(jìn)制表示,也允許用八進(jìn)制或十六進(jìn)制表示,例如:62十進(jìn)制數(shù)053八進(jìn)制數(shù)以 0 打頭,由 07 構(gòu)成。0 x32十六進(jìn)制數(shù)0 x 打頭,由 09 AF 如 0 x2C2 即(21612)165709整數(shù)類型又可細(xì)分成不同長短的類型,應(yīng)加上類型修飾符構(gòu)成,即:shortint可化為short longint可化為unsignedintunsigned浮點類型(float 型)實數(shù)類型也叫浮點類型。可包含有整數(shù)部分和小數(shù)部
11、分,例如:0.012 于.0125.0 等同于 5.科學(xué)計數(shù)法中,則用“尾數(shù)e指數(shù)”表示浮點數(shù)值,e 即exponent(指數(shù))例如: 6.3e5 等同于 630000.0其中,6.3 就是尾數(shù),含有整數(shù)部分(integer part)為 6 和小數(shù)部分(fractional part)為 3, 而 5 就是指數(shù) (exponent) 部分。尾數(shù)和指數(shù)也都有可能為負(fù)值,例如:-1.23e412.34567e-8-78e-12字符類型(char 型)字符類型的數(shù)據(jù)代表一個字符,由一對單引號將字符括起來,表示的是該字符在 ASCII 碼表中的代碼值,例如:a9765它們占 1 byte。ASCII
12、 碼表中的某些控制字符不可顯示,則通過加反斜線“”的轉(zhuǎn)義字符表示,例如:0表示NULL(空)即0t表示tab(制表)即9n表示new line(新行或換行)即r表示return(回車)即13表示反斜線即92#include void main ( )char c1,c2;/*定#include void main ( )char c1,c2;/*定字類型c1=97;c2=98;/*賦型*/printf(%c # %cn, c1,c2);/*以字符類型輸出*/例 1.3: 小寫轉(zhuǎn)大寫void main ( )char c1, c2; c1=a; c2=b;/*定義字符類型void main (
13、)char c1, c2; c1=a; c2=b;/*定義字符類型*/c1=c1-32c2=c2-32;/*/printf(%c%c, c1,c2);算術(shù)表達(dá)式C 語言中算術(shù)運算符算術(shù)示式變、量及術(shù)算構(gòu)。在C 言算運符:、*、%、,*,和為四則運算符,和日常概念沒有區(qū)別,其中*和優(yōu)先于和。%為取模(Modulus)運算符,是針對整數(shù)運算,即取整數(shù)除法之后,所得到的余數(shù),例如:10%3110 3 1。13%8513 8 5。為自減 1,為自增 1。n或n 都變量 n 自增 1,最終結(jié)果與 nn1 等效。但處理過程卻有所區(qū)別。nn 1nn n 1。n6n 數(shù)據(jù)類型與運算結(jié)果的關(guān)系整型數(shù)的除法得到的
14、結(jié)果仍是整型數(shù),小數(shù)部分將被去掉,例如:522而不是 2.5。浮點數(shù)的除法得到的仍是浮點數(shù),例如: 5.02.02.55.022.5C 語言的基本語句C 語言的特點C 變量說明語句變量明句主作就是義量型其式是類型明符量1量2;例intnumber;char a,b,c; float t1;賦值語句賦值語句是將常量或算術(shù)表達(dá)式的運算結(jié)果賦給變量,其格式是: 變量名常量或算術(shù)表達(dá)式;例如:int number; number10;voidmain()voidmain()int int total; n11; n22; n33;totaln1n2n3;/* */基本輸入輸出語句printf()和 s
15、canf()是 C 語言的基本輸入輸出函數(shù),都放在標(biāo)準(zhǔn)函數(shù)庫中,為了使用它們, 應(yīng)在程序開頭加上:#include基本輸入輸出語句就是直接調(diào)用這兩個基本輸入輸出函數(shù)。輸出語句一般格式是:rf 控制串(或格式串)是用雙引號括起來的輸出格式控制說明??刂拼忻恳粋€變量都應(yīng)當(dāng)與后面相應(yīng)的某個表達(dá)式對應(yīng)??刂拼謨刹糠郑矗阂@示的字符和格式串。格式串以“%”開頭,后跟格式碼。格式串與參數(shù)一一對應(yīng)。含有不同格式碼的格式串表示顯示不同的內(nèi)容,如下所示:%c%s%d%o%x%u%f%e格式碼前可加修改量以便更好地控制顯示格式,主要有:字符寬度控制,例如:%4d4 %10s10 精度控制,例如:%10.4f
16、10 4 位%5.7s5 7 位L 或h%Ld%hd%Lf顯示位置默認(rèn)為右對齊,若加負(fù)號(即“”),則為左對齊,例如:%d%d 左對齊顯示十進(jìn)制整數(shù)例如:例如:prinft(“Welcomen”);與前例不同是后面加了一個換行符。例如:int number10;printf(“The number is %dn”,number); 應(yīng)顯示:The number is 10例如:floatvaluel,value2,value3; value12.3;printf(“The average of %of and %f and %f is %fn”,value1,value2,value3, (v
17、alue1value2value3)3.0);應(yīng)顯示:The average of 2.3 and 4.5 and 6.7 is 4.5%d 和%f 表示在相應(yīng)的位置顯示的數(shù)據(jù)類型,且一一對應(yīng)。%d 表示要顯示整型數(shù),%f 表示要顯示浮點型數(shù)。輸入語句一般格式是:f(1()printf()%int number; scanf(“%d”,&number);其中,%d 表示應(yīng)以整型格式輸入,&number 表示指向 number 的地址。注意:控制串中的非空白符,例如:scanf(“%d,%d”,&i,&j)上式中“%d”之間有逗號,輸入時也應(yīng)加逗號。還可用修改控制域?qū)挘纾?20s 就只取前
18、20 個字符%s 取全串例如 :float average; scanf(“%f”,&average);其中,%f 表示應(yīng)以浮點型格式輸入,&average 表示指向average 的地址。第2 章流程控制控制表達(dá)式程序的流程走向是由條件表達(dá)式的值控制決定的。表達(dá)式總是有值的。邏輯表達(dá)式邏輯表達(dá)式由變量、常量和邏輯關(guān)系運算符構(gòu)成,用以表示變量的邏輯關(guān)系。輯與 (AND)&輯或 (OR)|輯非(NOT)!邏輯表達(dá)式只有兩種可能的取值,真假必取其一。假者取值為 0;真者取值為 1。關(guān)系運算符!關(guān)系表達(dá)式也只有兩種可能的取值,例如: ab0(false)值為真(true),取值 1。運算操作符的結(jié)合
19、性和優(yōu)先級例如,處理表達(dá)式ab*c 時,*優(yōu)先于,相當(dāng)于 a(b*c)。abc 是將 bc 結(jié)果賦給 a又如:a*bc 相當(dāng)于 aa*(bc)。單操作數(shù)的運算操作符(自增 1),(自減 1),(負(fù)號)的結(jié)合性也都從右向左。例如,i相當(dāng)于(i),而不是(i)關(guān)于運算符的優(yōu)先級低于算術(shù)運算符,例如:abc 等同于 a(bc)for 循環(huán)語句for 循環(huán)語句的一般格式為:for(初始化表達(dá)式;循環(huán)條件;循環(huán)表達(dá)式)循環(huán)體語句塊#includestdio.hvoid main()int n#includestdio.hvoid main()int n;for (n1;n100;n) printf(“%
20、dn”,n);/*循環(huán)體語句*/r 循環(huán)條件是一個邏輯表達(dá)式,若該式取值為真即條件滿足,則繼續(xù)執(zhí)行循環(huán);否則, for 語句執(zhí)行過程(4)返回第(2)步。includestdio.hvoid main()includestdio.hvoid main()int n,result; result1;for(n1;n10;n)result*n printf(“%d!%dn”,n,result);/*語句*/#include main()inti;fori=32;i127;i+)/*#include main()inti;fori=32;in)printf(“The first number is
21、biggern”);if 語句復(fù)合的 if 語句格式為:if(邏輯表達(dá)式)語句塊 1 else語句塊 2若滿足邏輯關(guān)系,即邏輯表達(dá)式的值為真,則執(zhí)行語句塊 1;否則,執(zhí)行語句塊 2。2.9#include main()int m,n;printf(“Please input two numbersn”); scanf(“%d %d”,&m,&n);if(mn)printf(“The first number is biggern”); else/* mn */printf(“The first number is biggern”);例 2.10:檢查閏年* This determines i
22、f a year is a leap yaer * #includemain()int x;printf(“Please input two numbersn”);scanf(“%d”,&x); if(x%40&x%100!0|x%400=0)printf(“%d is a leap yearn”,x); else/* printf(“%d is not a leapyearn”,x);可見,這種復(fù)合的 if 語句是等同于兩個簡單的 if 語句,即:if(邏輯表達(dá)式)句塊if(表達(dá))2if 語句在 if 語句的語句塊中還可包含 if 語句,這就形成嵌套的 if 語句。其格式為:if(邏輯表達(dá)式
23、 1)if(邏輯表達(dá)式 2)語句塊 1elseelse語句塊 2語句塊 3-1(x0)void main ( )int x,y;scanf (%d,&x); if (x0)和(x=0)*/ elsey=1;/*else 括(x0) */printf (x=%d,y=%dn,x,y);if 與else else, else else if if if(邏輯表達(dá)式 1)if(邏輯表達(dá)式 2)else-if else語句塊 1語句塊 2else if_else1)語句塊 1else if(邏輯表達(dá)式 2)語句塊 2else if(邏輯表達(dá)式 3)語句塊 3else語句塊 n例 2.12:用 else
24、-if 語句,寫一個程序,輸入一個數(shù) x,打印出符號函數(shù) sign(x)的值。符號函數(shù)為sign(x)10 x0#includevoidmain()int number,sign;printf(“Please type in a number x”); scanf(“%d”,&number); if(number0 */ sign0;elsesign1; printf(“sign(x)%dn”,sign);條件表達(dá)式運算符條件表達(dá)式運算符的一般格式為:條件 ? 表達(dá)式 1:表達(dá)式 21 表達(dá)式 2 的值作為整個條件表達(dá)式的運算結(jié)果。例 2.13:求最大值.#include main()int
25、a,b,c;scanf(“%d %d”,&a,&b);c(ab)?a:b;/*取a 和b 者給cprintf(“The is %d”,c);break 語句break for,while,do switch break 例2.14:九法表#includemain()int i,j; for(i1;i9;i)for(j1;ji)break;/*大乘時出循環(huán)printf(“%d“,i*j);printf(“n”);其結(jié)果將打出三角形的乘法表,即1243694812169 18 27 36 45 54 63 72 81continue 語句continue 語句執(zhí)行后,在本次循環(huán)中其他語句均不執(zhí)行,
26、轉(zhuǎn)而繼續(xù)執(zhí)行循環(huán)體的下一次循環(huán)。在 whiledo 循環(huán)中意味著立即轉(zhuǎn)入條件測試,在 for 循環(huán)中意味著立即轉(zhuǎn)到執(zhí)行 i,而進(jìn)入下一次重復(fù)。例 2.15:只做正數(shù)的累加而跳過負(fù)數(shù)#include main()int a,i,n,sum; scanf(“%d”,&n); sum0;for(i0;in;i) scanf(“%d”,&a); if(a0)continue; suma;printf(“The sum%dn”,sum);switch 語句switch 語句的一般格式為:switch(表達(dá)式)case 1 break;case 2 break;case n break;default:語
27、句塊 n1 break;它是根據(jù)表達(dá)式為不同的值而執(zhí)行不同的語句塊,可以看成是特殊的 else_if 語句。即:if(表達(dá)式常量 1)語句塊 1else if(表達(dá)式常量 2)語句塊 2if(表達(dá)式常量 n)語句塊 n else語句塊 n1但用 switch 語句則更方便,實際上也用得更多一些。第3 章數(shù)組與字符串一維數(shù)組數(shù)組及其特點te數(shù)組是相關(guān)變量的有序集合,其中所有的變量具有相同的數(shù)據(jù)類型。數(shù)組的特點:一維數(shù)組說明和下標(biāo)型明符數(shù)名其中,size 為數(shù)組的大小,即組成該數(shù)組元素的個數(shù)。C 語言中,數(shù)組的下標(biāo)從 0 開始,到 size1 為止。例如:int x50 到4 共5 0143.1(
28、Fibonacci)16 項#include void main()#include void main()t6,; Fibonacci00; Fibonacci11; -i1for(i0;i16;i)printf(“%d,”,F(xiàn)ibonaccii); printf(“n”);執(zhí)行結(jié)果:0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,510,多維數(shù)組多維數(shù)組說明格式為:型明符數(shù)組e1ee其中,size1,size2,sizen 為數(shù)組各維的大小。組成該組元素的總個數(shù)應(yīng)為 size1 size2sizen。例如:t001020 009 019099例 3.2 將
29、一個二維數(shù)組行和列元素互換,存入另一個二維數(shù)組里#include void main ()static int a23=1,2,3,4,5,6;static int b32,i,j; printf(array a : n);#include void main ()static int a23=1,2,3,4,5,6;static int b32,i,j; printf(array a : n);for (i=0;i=1;i+)for (j=0;j=2;j+)/*循環(huán)變量作為行坐標(biāo)*/*循環(huán)變量作為列坐標(biāo)*/printf(%5d,aij);bji=aij;*/printf(n);printf(
30、array b : n); for (i=0;i=2;i+)for (j=0;j=1;j+)/*循環(huán)變量作為行坐標(biāo)*/*循環(huán)變量作為列坐標(biāo)*/printf(%5d,bij);printf(n);數(shù)組元素初始化數(shù)組的初始化C 語言允許在說明時對全局?jǐn)?shù)組和靜態(tài)數(shù)組初始化,即給各個元素賦以初始值,例如:void main()int counters50,1,2,3,4; char ctM50,372,9,0,0,8,732,intx50,1,2;*0*當(dāng)給出初始值的個數(shù)少于數(shù)組全部元素個數(shù)時,未列出的后若干個初始值默認(rèn)為 0。有時,不直接給出數(shù)組大小,作為變長數(shù)組出現(xiàn),也照樣可以初始化。例如:int
31、 a1,2,3,4,5; floatf1.2,2.5,3.8,4.0; char char error“read errorn”;字符串字符串要用一維字符數(shù)組處理, 實質(zhì)上就是以空字符結(jié)尾的字符數(shù)組。以空字符結(jié)尾的字符數(shù)組空字符就是 NULL,即0。一個字符串可看成結(jié)尾為0的不定長的一維字符數(shù)組。例如:“a”等同于a,0 “等同于0“ “等同于,0“Hello!n”等同于H,e,1,1,o,!,n,0字符串常量可采用類似于變長數(shù)組初始化處理。intA0,1,2,3,4;static char xH,e,l,l,0,!,0;0char x“Hello”;可用%s 的格式顯示一個以0結(jié)尾的字符串。
32、系統(tǒng)顯示字符串遇到空格符0時,就結(jié)束該字符串的顯示。例如:static char x“Hello!”; printf(“%sn”,x);此語句的執(zhí)行結(jié)果,將顯示:Hello字符串的輸入可用%s 的格式輸入一個字符串。例如:char s120; scanf(“%s”,s1);在1 輸入字符串時,遇到空格或回車則結(jié)束。用 scanf()輸入字符或字符串時,遇到空格或回車結(jié)束。這不便于文字處理,一般用getchar()函數(shù)輸入單字符。例如:#include void main轉(zhuǎn)義字符char ch; chgetchar();一些特殊字符,須用反斜線來轉(zhuǎn)義,例如:0NULb退格n回車換行r回車不換行t
33、橫向制表v縱向制表單引號”雙引號f換頁反斜線例 3.3 輸出一個鉆石圖形。main ()static chardiamond5=/*/ , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*;int i,j;fori=0;i5;i+)/* */運行結(jié)果:forj=0;j5;j+)/*printf(%c,diamondij);printf(n);*例3.4統(tǒng)輸?shù)奈淖侄鄠€詞。/*“L6-8 */ #includestdio.h main()char string81;int i,num=0,word=0; char c;gets(string);/* string */ fori
34、=0;(c=stringi)!=0;i+)ifc/* c elseifword=0)/* c c */word=1;num+;printf(Thereare%dwordsinthelinen,num);字符串函數(shù)C string.h string.h#include 字符函數(shù)和字符轉(zhuǎn)換及運算1. 字符函數(shù)C 語言編譯器的字符函數(shù)放在文件ctype.h ctype.h, #include這類函數(shù)主要是用于字符類別判斷及轉(zhuǎn)換,例如:isalnum(ch)若ch 為母數(shù),返非零;則返零。islower(ch)是小字,返非值;則返零。tolower(ch)字轉(zhuǎn)成寫例 3.5 (ASCII )。/*L6
35、-9*/ main ()char string20;charstr320;/*inti;for (i=0;i0)/* 比較 strcpy(string,str0);/* 串制到string */ elsestrcpy(string,str1);ifstrcpy(string,str2);printf(nthe largest string is:n%sn,string);第4 章函數(shù)與變量C C C C 程序設(shè)計的一般形式1. C 語言程序的一般格式全局變量說明main()部量明行)fn(形參定義)局部變量說明執(zhí)行語句例 4.1:輸出 fa(n)函數(shù)值#include intfa(intn)/
36、* int*/ifn0)return1);/* else return0);main()int a;printf(請輸入數(shù)據(jù):n);scanf(“%d”,&a);printf(“n%dn”,fa(a);/* a n */例 4.2:將輸入的大寫字母轉(zhuǎn)換為小寫*a stringinlowercaes#includecharuptolow();/* uptolow()*/ voidmain()char ch; doprintf(“Please type in a lettern”); scanf(“%c”,&ch); printf(“%c”,uptolow(ch);/* while(ch!);*格
37、符結(jié)束printf(“n”);charuptolow(chark)/* */if(kA&k) kaA; return(k);函數(shù)C 語言程序的基本構(gòu)件C :(2)(3)例 4.3:求任意兩個整數(shù)的階乘之和void main()int number1,number2,result; int factorial();printf(“Please type number1 and number2”);scanf(“%d %d”,&number1,&number2); resultfactorial(number1)factorial(number2); printf(“number1!+ numbe
38、r2! %d”,result);intfactorial(intn)/* */int result11; while(n!0)result1 * n;n-;returnresult1;*result1 *類型說明符 函數(shù)名(形參定義)局部變量說明函數(shù)體語句注意:函數(shù)也可能不需要傳遞參數(shù),這時只保留括號,也無需對形參說明。形參表內(nèi)可含有多個變量,用逗號分隔開。例如:float sum(float a,float b)return(ab);例 4.4 函數(shù) power()實現(xiàn) xn,其中 n 是整數(shù)#include double power(double xintn)/* */double p;
39、if (n0)for (p=1.0; n0; n-) p=p*x;else p=1.0;return(p);/* 函值*/void main ()double m;mpower(12.0,2);/* */ printf(“n %en”,m);printf(“n 計算結(jié)果為:%en”,power(12.0,3);函數(shù)返回值函數(shù)返回值的類型說明型明符數(shù)名()voidf(b)f(b)return有返回值的函數(shù)需要用返回語句來傳送返回值。return;或return(返回變量名或表達(dá)式值);,return printmessage()printf(“programming is fun n”); re
40、turn;2) 從函數(shù)返回調(diào)用點,并返回函數(shù)的值。例如:計算階乘factorial3(int n)int result1; return(result);while(n! 0)result*n-;return(result);在 return 語句括號內(nèi)的 retult 是被返回的變量, 帶回函數(shù)值。函數(shù)的調(diào)用函數(shù)的參數(shù)函數(shù)定義格式為:類型說明符 函數(shù)名(形參表) 形參說明函數(shù)體函數(shù)的調(diào)用格式為:函數(shù)名(實參表)注意:(); (2)(3) 函數(shù)返回值只能有一個,要想得到多個參數(shù) a1,a2,值, 則需定義全局變量 a1, a2,或用地址指針操作。函數(shù)調(diào)用順序及類型說明4.5float sum(
41、floata,floatb)/* */return(ab);void main()float first,second; first1.0; second2.0;printf(“%fn”,sum(first,second);/* */注意:簡單的函數(shù)適于放在前頭。因主函數(shù)中未對函數(shù)定義,放在后頭易出錯。在主函數(shù)中說明函數(shù)類型,對該函數(shù)的定義放在后面。例 4.6:調(diào)用函數(shù)求兩數(shù)之和。void main()floatfirst,second,sum();/* sumfirst1.0;second2.0; printf(“%fn”,sum(first,second);float sum(floata
42、,floatb)/* sum(a,b*/return(ab);遞歸函數(shù)與遞歸調(diào)用遞歸函數(shù)有些函數(shù)可用遞歸定義,稱為遞歸函數(shù)。例:n 的階乘遞歸調(diào)用n!1n0 時n*(n1)!時遞歸函數(shù)的計算程序,可采用遞歸調(diào)用算法實現(xiàn)。例如:計算 n 的階乘foctorial4(intn)int if(n0)result1;elseresultn*foctorial4(n1);/* returnresult;外部函數(shù)和內(nèi)部函數(shù)(了解)基本概念存儲類是extern,static(extern)標(biāo)符函名形表)如intfun(inta,intb) /*義fun 內(nèi)函,類為int*/ externintf1(inta
43、,intb)/*義f1 部數(shù)*/intf2(inta,intb)/*f2 */4.7 file1.c(1)#include externprime();/ void main()intnumber;printf(“請輸入一個正整數(shù):n”); scanf(“%d”,&number);if (prime(number)printf(“n %d 是素數(shù).”,number); elseprintf(“n %d 不是素數(shù).”,number);file2.c(源文件 2)intprime(intnumber)*/int flag=1,n;for (n=2;nnumber/2 & flag=1;n+) if
44、(number%n=0)flag =0;return flag;變量的存儲類型局部變量例 4.8:#includemain()intx;/*/x1; func1(); func2();printf(“x%dn”,x);/* 1*/func1()intx;/*x10;return;func2();floatx;/*x1.2;return;其中,局部變量 x 在三個函數(shù)中彼此無關(guān)。執(zhí)行結(jié)果:x110 x21.2 x1例4.9:局變量x 變化#include main()int x1;int x2;int x3;printf(“x1%dn”,x);/*3*/*釋 放 x 值 3 */ printf(
45、“x2%dn”,x);/*輸出為2 /*x 2 */printf(“x3%dn”,x);/*1 */靜態(tài)局部變量靜態(tài)局部變量局限于定義它的函數(shù)之內(nèi),但并不隨函數(shù)的退出而消失。例 4.10:靜態(tài)局部變量*Program to local and variables*#includemain()int i; for(i0;i5;i)as();as()執(zhí)行結(jié)果:int 1v0;static int sv0; *靜態(tài)局部變量每次調(diào)用的保留上次調(diào)用的值 * printf(“l(fā)ocal%d,static%dn”,1v,sv);1v; sv; return;靜態(tài)局部變量的特點:全局變量(全程變量)定義在所有
46、函數(shù)之外,可供所有函數(shù)訪問的變量,稱為全程變量或全局變量。例4.11:求入的乘。#include intnumber;* 定義number 變量main()printf(“Please type in the number n”); scanf(“%d”,&number); printf(“%d!%d”,number,factorial2();factorial2()intresult1;* 定義result 局部量* while(number!0)/* 接用變量number */result*number; number-;return(result);函數(shù) factorial2()沒有形參
47、,可直接對全程變量 number 進(jìn)行處理,函數(shù)調(diào)用時也不需要實參。例 4.12 程序分析(1)#includemain ()inti,j=1;/* main 定變量*/for (i=0;i3;i+) /* 使用 main 中定義的變量 i */int i=0;i=i+j+;/* i */ printf(%d,i/* i */printf(%ddn,i,j);/* main i*/程序的輸出結(jié)果: 1,2,3,3,4(2)#include intfunc();inti=5;/* */void main ()inti,x;/* 自變量x=10;for (i=0;i3;i+) /* 使用 main
48、 中定義的變量 i */int x=1;printf(%d,+x);/* x x=func();printf(%d, n,x);int func()printf(%d, ,i); i+;return(i);程序執(zhí)行結(jié)果:2,5,2,6,2,7,10#include voidinner();#include voidinner();void char c=A; void main()int i;for (i=0; i3; i+)inner();st_pr(); printf(%c;,c); c+;void inner ()char c=a; printf(%c,c); c+;voidst_pr(
49、)static char c=Z; printf(%c,c);c-;程序執(zhí)行后的輸出結(jié)果:aZA;aYB;寄存器變量Register明符量1)2)register int i; for(i=0;iLIMIT;i+)#include int fac(int n)register int i,f=1; for(i=1;i=n;i+) f=f*i;#include int fac(int n)register int i,f=1; for(i=1;i=n;i+) f=f*i;return(f);main()int i; for(i=1;i=5;i+)printf(%d!=%dn,i,fac(i);第
50、5 章指針指針和地址指針是 C 語言中一個極其重要的概念,也是 C 語言程序設(shè)計的難點。指針的定義()。C 指針變量和指針運算符指針變量及其說明型明符*變名;例如:int*P;說明針量P 向int 類型量指針. char*s;說明針量s 向char 變的針。float*f;說明針量f 指向float 類型量指。Double*d;d double int pa;pa int pa int*fpi();fpi()int Int(*pfi)();pfi int 0 0 NULL 在C 指針運算符&和*指針變量雖是正的整數(shù)值,但不是整數(shù)類型變量。指針變量最基本的運算符是&和*。&它的作用是返回后隨變量
51、(操作數(shù))的內(nèi)存地址。請注意,它只能用于一個具體的變量或數(shù)組元素,不可用于表達(dá)式。例:int *p; int m; m=200; p=&m;這是將整數(shù)類型變量 m 的地址賦給整數(shù)類型的指針變量p。(2) *取值它的作用是返回其后隨地址(指針變量所表達(dá)的地址值)中的變量值。例:int *p; int m; int n; m=200; p=&m; n=*p;p (m)m=np。&與*運算符互為逆運算。對指針變量 px 指向的目標(biāo)變量*px 實行取址運算:&(*px)其結(jié)果就是 px。對變量 x 的地址實行取值運算:*(&x)其結(jié)果就是 x。注意,x 與*px 同級別可寫成 x=*px 或*px=x
52、。px 與&x 同級別可寫成 px=&x,但決不可寫成&x=px,也不能寫成 px=x。指針的初始化和賦值運算針初化往指針定說同完,初化般式: 型明符針量始址值;例如:請注意:charc;char*charp=&c;: 必須加以定義說明。 必須經(jīng)過初始化。 未經(jīng)過初始化的指針變量禁止使用。&指針變量可以進(jìn)行賦值運算,這種賦值運算操作也僅限制在同類之間才可實現(xiàn)。例 5.1:指針變量的引用。void main()intx=10int*p1=&x,*p2;/* p1 向 x */ p2=p1;/*p2 向 xprintf(“%dn”,*p2);執(zhí)行結(jié)果應(yīng)顯示:10例 5.2:指針變量的運算。void
53、 main()char /*c char*charp=&c;/*c charp */ printf(“%c%cn”,c,*charp);c=B;/*c printf(“%c%cn”,c,*charp);*charp=a;/*將指針變量 charp 所指向地址的內(nèi)容改為printf(“%c%cn”,c,*charp);執(zhí)行結(jié)果應(yīng)顯示:AA aasizeof 運算符sizeof 運算符可以準(zhǔn)確地得到在當(dāng)前所使用的系統(tǒng)中某一數(shù)據(jù)類型所占字節(jié)數(shù)。sizeof 運算的格式:sizeof(類型說明符)其值為該類型變量所占字節(jié)數(shù)。用輸出語句可方便地打印出有關(guān)信息,例如:printf(“%dn”,sizeof
54、(int);printf(“%dn”,sizeof(float); printf(“%dn”,sizeof(double);指針的算術(shù)運算只有如下四種:,1 1 指針自增運算意味著指針向后移動一個數(shù)據(jù)的位置,指向的地址為原來地址sizeof(類型說明符)。例如:int i,*p; p=&i; p;結(jié)果是 p 指向了變量 i 的地址sizeof(int)。加()n sizeof()*n()正整數(shù) n sizeof()*n。指向同一種數(shù)據(jù)類型的指針,才有可能進(jìn)行各種關(guān)系運算。指針的關(guān)系運算符包括有:,!,。它們實際所進(jìn)行的是兩個指針?biāo)赶虻牡刂返谋容^。0 0(NULL)pp=0 p!=0 p 使用
55、指針編程中的常見錯誤main()intx=0;*p=x;/*/*p 未被初始化。main()float x,y; short int *p;p=&x;/*y=*p;x,y 與*p 數(shù)據(jù)類型不符。void main()int x,*p; x=10p=x錯在以普通變量 x 賦給指針變量 p。局變的址始化態(tài)指變,如: intglo;func()int1oc1,1oc2; intint *1p=&1oc1; int*rp&1oc2;用局部變量 1oc1 去初始化靜態(tài)的指針變量 1p 是錯誤的。指針與函數(shù)參數(shù)例 5.3:x 和y 的值互換。#include swap1(int x,int y)int t
56、emp; temp=x#include swap1(int x,int y)int temp; temp=x; x=y; y=temp;void main()int a,b; a=10; b=20; printf(“a=d%db=%dn”,a,b);a=10b=20雖然,swap1()x y x,y y a b 改用指針作為參數(shù),也就是用變量的地址作為參數(shù),即所謂“傳址”(或稱為“傳名”) 的調(diào)用,就可改變相應(yīng)地址中的變量。#include swap2(int *px,int *py)inttemp; temp=*px;*px=*py#include swap2(int *px,int *py
57、)inttemp; temp=*px;*px=*py;*py=temp;void main()inta,b; a=10; b=20;swap2(&a,&b);/*printf(“a=%db=%dn”,a,b);執(zhí)行結(jié)果:a=20b=10a 與 b 的地址,即&a 與&b 并未交換,但其值已被交換。指針、數(shù)組和字符串指針指針和數(shù)組inta10;則在內(nèi)存中占有從一個基地址開始的一塊足夠大的連續(xù)的空間,以包容 a0,a1, a9?;刂?或稱為首地址)是 a0存放的地址。其他依下標(biāo)順序排列。若定義一個指針:int*p;則意味著:p=&a0;即p 指 向 a0 p1 指向 a1 p2 指向 a2pi=
58、&ai;pi 指向ai(i=0,9)(1)C 當(dāng)作a0p=a+i p=&ai0 (2) p a p=ap+i ai,a+i ai。這樣,ai與*(p+i)或*(a+i)可看成是等價的,可互相替代使用。注意:a p=aa=p, p+a+。字符串指針C char char char #include strlen( char *s)intn; for(n=0;*s!=0#include strlen( char *s)intn; for(n=0;*s!=0;s) n+return(n);void main()char str=“Hello!printf(“%cn”,*str); printf(“%
59、dn”,strlen(str); printf(“%cn”,*(str+1);執(zhí)行結(jié)果:H6e定義字符指針可以直接用字符串作為初始值,來初始化字符指針。例如:char *message=“Hello!”;或char *message; message=“Hello!”;chartext80;則不可寫成:text=“Hello!”;因為,此處 text 是數(shù)組名,而不是指針,只能按字符數(shù)組初始化操作。即:chartext80=“Hello!”;當(dāng)字符串常量作為參數(shù)(實參)傳遞給函數(shù)時,實際傳遞的是指向該字符串的指針,并未進(jìn)行字符串拷貝。例如:例 5.6:向字符指針賦字符串void main()執(zhí)
60、行結(jié)果:chars=“Hello!”;/*s char *p;while(*s!=0) printf(“%c”,*s+);printf(“n”);p=“Good-bye!”;/*while(*p!=o)printf(“%c”,*p+); printf(“n”)Hello! Good-bye!此例中字符串是逐個字符輸出,也可以字符指針為參量,作字符輸出,例如:printf(“%s”,s);或printf(“%s”,p);scanf()5.7strcomp()。strcomp(char *s,char *t)for(;*s=*t;s+,t+) if(*s=o)return(0);return(*s
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國六孔按鈕盒市場調(diào)查研究報告
- 2025年中國停車警示牌市場調(diào)查研究報告
- 2025年中國人力資源模擬系統(tǒng)軟件市場調(diào)查研究報告
- 2025年中國中型防爆接線盒市場調(diào)查研究報告
- 2025年中國三相混合式步進(jìn)電機(jī)驅(qū)動器市場調(diào)查研究報告
- 2025年中國PO再生料市場調(diào)查研究報告
- 2025年中國4,4-二羥基二苯甲酮市場調(diào)查研究報告
- 量子世界真實解讀試題及答案
- 2025年多功能長壽無滴棚膜項目發(fā)展計劃
- 2025采購管理軟件系統(tǒng)的購銷合同模板
- 護(hù)理臨床思維訓(xùn)練手冊
- 古詩詞誦讀《客至》說課稿 2023-2024學(xué)年統(tǒng)編版高中語文選擇性必修下冊
- 2024年廣西區(qū)公務(wù)員錄用考試《行測》真題及答案解析
- 電力系統(tǒng)運行控制規(guī)范
- 【工程法規(guī)】王欣 教材精講班課件 38-第6章-6.3-施工單位安全生產(chǎn)責(zé)任制度
- 廣播制作短視頻化
- 《臨床檢驗儀器與技術(shù)》考試復(fù)習(xí)題庫(含答案)
- 2024年重慶高考化學(xué)試題卷(含答案解析)
- 急救護(hù)理學(xué)第五章-心搏驟停與心肺腦復(fù)蘇
- 高校軍事理論教育課教案
- 敦煌的藝術(shù)智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)
評論
0/150
提交評論