計算機(jī)理論與實(shí)務(wù)之程序設(shè)計-3_第1頁
計算機(jī)理論與實(shí)務(wù)之程序設(shè)計-3_第2頁
計算機(jī)理論與實(shí)務(wù)之程序設(shè)計-3_第3頁
計算機(jī)理論與實(shí)務(wù)之程序設(shè)計-3_第4頁
計算機(jī)理論與實(shí)務(wù)之程序設(shè)計-3_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、程序設(shè)計程序設(shè)計http:/ ,是一種自定義數(shù)據(jù)類型是一種自定義數(shù)據(jù)類型數(shù)組數(shù)組: :是數(shù)目是數(shù)目固定固定,類型,類型相同相同的若干個變量的的若干個變量的有序有序集合集合, ,用數(shù)組名標(biāo)識。用數(shù)組名標(biāo)識。 序序: :是數(shù)組元素之間的位置關(guān)系,不是元素值的大是數(shù)組元素之間的位置關(guān)系,不是元素值的大小順序。小順序。元素元素: :屬同一數(shù)據(jù)類型屬同一數(shù)據(jù)類型, ,用數(shù)組名和下標(biāo)確定用數(shù)組名和下標(biāo)確定 數(shù)組名數(shù)組名: :是用于區(qū)別其它數(shù)組及變量的是用于區(qū)別其它數(shù)組及變量的 下標(biāo)下標(biāo): :是數(shù)組元素在數(shù)組中的位置是數(shù)組元素在數(shù)組中的位置考點(diǎn)七考點(diǎn)七 數(shù)組數(shù)組一維數(shù)組的定義v定義方式: 數(shù)據(jù)類型數(shù)據(jù)類型

2、數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式 ; 合法標(biāo)識符表示元素個數(shù)下標(biāo)從0開始 :數(shù)組運(yùn)算符單目運(yùn)算符優(yōu)先級(1)左結(jié)合不能用( )例 int a6;a00145a1a2a3a4a523a編譯時分配連續(xù)內(nèi)存內(nèi)存字節(jié)數(shù)=數(shù)組維數(shù)* sizeof(元素數(shù)據(jù)類型)數(shù)組名表示內(nèi)存首地址,是地址常量7.1 7.1 一維數(shù)組一維數(shù)組一維數(shù)組的引用(所謂引用,就是訪問(存、?。?shù)組元素)所謂引用,就是訪問(存、?。?shù)組元素) v數(shù)組必須先定義,后使用v只能逐個引用數(shù)組元素,不能一次引用整個數(shù)組v數(shù)組元素表示形式: 數(shù)組名下標(biāo)其中:下標(biāo)可以是常量或整型表達(dá)式例 int i=15; int datai; (不能用變

3、量定義數(shù)組維數(shù))例 int a10; printf(“%d”,a); ()必須 for(j=0;j10;j+) printf(“%dt”,aj); ()例 int data5; data0=1; data5=10; /C語言對數(shù)組不作越界檢查,使用時要 注意一維數(shù)組的初始化v初始化方式 在定義數(shù)組時,為數(shù)組元素賦初值(在編譯階段使之得到初值) int a5=1,2,3,4,5;等價于:a0=1; a1=2; a2=3; a3=4; a4=5;v說明:l數(shù)組不初始化,其元素值為隨機(jī)數(shù)l當(dāng)全部數(shù)組元素賦初值時,可不指定數(shù)組長度如 int a5=6,2,3; 等價于: a0=6; a1=2;a2=3

4、; a3=0; a4=0;如 int a3=6,2,3,5,1; ()l只給部分?jǐn)?shù)組元素賦初值 int a=1,2,3,4,5,6;編譯系統(tǒng)根據(jù)初值個數(shù)確定數(shù)組維數(shù)程序舉例例 讀10個整數(shù)存入數(shù)組,找出其中最大值和最小值步驟:1. 輸入:for循環(huán)輸入10個整數(shù)2. 處理:(a) 先令max=min=x0(b) 依次用xi和max,min比較(循環(huán)) 若maxxi,令min=xi3. 輸出:max和min #include #define SIZE 10main() int xSIZE,i,max,min; printf(Enter 10 integers:n); for(i=0;iSIZE;

5、i+) printf(%d:,i+1);scanf(%d,&xi); max=min=x0; for(i=1;iSIZE;i+) if(maxxi) min=xi; printf(Maximum value is %dn,max); printf(Minimum value is %dn,min);例 輸入10個數(shù),輸出平均值與所有大于平均值的數(shù)組元素值 #include void main() float a10,ave=0; int i; for(i=0;i10;i+) scanf(“%f”,a+i); / 輸入輸入10個數(shù)個數(shù) for(i=0;i10;i+) ave+=ai; /

6、 計算計算10個數(shù)的和個數(shù)的和 for(ave/=10,i=0;iave) printf(%ft, ai); printf(n); 例 用數(shù)組求Fibonacci數(shù)列前20個數(shù))3()2(12) 1(1121=+=-nFFFnFnFnnnf0f1f2f3f4f5f19.11f1901452319235#include main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;ia1,則交換;然 后比較第二個數(shù)與第三個數(shù);依次類推,直至第n-1個數(shù)和第 n個數(shù)比較為止第一趟冒泡排序,結(jié)果最大的數(shù)被安置在 最后一個元素位置上(

7、2)對前n-1個數(shù)進(jìn)行第二趟冒泡排序,結(jié)果使次大的數(shù)被安置在 第n-1個元素位置(3)重復(fù)上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束例38 49 65 76 13 27 30 97第一趟38 49 65 13 27 30 76第二趟38 49 13 27 30 65第三趟38 13 27 30 49第四趟13 27 30 38第五趟13 27 30第六趟49 38 65 97 76 13 27 30初始關(guān)鍵字n=83849769713972797309713767676273013652765306513134949304927382738303813 27第七趟輸入n 個數(shù)給a1 到 an

8、for j=1 to n-1for i=1 to n-jaiai+1真假aiai+1輸出a1 到 an#include main() int a11,i,j,t; printf(Input 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n); for(j=1;j=9;j+) for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(The sorted numbers:n); for(i=1;i11;i+)printf(%d ,ai);7.2 7.2 二維數(shù)組及多維數(shù)組二維數(shù)組及多維數(shù)組二維數(shù)組

9、的定義v定義方式:數(shù)據(jù)類型數(shù)組名常量表達(dá)式常量表達(dá)式;v數(shù)組元素的存放順序l原因:內(nèi)存是一維的l二維數(shù)組:按行序優(yōu)先l多維數(shù)組:最右下標(biāo)變化最快例 int a34; float b25; int c234; int a3,4; ()行數(shù)列數(shù)元素個數(shù)=行數(shù)*列數(shù)int c23401234567.20212223c000c001c002c003c010c011c012c013c020c021c022c023c100c101c102c103c110c111c112c113c120c121c122c123int a32a01a10a11a20a21014523a00a00 a01a10 a11a20

10、a21例 int a34;20161720181920202120222320089201011201213201415200012002320045200067a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23a0a1a2v二維數(shù)組理解每個元素ai由包含4個元素的一維數(shù)組組成二維數(shù)組a是由3個元素組成行名014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2二維數(shù)組元素的引用形式: 數(shù)組名數(shù)組名下標(biāo)表達(dá)式下標(biāo)表達(dá)式下標(biāo)表達(dá)式下標(biāo)表達(dá)式二維數(shù)組元素的初始化 數(shù)組名數(shù)組名= 表達(dá)式組表達(dá)式組1,表達(dá)

11、式組表達(dá)式組2,. 其中每一個表達(dá)式組形如:其中每一個表達(dá)式組形如:表達(dá)式列表表達(dá)式列表 若聲明語句為若聲明語句為int a33=1,2,3,5,6;int a33=1,2,3,5,6; 則數(shù)組則數(shù)組a a第第1 1行各元素行各元素a00a00、a01a01、a02a02依次賦值依次賦值1 1、2 2、3 3;第;第2 2行各元素行各元素a10a10、a11a11、a12a12依次賦值依次賦值5 5、6 6、0 0;而第;而第3 3行各元素初值均為行各元素初值均為0 0。 說明:說明: 表達(dá)式組表達(dá)式組1 1內(nèi)的表達(dá)式為二維數(shù)組第內(nèi)的表達(dá)式為二維數(shù)組第1 1行賦初行賦初值,表達(dá)式組值,表達(dá)式組

12、2 2內(nèi)的表達(dá)式為二維數(shù)組第內(nèi)的表達(dá)式為二維數(shù)組第2 2行賦行賦初值,初值,.。 每對花括號中的表達(dá)式個數(shù)不得超過列下每對花括號中的表達(dá)式個數(shù)不得超過列下標(biāo)界,若表達(dá)式個數(shù)少于二維數(shù)組的列數(shù),則標(biāo)界,若表達(dá)式個數(shù)少于二維數(shù)組的列數(shù),則未賦初值的數(shù)值類型數(shù)組元素為未賦初值的數(shù)值類型數(shù)組元素為0 0、未賦初值的、未賦初值的字符類型數(shù)組元素為字符字符類型數(shù)組元素為字符0 0。 僅當(dāng)對二維數(shù)組賦初值時,可以缺省數(shù)組僅當(dāng)對二維數(shù)組賦初值時,可以缺省數(shù)組說明符中的行下標(biāo)界,此時數(shù)組行數(shù)由表達(dá)式說明符中的行下標(biāo)界,此時數(shù)組行數(shù)由表達(dá)式組的個數(shù)決定。組的個數(shù)決定。 例 int a23=1,2,3,4,5,6;

13、a00 a01 a02 a10 a11 a12123456全部初始化l按元素排列順序初始化 例 int a23=1,2,4;a00 a01 a02 a10 a11 a12120400部分初始化 例 int a3=1,4,5;a00 a01 a02 a10 a11 a12100450第一維長度省略初始化 例 int a23=1,2,3,4,5,6;a00 a01 a02 a10 a11 a12123456全部初始化 例 int a23=1,2,4;a00 a01 a02 a10 a11 a12124000部分初始化 例 int a3=1,2,3,4,5;a00 a01 a02 a10 a11 a

14、12123450第一維長度省略初始化 分行初始化分行初始化程序舉例例 將二維數(shù)組行列元素互換,存到另一個數(shù)組中a=1 2 34 5 6b=1 42 53 6#include main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij;printf(n); printf(array b:n); for(i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); 類型定義為類

15、型定義為charchar的數(shù)組是字符數(shù)組。字的數(shù)組是字符數(shù)組。字符串也是字符數(shù)組,但它是一種特殊的字符串也是字符數(shù)組,但它是一種特殊的字符數(shù)組,因?yàn)樽址写嬖谝粋€值為符數(shù)組,因?yàn)樽址写嬖谝粋€值為00的數(shù)組元素,的數(shù)組元素,C C語言中,許多用于字符串語言中,許多用于字符串處理的庫函數(shù),都是以字符處理的庫函數(shù),都是以字符00作為字符作為字符串的結(jié)束標(biāo)志。串的結(jié)束標(biāo)志。7.3 7.3 字符數(shù)組和字符串字符數(shù)組和字符串字符數(shù)組字符數(shù)組(數(shù)組元素的值為字符數(shù)組元素的值為字符) 例 char ch5=B,o,y;ch0Boy00逐個字符賦值ch1ch2ch3ch4 例 char ch5=H,e,l

16、,l,o;ch0Hello逐個字符賦值ch1ch2ch3ch4v字符數(shù)組的初始化l逐個字符賦值l用字符串常量v字符數(shù)組的引用 0表示空字符例 char c10, ch34;v定義 所謂引用,就是訪問(存所謂引用,就是訪問(存、?。?shù)組的元素。、?。?shù)組的元素。 例 char diamond5=., .,*,.,*,.,*, *, ., ., . ,*,.,*, .,*,., .,*;二維字符數(shù)組初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4 例 char fruit7=“Apple”,”O(jiān)range”, ”Gra

17、pe”,”Pear”,”Peach”;二維字符數(shù)組初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00例 輸出一個字符串#include main() char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n);Iamaboy0123456789輸出結(jié)果:I am a boy字符串v字符串及其結(jié)束標(biāo)志l無字符串變量,用字符數(shù)組處理字符串l字符串結(jié)束標(biāo)志:0例 “hello”共5個字符,在內(nèi)存占6個字節(jié) 字符串長度5

18、h e l l o 0104 101 108 108 111 0內(nèi)存存放字符ASCII碼v字符串的輸入輸出l逐個字符輸入/輸出: %cl整個字符串輸入/輸出: %s例 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str);用字符數(shù)組名,不要加&輸入串長度數(shù)組維數(shù)遇空格或回車結(jié)束自動加0用字符數(shù)組名,遇0結(jié)束例 用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, &stri); for(i=0;i5;i+) printf(“%c”, stri); i=0;Wh

19、ile(stri=getchar( )!=n ) i+; stri = 0;例 main( ) char a5=H,e,l,l,o; printf(“%s”,a); 例 main( ) char a =“Hello”; printf(“%s”,a); 結(jié)果:Hello#-=* h e l l o02314結(jié)果:Hello注:用“%s”輸出時,遇0結(jié)束main() char a=h,e,l,0,l,o,0; printf(%s,a);例輸出:hel h e l 0 l o 0注:數(shù)組中有多個0時,遇第一個結(jié)束main() int i; char a5; scanf(%s,a); for(i=0;

20、i5;i+) printf(%d,ai);運(yùn)行情況:(1)若輸入 hel , 正常(2)若輸入 hell , 正常(3)若輸入 hello , 用%s 輸入時,會出現(xiàn)問題 h e l 0 h e l l 0 h e l l o注:輸入字符串長度數(shù)組維數(shù)例例 字符串輸入舉例 H o w 0 a r e 0 y o u ? 0 #include main() char a15,b5,c5; scanf(%s%s%s,a,b,c); printf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);運(yùn)行情況:輸入:How are you?輸出:a

21、=How b=are c=you?輸入:How are you?輸出:a=How注:scanf中%s輸入時,遇空格或回車結(jié)束v常用的字符串處理函數(shù)包含在頭文件 string.hu字符串輸出函數(shù)puts格式:puts(字符數(shù)組)功能:向顯示器輸出字符串(輸出完,換行)說明:字符數(shù)組必須以0結(jié)束u字符串輸入函數(shù)gets格式:gets(字符數(shù)組)功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符數(shù)組中, 并自動加0說明:輸入串長度應(yīng)小于字符數(shù)組維數(shù)例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(

22、string); 輸入: How are you?輸出: How are you ? u字符串連接函數(shù)strcat格式:strcat(字符數(shù)組1,字符數(shù)組2)功能:把字符數(shù)組2連到字符數(shù)組1后面返值:返回字符數(shù)組1的首地址說明:字符數(shù)組1必須足夠大 連接前,兩串均以0結(jié)束;連接后,串1的0取消, 新串最后加0u字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組1,字符串2)功能:將字符串2,拷貝到字符數(shù)組1中去返值:返回字符數(shù)組1的首地址說明:字符數(shù)組1必須足夠大 拷貝時0一同拷貝 不能使用賦值語句為一個字符數(shù)組賦值例 char str120,str220; str1=“Hello!”;

23、() str2=str1; ()例 strcpy與strcat舉例#include #include void main() char destination25; char blank = , c= C+, turbo = Turbo; strcpy(destination, turbo); strcat(destination, blank); strcat(destination, c); printf(%sn, destination);Turbo C+TrboC+0123456789u024.Trbo0123456789u024.Trbo00123456789u24.u字符串比較函數(shù)

24、strcmp格式:strcmp(字符串1,字符串2)功能:比較兩個字符串的大小比較規(guī)則:對兩串從左向右逐個字符比較(ASCII碼), 直到遇到不同字符或0為止返值:返回int型整數(shù),a. 若字符串1 字符串2, 返回正整數(shù) c. 若字符串1= 字符串2, 返回零說明:字符串比較不能用“=”,必須用strcmp 串的比較函數(shù)是比較串中相對應(yīng)字符的大小,不是比較串的比較函數(shù)是比較串中相對應(yīng)字符的大小,不是比較首元素的地址!首元素的地址! 但如果將字串放到字符數(shù)組中后,用數(shù)組名比較串時,但如果將字串放到字符數(shù)組中后,用數(shù)組名比較串時,則就是比較串的首元素地址!則就是比較串的首元素地址!u字符串長度函

25、數(shù)strlen格式:strlen(字符數(shù)組)功能:計算字符串長度返值:返回字符串實(shí)際長度,不包括0在內(nèi)例 對于以下字符串,strlen(s)的值為:(1)char s10=A,0,B,C,0,D;(2)char s =“tv0willn”;(3)char s =“x69082n”; 答案:1 3 1#include #include main() char str1 = ”Hello!, str2 = ”How are you?”,str20; int len1,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, s

26、tr2)0) strcpy(str,str1); strcat(str,str2); else if (strcmp(str1, str2)0) strcpy(str,str2); strcat(str,str1); else strcpy(str,str1); len3=strlen(str); puts(str); printf(”Len1=%d,Len2=%d,Len3=%dn”,len1,len2,len3);例 strcmp與strlen舉例How are you?Hello!Len1=6,Len2=12,Len3=18應(yīng)用舉例例 輸入一行字符,統(tǒng)計其中有多少個單詞輸入一字符串給 s

27、tring i=0 num=0 word=0當(dāng)(c=stringi)!=0)c=空格真真假假word=0word=1num=num+1i=i+1輸出:numword=0#include main() char string81; int i,num=0,word=0; char c; gets(string); for(i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; printf(There are %d words in the linen,num);當(dāng)前字符=空格是否未出現(xiàn)新單詞,使word=0,nu

28、m不累加前一字符為空格(word=0),新單詞出現(xiàn),word=1,num加1前一字符為非空格(word=1),未出現(xiàn)新單詞,num不變否0是11是1未01否0是12否1未12是1未02否0是13是1未03否0是14否1未14否1未14否1未14例 輸入:I am a boy. 當(dāng)前字符是否空格word原值新單詞開始否word新值num值Iamaboy.H o w 0H e l l o 0H i g h 0str0str1str2例 有三個字符串,找出其中最大者#include #include main() char string20,str320; int i; for(i=0;i0)str

29、cpy(string,str0); else strcpy(string,str1); if(strcmp(str2,string)0)strcpy(string,str2); printf(nThe largest string is:n%sn,string);例例 有十個學(xué)生的成績,求平均分有十個學(xué)生的成績,求平均分92 85 68 75 54 88 98 45 61 7992856854889845756179a0a1a2a3a4a5a6a7a8a9a#include main() int k , a10; for(k=0;k10;k+) scanf(“%d”,&ak); for

30、(k=0;ky?x:y; return(z); 例 有參函數(shù) int max(int x, y) int z; z=xy?x:y; return(z); 例 無參函數(shù) printstar( ) printf(“*n”); 或void printstar( ) printf(“*n”); 例 空函數(shù) dummy( ) 函數(shù)體為空8.3 函數(shù)的返回值返回語句v形式: return(表達(dá)式); 或 return 表達(dá)式; 或 return;v功能:使程序控制從被調(diào)用函數(shù)返回到調(diào)用函數(shù)中,同時把返值帶給調(diào)用函數(shù)。v說明:l函數(shù)中可有多個函數(shù)中可有多個return語句;語句;l若無若無return語句,

31、遇語句,遇時,自動返回調(diào)用函數(shù);時,自動返回調(diào)用函數(shù);l若函數(shù)類型與若函數(shù)類型與return語句中表達(dá)式值的類型不一致,按前語句中表達(dá)式值的類型不一致,按前者為準(zhǔn),自動轉(zhuǎn)換者為準(zhǔn),自動轉(zhuǎn)換-函數(shù)調(diào)用轉(zhuǎn)換;函數(shù)調(diào)用轉(zhuǎn)換;lvoid型函數(shù)型函數(shù)(“無類型無類型”函數(shù)函數(shù)),明確函數(shù)不帶回值。,明確函數(shù)不帶回值。例 無返回值函數(shù) void swap(int x,int y ) int temp; temp=x; x=y; y=temp; printstar() printf(*);main() int a; a=printstar(); printf(%d,a);例例 函數(shù)帶回不確定值函數(shù)帶回不確定

32、值輸出:10void printstar() printf(*);main() int a; a=printstar(); printf(%d,a);編譯錯誤! 這樣這樣void使使系統(tǒng)保證不使函數(shù)帶回任何值,即禁止在調(diào)系統(tǒng)保證不使函數(shù)帶回任何值,即禁止在調(diào)用函數(shù)中使用被調(diào)用函數(shù)的返回值。用函數(shù)中使用被調(diào)用函數(shù)的返回值。例例 函數(shù)返回值類型轉(zhuǎn)換函數(shù)返回值類型轉(zhuǎn)換main() float a,b; int c; scanf(%f,%f,&a,&b); c=max(a,b); printf(Max is %dn,c);max(float x, float y) float z; z

33、=xy?x:y; return(z);調(diào)用形式調(diào)用形式 函數(shù)名函數(shù)名(實(shí)參表實(shí)參表);說明:說明:l實(shí)參與形參實(shí)參與形參個數(shù)相等個數(shù)相等,類型一致類型一致,按順序一一對應(yīng)按順序一一對應(yīng)l實(shí)參表求值順序,因系統(tǒng)而定(實(shí)參表求值順序,因系統(tǒng)而定(Turbo C 自右向左自右向左)8.4 函數(shù)的調(diào)用函數(shù)的調(diào)用main() int i=2,p; p=f(i,+i); printf(%d,p);int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c);例例 參數(shù)求值順序參數(shù)求值順序main() int i=

34、2,p; p=f(i, i+); printf(%d,p);int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c);運(yùn)行結(jié)果:0運(yùn)行結(jié)果:1v函數(shù)語句(調(diào)用函數(shù)使其單獨(dú)成句)例 printstar();v函數(shù)表達(dá)式(調(diào)用函數(shù)使其成為表達(dá)式的一部分) 例 m=max(a,b)*2;v函數(shù)參數(shù)(調(diào)用函數(shù)使其成為另一個函數(shù)的實(shí)參) 例 m=max(a,max(b,c); printf(“%d”,max(a,b);調(diào)用方式調(diào)用方式(有如下三種有如下三種)v對被調(diào)用函數(shù)要求:對被調(diào)用函數(shù)要求:l必須是必須

35、是已存在已存在的函數(shù)的函數(shù)l庫函數(shù)庫函數(shù): #include l用戶自定義函數(shù)用戶自定義函數(shù): 函數(shù)類型聲明函數(shù)類型聲明v函數(shù)聲明一般形式:函數(shù)聲明一般形式:函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名( (形參類型形參類型 形參名形參名,.);.); 或或 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名( );函數(shù)聲明函數(shù)聲明函數(shù)聲明函數(shù)聲明 (為被調(diào)函數(shù)能正確使用而做的準(zhǔn)備為被調(diào)函數(shù)能正確使用而做的準(zhǔn)備)函數(shù)聲明的函數(shù)聲明的作用:作用: 告訴編譯系統(tǒng)告訴編譯系統(tǒng)函數(shù)類型、參數(shù)函數(shù)類型、參數(shù)個數(shù)及類型,以便檢驗(yàn)。個數(shù)及類型,以便檢驗(yàn)。函數(shù)定義與函數(shù)聲明不同函數(shù)定義與函數(shù)聲明不同: 函數(shù)聲明位置:函數(shù)聲明位置:程序的數(shù)據(jù)聲

36、程序的數(shù)據(jù)聲明部分(函數(shù)內(nèi)或外)明部分(函數(shù)內(nèi)或外)下列情況下,可不作函數(shù)聲明下列情況下,可不作函數(shù)聲明: 若函數(shù)返值是若函數(shù)返值是char或或int型型,系統(tǒng)自,系統(tǒng)自動按動按int型處理。型處理。 被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之被調(diào)用函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前。前。有些系統(tǒng)有些系統(tǒng)(如如Borland C+)要求函數(shù)聲要求函數(shù)聲明指出函數(shù)返值類型和形參類型,并明指出函數(shù)返值類型和形參類型,并且對且對void 和和 int 型函數(shù)也要進(jìn)行函數(shù)型函數(shù)也要進(jìn)行函數(shù)聲明。聲明。例例 函數(shù)說明舉例函數(shù)說明舉例main() float a,b; int c; scanf(%f,%f,&a,&a

37、mp;b); c=max(a,b); printf(Max is %dn,c);max(float x, float y) float z; z=xy?x:y; return(z);int型函數(shù)可不作函數(shù)說明(在C-free中不行)/*ch7_5.c*/float add(float x, float y) float z; z=x+y; return(z);main() float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %f,c);被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前,不必函數(shù)說明main() float add(fl

38、oat,float); /*function declaration*/ float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %f,c);float add(float x, float y) float z; z=x+y; return(z);float add(); 形參與實(shí)參v形式參數(shù):定義函數(shù)時函數(shù)名后面括定義函數(shù)時函數(shù)名后面括號中的變量名號中的變量名v實(shí)際參數(shù):調(diào)用函數(shù)時函數(shù)名后面括調(diào)用函數(shù)時函數(shù)名后面括號中的表達(dá)式號中的表達(dá)式8.5 8.5 函數(shù)參數(shù)及其傳遞方式函數(shù)參數(shù)及其傳遞方式l實(shí)參必須有確定的值

39、l形參必須指定類型l形參與實(shí)參按順序類型一致,個數(shù)相同l若形參與實(shí)參類型不一致,自動按形參類型轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換l形參在函數(shù)被調(diào)用前不占內(nèi)存;函數(shù)調(diào)用時為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放說明:說明: c=max(a,b);(main 函數(shù))(max 函數(shù))max(int x, int y) int z; z=xy?x:y; return(z); 例例:比較兩個數(shù)并輸出大者比較兩個數(shù)并輸出大者main() int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b); printf(Max is %d,c);max(int x, int y) int z; z

40、=xy?x:y; return(z);形參實(shí)參例例 計算計算x的立方的立方#include float cube(float x) return(x*x*x);main() float a, product; printf(Please input value of a:); scanf(%f,&a); product=cube(a); printf(”Cube of %.4f is %.4fn,a,product);xaproduct28值傳遞值傳遞方式方式l方式:函數(shù)調(diào)用時方式:函數(shù)調(diào)用時,為形參分配單元為形參分配單元,并將實(shí)并將實(shí)參的值參的值復(fù)制復(fù)制到形參中;調(diào)

41、用結(jié)束,形參單到形參中;調(diào)用結(jié)束,形參單元被釋放,實(shí)參單元仍保留并維持原值元被釋放,實(shí)參單元仍保留并維持原值l特點(diǎn):特點(diǎn):u形參與實(shí)參占用形參與實(shí)參占用不同不同的內(nèi)存單元的內(nèi)存單元u單向單向傳遞傳遞參數(shù)傳遞方式參數(shù)傳遞方式711x:y:調(diào)用前:調(diào)用結(jié)束:711x:y:例例 交換兩個數(shù)交換兩個數(shù)/*ch7_2.c*/#include main() int x=7,y=11; printf(x=%d,ty=%dn,x,y); printf(swapped:n); swap(x,y); printf(x=%d,ty=%dn,x,y);swap(int a,int b) int temp; temp=

42、a; a=b; b=temp;調(diào)用:711a:b:711x:y:swap:711x:y:117a:b:temp方式: 函數(shù)調(diào)用時,將實(shí)參(數(shù)據(jù))的存儲地址作為參數(shù)傳遞給形參特點(diǎn):u形參與實(shí)參占用同樣的存儲單元u實(shí)參和形參必須是地址常量或變量地址傳遞地址傳遞#include long sum(int a, int b); long factorial(int n);main() int n1,n2; long a; scanf(%d,%d,&n1,&n2); a=sum(n1,n2); printf(a=%1d,a); long sum(int a,int b) long c1,

43、c2; c1=factorial(a); c2=factorial(b); return(c1+c2); long factorial(int n) long rtn=1; int i; for(i=1;i=n;i+) rtn*=i; return(rtn); long sum(int a, int b);long factorial(int n);文件包含編譯預(yù)處理命令函數(shù)類型聲明函數(shù)定義函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)返回值形參實(shí)參函數(shù)聲明的位置函數(shù)聲明的位置:在調(diào)用函數(shù)在調(diào)用函數(shù)之前之前(在主調(diào)函數(shù)的變量定義在主調(diào)函數(shù)的變量定義部分部分;在所有函數(shù)之外在所有函數(shù)之外)。嵌套調(diào)用C規(guī)定:函數(shù)定義不可嵌

44、套,但可以嵌套調(diào)用函數(shù)main( )調(diào)用函數(shù)a結(jié)束a函數(shù)b函數(shù)調(diào)用函數(shù)b8.6 8.6 函數(shù)的嵌套與遞歸調(diào)用函數(shù)的嵌套與遞歸調(diào)用例例 求三個數(shù)中最大數(shù)和最小數(shù)的差值求三個數(shù)中最大數(shù)和最小數(shù)的差值#include int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z);void main() int a,b,c,d; scanf(%d%d%d,&a,&b,&c); d=dif(a,b,c); printf(Max-Min=%dn,d); int dif(int x

45、,int y,int z) return max(x,y,z)-min(x,y,z); int max(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); int min(int x,int y,int z) int r; r=xy?x:y; return(r1f(n)=回推下推遞推回代如圖看出:求如圖看出:求n!的遞歸算法分兩步:的遞歸算法分兩步: 一是回推一是回推,即將,即將f(n)=n!表示成表示成f(n)=n*f(n-1)的形式,而的形式,而f(n-1)仍不知仍不知,還要回推到,還要回推到f(n-1)= (n-1)* f(n-2),。

46、直到。直到f(1)。 二是遞推二是遞推,是從,是從f(1)推出推出f(2)=2*f(1),。一直推到。一直推到f(n)=n*f(n-1)而求而求出出f(n)的值。的值。#include int fac(int n) int f; if(n0) printf(nbi, ai=bi,aibi, ai=bi,aibiaik,nk,認(rèn)為數(shù)組認(rèn)為數(shù)組abab 若若nk,nk,認(rèn)為數(shù)組認(rèn)為數(shù)組abab 若若n=k,n=k,認(rèn)為數(shù)組認(rèn)為數(shù)組a=ba=b#include main() int a10,b10,i,n=0,m=0,k=0; printf(Enter array a:n); for(i=0;i10

47、;i+)scanf(%d,&ai); printf(Enter array b:n); for(i=0;i10;i+)scanf(%d,&bi); for(i=0;iy) flag=1; else if(xy) flag=-1; else flag=0; return(flag);main() int a10,b10;large(ai,bi; int large(int x,int y) int flag; 在主調(diào)函數(shù)中在主調(diào)函數(shù)中定義數(shù)組;定義數(shù)組;在在被調(diào)函數(shù)中定義被調(diào)函數(shù)中定義形式,且參數(shù)變形式,且參數(shù)變量與主調(diào)函數(shù)的量與主調(diào)函數(shù)的數(shù)組元素類型相數(shù)組元素類型相同;同;函數(shù)

48、調(diào)用函數(shù)調(diào)用語句中的實(shí)參用語句中的實(shí)參用數(shù)組元素數(shù)組元素小結(jié)小結(jié)v地址傳遞地址傳遞v在主調(diào)函數(shù)與被調(diào)函數(shù)中分別定義數(shù)組在主調(diào)函數(shù)與被調(diào)函數(shù)中分別定義數(shù)組,且類且類型應(yīng)一致型應(yīng)一致v形參數(shù)組大小形參數(shù)組大小(多維數(shù)組第一維多維數(shù)組第一維)可不指定可不指定v形參數(shù)組名是形參數(shù)組名是地址變量地址變量數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù)int ma(int x)int a20;mb(a);int mb(int ac )形式參數(shù)是數(shù)組,形式參數(shù)是數(shù)組,可不寫元素個數(shù)可不寫元素個數(shù)在主調(diào)函數(shù)和被調(diào)函在主調(diào)函數(shù)和被調(diào)函數(shù)中要分別定義數(shù)組數(shù)中要分別定義數(shù)組函數(shù)調(diào)用時實(shí)參要函數(shù)調(diào)用時實(shí)參要用數(shù)組名用數(shù)組名例例 求學(xué)

49、生的平均成績求學(xué)生的平均成績 #include float average(int stu10, int n); void main() int score10, i; float av; printf(Input 10 scores:n); for( i=0; i10; i+ ) scanf(%d, &scorei); av=average(score,10); printf(Average is:%.2f, av); float average(int stu10, int n) int i; float av,total=0; for( i=0; in; i+ ) total +

50、= stui; av = total/n; return av; 實(shí)參用數(shù)組名形參用數(shù)組定義, int stu .2109score562312.88stu例:數(shù)組元素與例:數(shù)組元素與 數(shù)組名數(shù)組名 作函數(shù)參數(shù)的比較作函數(shù)參數(shù)的比較12a調(diào)用前a0a112a調(diào)用a0a112xy21xy交換12a返回#include void swap2(int x,int y) int z; z=x; x=y; y=z;main() int a2=1,2; swap2(a0,a1); /元素作為參數(shù) printf(a0=%dna1=%dn,a0,a1);值傳遞12a調(diào)用前12ax調(diào)用21ax交換21a返回#include void swap2(int x) int z; z=x0; x0=x1; x1=z;main() int a2=1,2; swap2(a); /數(shù)組名作為參數(shù) printf(a0=%dna1=%dn,a0,a1);地址傳遞例:數(shù)組元素與例:數(shù)組元素與 數(shù)組名數(shù)組名 作函數(shù)參數(shù)的比較作函數(shù)參數(shù)的比較 假設(shè)待排序的假設(shè)待排序的n個結(jié)點(diǎn)的序列為個結(jié)點(diǎn)的序列為a0,a1 , an1 ,我們,我們依次對依次對i=0,1,n-2執(zhí)行選擇步驟:執(zhí)行選擇步驟: 在在ai ,a

溫馨提示

  • 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

提交評論