




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
函數(shù)調(diào)用中的參數(shù)傳變量的作用域 類1函數(shù)C程序執(zhí)行是從main函數(shù)(主函數(shù))開所有的函數(shù)獨立定義,main()函數(shù)可以調(diào)用,但任何函數(shù)都不能調(diào)用main2函數(shù)的庫函數(shù):由系統(tǒng)提供,供用自定義函數(shù):由程序員自己定義,解決特定的有參函數(shù):函數(shù)帶有參數(shù)(自變量無參函數(shù):函數(shù)無getchar(、有返回值函數(shù):函數(shù)被調(diào)用后返回一sin(x、無返回值函數(shù):函數(shù)3函數(shù)的定義與兩個兩個形式參函數(shù)調(diào)函函數(shù)調(diào)函數(shù)定 x2y2函數(shù)兩個實函數(shù)兩個實際參
3242=一、函數(shù)定義與調(diào)用的一般[函數(shù)類型名]函數(shù)名([形參及形 表]{內(nèi)部變量定義和 }函數(shù)名實參表5(一)無參無返回值函數(shù)的定義與函數(shù)類型 (“空類型 表示無返回值
函數(shù)
voidpstar(數(shù) 函數(shù) 體voidmain({intfor}
6(二)有參無返回值函數(shù)的定義與形參#include
定義為intvoidpstar(intn {int
體內(nèi)變量定義,形參 for(i=1;i<=n;i++) 義}voidmain({intfor(i=1;i<=10;i++)
實參 若實參改為i,程序輸出是什么7(三)有返回值函數(shù)的定義與int型函數(shù)(int可缺省),表示函數(shù)返回值為
例有有返 maxmax(intx,inty函 return}}
不能寫為int/*/*returnx>y?x:y;return后可以是一個表voidmain({int
max函數(shù)帶回返回值并賦給printf("maxis%d\n",c}8有返回值函數(shù)的定義與#include函intmaxintxinty數(shù)義定return義}voidmain({inta,b;printf("maxis%d\n",max(a,b)}將max函數(shù)的返回 作為printf函數(shù)的參數(shù)9maxmax(intx,inty{if(x>yreturnxreturny}二、函數(shù)的返回值函數(shù)返回值通過return語句獲return表達return一個函數(shù)可以有多個return函數(shù)的返函數(shù)返回值的類型:取決于函數(shù)的類型intmaxintmax(floatx,floaty{floatz=x>y?x:y;return(z);函數(shù)返回值是float還是int函數(shù)調(diào)用的格式:函數(shù)名([實參表]pstar(2;printf("o!");如如,printf("maxisd\n",max(a,b舉例判斷素數(shù)函數(shù)1(無返回值函數(shù)#include<stdio.h>#includevoidprime(intm{intk=for(j=2;j<=k;j++if(m%j==0)
為了明確表示“不帶值”,用void定義函if(j>k)printf("%disaprimenumber\n",m);elseprintf("%disnotaprimenumber\n",m);}main({intn;scanf("%d",&n)prime(n); }舉例判斷素數(shù)函數(shù)2(有返回值函數(shù)函數(shù)返回值類型為int時函數(shù)返回值類型為int時int可缺intjkfksqrt(m/*f標識是否為素數(shù)for(j=2;j<=k;j++if(m%j==0)if(j>k
f=1else f=0;return(f);}voidmain({intscanf("%d",&n)
/*返回1表示m返回0表示m不是素數(shù) printf("%disaprimenumber\n",elseprintf("%disnotaprimenumber\n",n) 四、函數(shù)調(diào)用的條件1、被調(diào)函數(shù)是庫函數(shù)或已經(jīng)存在的自定2、若被調(diào)函數(shù)是庫函數(shù),需在文件開頭將其頭文件到本文件TC2.0例外:調(diào)用scanf函數(shù)和printf函數(shù)時#include 或者:函數(shù)類型名函數(shù)名(形參類型表);舉例:intmax(intx,intint例外:若被調(diào)函數(shù)定 、調(diào)用在后,則可不加函數(shù)原 函數(shù)原 方1、在主調(diào)函數(shù)內(nèi) 函數(shù)原 舉#includevoidmain({floata,b,cfloatsub(floatx,floaty)scanf("%f,%f",&a,&b
例在執(zhí)行語句之對原型函c=sub(a,bprintf(“subis%f\n",
函數(shù)調(diào)floatsub(floatx,floaty{floatz;z=x-yreturn(z)
函數(shù)定義的格式有什么的格式有什么區(qū)函數(shù)的五、形式參數(shù)與實際參數(shù)號不能省略,如fun()。如函數(shù)原intmax(intx,int函數(shù)調(diào)max3x1+5maxa[ib[i 數(shù)組元素a[i],b[i]C語言實參與形參相互作用的特點:實 形即改變形參的值不會使實參的值發(fā)生“值傳遞”又分為“數(shù)值傳遞”和“地址傳遞”例
函數(shù)調(diào)用中的參數(shù)#includeintmult(intn{return(n);voidmain({int
時,n不 單元 調(diào)用前:n ,result);,number
形參 調(diào)用時#includeintmult(intmult(intn{ return}調(diào)用中:voidmain({intnumber,result;
n所占 單元被 放,實參number調(diào)用后放,實參number
實 數(shù)
簡單
單向數(shù)值舉例寫函數(shù)對兩個數(shù)按降序排列以下程序能實現(xiàn)a和b兩個變量的交換嗎swap(intx,int{intt;}調(diào)swap(intx,int{intt;}9595595959595595959955 #include voidmain({int if(a<b)swap(a,b);}
改變形參變量的值無法現(xiàn)a和b兩個變量的交換指針變量作函數(shù)實 形單向值若指針作為函數(shù)參指針類型
地址
指針類型單向地址舉例寫函數(shù)對兩個數(shù)按降序排列調(diào)swap(int*p1,intint調(diào)swap(int*p1,intint*t/*不能用int}59形參指針
#includevoidmain({intint*pointer1,*pointer2;
tt改
無法實現(xiàn)a和b個變量的交換 舉例寫函數(shù)對兩個數(shù)按降序排列swap(int*p1,intswap(int*p1,intintt/*不能用}#includevoidmain({intint*pointer1,*pointer2;
改
形參單if(a<b)swap(pointer1,pointer2);
指針變量作函數(shù)參數(shù)欲通過函數(shù)調(diào)用得到n被調(diào)函設(shè)置n個指針變量p1,p2,…作為形函數(shù)調(diào)調(diào)函數(shù)以a1,a2,…的地址為實參,于是形參p1,p2,…指向a1,a2,…,被調(diào)函數(shù)改變*p1,*p2,…的值實際上就是改變因此,函數(shù)調(diào)用指針變量作函數(shù)#include<stdio.h>voidfun(int#include<stdio.h>voidfun(int*p,int*q){}{intx=55,y=66;}
數(shù)組作函數(shù)數(shù)組元素作函數(shù)同于簡單變量作函數(shù)參數(shù),數(shù)組名作函數(shù)同于指針變量作函數(shù)參數(shù)一、數(shù)組元素作函數(shù)例7.15:應(yīng)組素個例7.15:應(yīng)組素個較如數(shù)a的素數(shù)中元素大次則大數(shù)反數(shù)于數(shù)組,如果兩組素于方元次相,則兩數(shù)組相等。 ──通過調(diào)用lage函數(shù)實現(xiàn)large(intx,inty{intflagif(x>y)flag=1large(intx,inty{intflagif(x>y)flag=1elseif(x==y)flag=0;elseflag=-1;return(flag)}例例7.15{inta[10],b[10],i,n=0,k=0for(i=0;i<10;i++)scanf("%d",&a[i])for(i=0;i<10;i++)scanf("%d",&b[i])for(i=0;i<10;i++iflarge(a[i],b[i])==1) /*累計a[i]>b[i]的次數(shù)elseiflarge(a[ib[i])==-1k/*累計a[i]<b[i]的次數(shù)if(n>kprintf("arrayaislargerthanarrayb\n")elseif(n<kprintf("arraybislargerthanarraya\n");printf("arrayaisequaltoarrayb\n")}實參數(shù)組首地 地voidfun(intint{……intvoid{int 實參
形參數(shù)組名或指針注注意:形參是數(shù)組名而不是形一一維數(shù)組等指指針變形參x一維數(shù)組名作函數(shù)定義函數(shù)時,形參數(shù)組不占用的空間。實參調(diào)用形參x對形參數(shù)組的操作,也就是對實參數(shù)組的一維數(shù)組名作函數(shù)實參數(shù)組首地 地實
形參數(shù)組名或指針形一維數(shù)一維數(shù)組等指向一維數(shù)組的指針變指指針變4種等價形式:(1)形參、實參都用數(shù)形參、實形參用形參用數(shù)組名、實參用指針變例
舉例編寫函數(shù)統(tǒng)計一維數(shù)組中非0intsolve(intsolve(intb[ {intsum=0,ifor(i=0;i<10;i++if(b[i]!=0)sum++return voidmain({inta[10],num,i;for(i=0;scanf("%d",&a[i]);num=solve(a);printf("num=%d\n",num) 舉例編寫函數(shù)統(tǒng)計一維數(shù)組中非0例 改進程intsolve{intintsolve{intsum=0,ifor(i=0;i<n;i++if(b[i]!=0)sum++return intb[],int {inta[10],num,i思考:將實參數(shù)組定義a[20]思考:將實參數(shù)組定義a[20]行嗎num=solve(a,10) printf("num=%d\n",num) 寫函數(shù)實現(xiàn)數(shù)組逆置類例7.19:形參和實參均voidvoidfun(intx[],int{intfor(i=0,j=n-1;i<j;i++,j--{t=x[i];x[i]=x[j];x[j]=t;}#include<stdio.h>voidmain(){intprintf("Theoriginalfori=0;i<10;i+printf("%3d",a[i]/*出原始數(shù)組a
/*用函數(shù)fun置數(shù)組aprintf("Thearrayhasbeen
/*出逆后的數(shù)組a 寫函數(shù)實現(xiàn)數(shù)組逆置voidfun(int*x,intvoidfun(int*x,int{intt,*i,*j,m=(n-{t=*i;*i=*j;*j=t;}voidmain(){intprintf("Theoriginalfor(i=0;i<10;i++)
/*用函數(shù)fun逆置數(shù)組aprintf("Thearrayhasbeenfor(i=0;i<10;i++)printf("%3d",a[i]);寫函數(shù)實現(xiàn)數(shù)組逆置形參為數(shù)組名,實voidvoidfun(intx[],int{intt,i,j,m=(n-1)/2;for{j=n-i-1;t=x[i];x[i]=x[j];x[j]=t;}voidmain(){intprintf("Theoriginalfor(i=0;i<10;i++)p=a;
/*調(diào)用函數(shù)fun()逆置數(shù)組printf("Thearrayhasbeenfor(i=0;i<10;i++) 寫函數(shù)實現(xiàn)數(shù)組逆置voidfun(int*x,intvoidfun(int*x,int{intt,*i,*j,m=(n-{t=*i;*i=*j;*j=t;}#includevoidmain({intprintf("Theoriginalfor(i=0;i<10;i++)printf("%3d",a[i]);p=a;
/*用函數(shù)fun逆置數(shù)組printf("Thearrayhasbeenfor(i=0;i<10;i++)printf("%3d",a[i]);例例#includevoidvoidselect(int*a,int{intfor(i=0;i<n-1;i++{k=ifor(j=i+1;j<n;j++if(a[j]<a[k])k=jif(k!=i){temp=a[k];a[k]=a[i];a[i]=temp;voidmain({inta[10],inti;printf("Enterthearray:\n");
select(a,10printf("thesortedarray:for(i=0;i<10;i++)printf("%d 三 數(shù)組名作函數(shù)參數(shù)實 形二維數(shù)組二維數(shù)組等 等行指行指行指針元素元素元素指針例
或:intmax_valueint(*a)[4#includeintmax_valueinta[4])形參二維數(shù)組的{inti,j,maxmax=a[0][0]for(i=0;i<3;i++for(j=0;j<4;j++
可以加一個形參n傳遞第一維的if(可以加一個形參n傳遞第一維的return(max)}voidmain({inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}}printf("max=%d\n",max_value(a)) 實 形一維字一維字一維字等 等字符字符指字符指針例
到串voidstringcopyvoidstringcopy(chars[],char*t{inti=0;while(*t!='\0'){i++;例7.25改用兩個voidstringcopy while(針變量作r*p,char+)!='\0');}voidmain({charstr1[]="Ilovechar*str2="Ilovestringcopy
調(diào)用函 將串voidcopysubstringvoidcopysubstring(char*s1,char*s2,int{s1=s1+k-1; while(*s1!='\0')*s2}舉例從(若不足n個,取所有后續(xù)字符voidcopysubstring(char*s1,char*s2,intk,int{s1=s1+k-while(n>0&&*s1!='\0'{*s2++=*s1++;n--;*s2 函數(shù)的嵌套調(diào)用和遞函數(shù)的嵌套main()函 fun1()函 fun2()函 ① 調(diào)用函數(shù)
調(diào)用函數(shù) 結(jié)從什么地方調(diào)用函數(shù),就返回到什么地函數(shù)的嵌套調(diào)用舉例—求組合數(shù)cn#includevoidmain({intm,n,t;floatc(int,if(n>m)printf("Inputelseprintf("%.0f\n",c(m,n)函數(shù)函數(shù)C:求
調(diào)用c函數(shù)floatc(intm,int{ f,fac(int)f=fac(m)/(fac(n)*fac(m-n)
在c函數(shù)中三return(f)floatfac(intfloatfac(int{inti;floatfor(i=1;i<=t;i++)函數(shù)fac:求
return(s)}函數(shù)的遞歸inta(int{int……
}遞歸函數(shù)兩要 遞歸調(diào)使遞歸結(jié)束的遞歸函數(shù)應(yīng)用舉例 問P233例 age(n-1)+2 析
遞歸調(diào)結(jié)束遞歸的條intage(intn{int
intage(intn{intage(intn{if(n==1)returnelsereturnage(n-1)+2}}#include<stdio.h>voidmain(){printf("%d\n",age(5)) 遞歸函數(shù)應(yīng)用舉例 問
例
遞歸函數(shù)應(yīng)用舉例2—求階 析
n*fac(n-1)
結(jié)束遞歸的條遞歸調(diào)floatfloatfacintn /*求階乘函數(shù){floatfif(n==0||n==1)f=1;elsef=n*fac(n-1);return(f); #includevoidmain({intif(n<0)printf("n<10,dataelseprintf("%d!=%15.0f\n",n,fac(n));遞歸函數(shù)的優(yōu)遞歸優(yōu)點:程序簡潔;有時能解決非遞歸方法遞歸函數(shù)會帶來大量的重復(fù)計算,例如程序,每一次遞歸函數(shù)調(diào)用都會帶來前面的重函數(shù)的每一次調(diào)參數(shù)以及恢復(fù)現(xiàn)函數(shù)的返回值為返回指針的函數(shù)的{……int*f(intm,int{……舉例返回新函數(shù)功能:從串s去所有的空格,返回刪去空格后的schar*delspace(char*delspace(char{intif(*p1=='')}{char*delspace(char*);chars[100];}變量的作用域 類變量按照其作用范圍分為局部變量和全局變量(外部變量類作用(有效范圍函數(shù)形本復(fù)合語變兩點說①不同函數(shù)兩點說①不同函數(shù)中的局部變量可以同名,全局變量與局部變間間空inta=3,b=5intmax(inta,intb
全局變量a、max()的局部變量a、{intc
max()的局部變量c=a>b?a:b;return(c);}voidmain()
使用max()的局部變量a、程序運行{inta=8
main()的局部變量printf("%d\n",max(a,b)) 實參a是main()的局部變量(8),實參b是全局變量全局變量應(yīng)用P243例7.40有一個一維數(shù)組,內(nèi)放10個學(xué)生的成績,寫一個函#includefloatMax,Min定#includefloatMax,Min定義全局變量在所有函數(shù)floataverage(floatarray[],intn{inti;floataver,sum=array[0]Max=Min=array[0]for(i=1;i<n;i++{if(array[i]>Max)Max=array[i];elseif(array[i]<Min)Min=array[i];sum=sum+array[i];} return(aver);voidmain({floatave flo
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《歷史二戰(zhàn)起因及影響分析教學(xué)方案》
- 產(chǎn)品開發(fā)流程實戰(zhàn)案例分享
- 立體幾何圖形轉(zhuǎn)換與空間想象力培養(yǎng)教案
- 工程建筑采購合同
- 房屋買賣合同書中介標準模板
- 理發(fā)店開業(yè)活動方案
- 年夏季消防檢查工作實施方案
- 2025江西吉安市贛州橙芷酒店有限公司井岡山分公司招聘員工17人筆試參考題庫附帶答案詳解
- 2025年伺服定位系統(tǒng)合作協(xié)議書
- 2025年福建南平綠發(fā)集團有限公司招聘28人筆試參考題庫附帶答案詳解
- YY/T 1860.1-2024無源外科植入物植入物涂層第1部分:通用要求
- 貫入法砌筑砂漿抗壓強度檢測記錄
- 中醫(yī)外科學(xué)瘡瘍課件
- 生物技術(shù)在園藝植物育種中的應(yīng)用課件
- 《聲樂》課程標準(高職)
- 有創(chuàng)動脈血壓監(jiān)測-課件
- 封條模板A4直接打印版
- 文化遺產(chǎn)導(dǎo)論 教學(xué)大綱
- 微差爆破施工方案
- 2022年度八年級美術(shù)抽測題庫
- 義務(wù)教育《地理》課程標準(2022年版)
評論
0/150
提交評論