![c語言程序設(shè)計(jì)課件 函數(shù)_第1頁](http://file4.renrendoc.com/view14/M04/25/1F/wKhkGWciXa-AAFdjAAGv1yMiZUc291.jpg)
![c語言程序設(shè)計(jì)課件 函數(shù)_第2頁](http://file4.renrendoc.com/view14/M04/25/1F/wKhkGWciXa-AAFdjAAGv1yMiZUc2912.jpg)
![c語言程序設(shè)計(jì)課件 函數(shù)_第3頁](http://file4.renrendoc.com/view14/M04/25/1F/wKhkGWciXa-AAFdjAAGv1yMiZUc2913.jpg)
![c語言程序設(shè)計(jì)課件 函數(shù)_第4頁](http://file4.renrendoc.com/view14/M04/25/1F/wKhkGWciXa-AAFdjAAGv1yMiZUc2914.jpg)
![c語言程序設(shè)計(jì)課件 函數(shù)_第5頁](http://file4.renrendoc.com/view14/M04/25/1F/wKhkGWciXa-AAFdjAAGv1yMiZUc2915.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
注汰法:英訣:女:沐逐沐美沐沐泱沐米淡淡沐訣族&*浜逐渙逐法漲沐逐淡:渙沐沐差二:4
第一章
第二章C語言概述
第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式
第四章最簡單的C程序設(shè)計(jì)
第五章邏輯運(yùn)算和判斷選取控制
章循環(huán)控制
第六
章
第七數(shù)組
章
第八函數(shù)
章
第九編譯預(yù)處理
章
第十指針
一
第十章結(jié)構(gòu)體與共用體
一
第十三章文件的基本操作
位運(yùn)算
§7.1概述
C程序由一個(gè)main和任意個(gè)函數(shù)組成。
1)除main外,其它為系統(tǒng)函數(shù)、自編函數(shù),
系統(tǒng)函數(shù):由系統(tǒng)提供,放在不同的頭文
件中,用戶可調(diào)用。
自編函數(shù):由用戶按語法規(guī)則編寫。
2)除main函數(shù)外淇它函數(shù)可相互調(diào)用
3)函數(shù)不可嵌套定義,但可以嵌套調(diào)用。
4)函數(shù)分為有參與無參函數(shù)
5)程序從main開始執(zhí)行,最后又回到main函
數(shù)結(jié)束。
語言程停過苜
§7.2定義與調(diào)用
i.無參函數(shù)
*定義形式
[存儲(chǔ)類型符H返回類型符]函數(shù)名()
{說明部分
語句
、一)
注意:
存儲(chǔ)類型符有兩種:static型和缺省型。
返回類型符表示函數(shù)的返回值類型。
cissssmt
*調(diào)用方式
第1種:變量=函數(shù)名();
注:變量名的類型與函數(shù)返回值的類型必須相同.
第2種:函數(shù)名();
C謂言握停過計(jì)
2.有參函數(shù)
*定義形式
[存儲(chǔ)類型符]類型標(biāo)識符函數(shù)名(形參表列)
形參說明
{說明部分
語句
)
*調(diào)用方式
變量名=函數(shù)名(實(shí)參表列);
C語言耗停汽苜
例:求二數(shù)之最大值或:
intmax(x,y)intmax(intx,inty)
intx,y;{intz;
{intz;z=x>y?x:y;
z=x>y?x:y;return(z);
return(z);
)
用return語句,返回函數(shù)的值。
c語言程序汽共
3.形參與實(shí)參
實(shí)參:出現(xiàn)在調(diào)用函數(shù)中,形參:出現(xiàn)被調(diào)用函數(shù)中。
調(diào)用時(shí):實(shí)參值)單向總,形參。
函數(shù)被調(diào)用時(shí),臨時(shí)分配單元給形參,調(diào)用完
畢,這些單元被釋放。
注:*實(shí)參可為表達(dá)式,只傳遞表達(dá)式的值。
*實(shí)參、形參類型一致。
?可在形參表列中對形參說明。
C語言凝停直苜
4.函數(shù)返回值
return(表達(dá)式的值);
t
變量的值
通過return語句將流程返回主調(diào)函數(shù)。
C語言耗停直苜
5.函數(shù)聲明:
一般的函數(shù)被調(diào)用之前必須做出說明:
說明格式:類型符函數(shù)名0;
例1:求二實(shí)數(shù)之和
#include<stdio.h>
main()
{floatadd();/*函數(shù)說明*/
floata,b,c;
6
scanff%f9%f\&a9&b);
c=add(a9b);/*函數(shù)調(diào)用*/
printf("sum=%P;c);
C語言耗停直苜
floatadd(floatx,floaty);/*函數(shù)定義*/
{floatz;
z=x+y;
returnz;
}
若函數(shù)的定義放在main()函數(shù)之前可省
略函數(shù)說明。
C捂黑辭停汽計(jì)
例2:求二實(shí)數(shù)之和(將例1程序改寫如下:)
#include<stdio.h>
floatadd(floatx,floaty);/*函數(shù)定義*/
{floatz;
z=x+y;
returnz;
}
main()
{floata,b,c;
6
scanfC%f,%f\&a9&b);
c=add(a,b);/*函數(shù)調(diào)用*/
printf(nsum=%f!;c);
C語言辭停過H
6.調(diào)用系統(tǒng)函數(shù),需根據(jù)系統(tǒng)提供的庫函數(shù)手冊而
確定加上預(yù)編譯命令,如:要調(diào)用getchar()函
數(shù),需要加上:
#include"stdio.h"
所有系統(tǒng)提供的庫函數(shù)都放在頭文件.h中
C語言耗停汽苜
§7.3嵌套調(diào)用
函數(shù)不能嵌套定義,但可以嵌套調(diào)用。
c語言耗停汽苜
例1:/*---exp81.c---*/
#include<stdio.h>
intfunl(intx,inty);
charfun2(intt)
inta,b;
main()
{intu;
a=24;b=42;
printf(nmain(l)——a=%d,b=%d\n",a,b);
u=fiml(a,b);
printf(nmain(2)——a=%d,b=%d,u=%d\n\a,b,u);
9^c髓程停過計(jì)
intfiinl(intc,inty)
{intz;
charch;
z=x+y;
ch=fun2(z);
printf(nfunl-------ch=%c\n",ch);
return(z);
}
charfun2(intt)
{t=a+b;
n
printf(fun2-------t=%d,t=%c\n",t91);
return(z);
c捂舌盤停得計(jì)
運(yùn)行結(jié)果:
main(1)—a=24,b=42
fun2--------1=66,t=B
funl--------ch=B
main(2)——a=24,b=42u=66
ci吾看程停過計(jì)
例2:用弦截法求方程的根。
x3-5x2+16x—80=0
方法如下:
⑴取兩個(gè)不同點(diǎn)xrX2,如果f(xj和f(X2)符號
相反,則(X],X2)區(qū)間內(nèi)必有一個(gè)根。如果f(xj
與f(X2)同符號,則應(yīng)改變X]、X2,直到f(xj、
f(X2)異號為止。注意Xi、X2的值不應(yīng)差太大,
以保證(X],X2)區(qū)間只有一根。
C捂言握停直計(jì)
(2)連接f(X1)和f(X2)兩點(diǎn),此線(即弦)交X軸于X,見
圖76
x點(diǎn)坐標(biāo)可用下式求出:
/(%2)一/(%1)
再從X求出f(x)o
3鴕/
(3)若f(x)與f(x。同符號,則根必在(X,X2)區(qū)間內(nèi),
此時(shí)將X作為新的X-如果f(x)與f(X2)同符號,
則表示根在(X?X2)區(qū)間內(nèi),將X作為新的X2.
(4)重復(fù)步驟(2)和(3),直到|f(x)|q為止,g為一個(gè)
很小的數(shù),例如10—6。此時(shí)認(rèn)為f(x戶0.
C語言程停過計(jì)
根據(jù)上述思路畫出n-s流程圖,見圖7.7
輸入xl、x2,求f(xl)、f(x2)
直到f(x1)與f(x2)異號
求f(xl)與f(x2)連線與x軸
的交點(diǎn)X
y=-x),y=f(xl)
root函數(shù)
xl=xx2=x
yl=yy2=y
直到|f(x)|<£
root=x輸出root圖7.7名
其程序由若干個(gè)函數(shù)構(gòu)成,
#includenmath.hn
floatf(x)/*函數(shù)1定義,計(jì)算f(x)=x3—5x2+16x—80*/
floatx;
{floaty;
y=((x—5.0)*x+16.0)*x—80.0;
return(y);
)
floatxpoint(xl,x2)/*函數(shù)2定義,求出弦與x軸交點(diǎn)*/
floatxl?x2;
{floaty;
y=(x1*f(x2)-x2*f(x1)/(f(x2)—f(xl);
return(y);
}心情言一界―
floatroot(xl9x2);/*函數(shù)3定義,求近似根。*/
floatxl9x2;
{inti;
floatx9y,yl;
yl=f(xl);
do
x=xpoint(xl9x2);/*函數(shù)2調(diào)用*/
y=f(x);
if(y*yl>0)/*f(x)與f(xl)同符號*/
,yi=y;
xl=x;}
else
x2=x;
}while(fabs(y)>=0.0001);C;U片
return(x);
)
main()/*主函數(shù)*/
{floatxl9x2,fl,2x;
do
{printff'inputx1,x2:\n’‘);
scanf(%f,%f,&xl,&x2);
fl=f(xl);/*函數(shù)1調(diào)用*/
f2=f(x2);/*函數(shù)1調(diào)用*/
)
while(fl*如>=0);
x=root(xl9x2);/*函數(shù)3調(diào)用*/
printf(nArootofequationis%8.4f\x);
C語言耗停汽苜
程序運(yùn)行結(jié)果如下:
inputx1,x2:
2,6J
Arootofequationis5.000
謂言辭
§7.4遞歸調(diào)用
遞歸:一個(gè)函數(shù)直接或間接地調(diào)用自身。
1.直接遞歸調(diào)用:函數(shù)直接調(diào)用本身
2.間接遞歸調(diào)用:函數(shù)間接調(diào)用本身
c語言程停過H
以下表示了遞歸的概念.
直接調(diào)用:間接調(diào)用:
intf(x)int1(x)/ntf(t)
飛2
intx;intx;intt;
{inty9z;{inty,z;{inta,b;
*
Z=f⑵;z=0(y)/'a=L(b);
語舌程停過it
顯然:上述例子會(huì)無限遞歸(無限執(zhí)行)。所以,在遞
歸調(diào)用時(shí)都必須有條件限制。
當(dāng)條件成立,調(diào)用遞歸,否則結(jié)束。
例1:求n!
1.從數(shù)學(xué)上定義
j1(n=051)
n1n*(n-l)!(n>l)
c語言程序過計(jì)
2.程序:
#include<stdio.h>
longfac(intn)/*函數(shù)定義,計(jì)算n!*/
{longf;
if(n<0)
printf(ninputerror!\nn);
elseif(n==0[[n==1)
f=l;
elsef=n*fac(n—1);
return(f);
)
CSSSBan
main()
{intn;
longy;
printf(ninputainteger!n)
scanf("%d;&n);
y=fac(n);/*函數(shù)調(diào)用,計(jì)算n!*/
printf("%d!=%151d",n,y);
C語者凝停直苜
3.執(zhí)行過程:設(shè):輸入5」(n=5)
第一次調(diào)用:y=fac(5)-----返回:y=5fac(4)
fac(l)
(
*
qf(l);
*
returnf;
}
C語言凝停汽it
簡化表示為:
當(dāng)變成機(jī)器代碼時(shí),將其拉成直線(線性程
序代碼)。
□
例2:漢諾塔(Hanoi)問題
問題:將A塔上n個(gè)盤子移至C(借助于B)。移動(dòng)時(shí),
保證三個(gè)塔始終是大盤在下,小盤在上。
B
n個(gè)盤子
港言程浮過計(jì)
必須用遞歸方式解決
1)先將A塔n-1個(gè)盤子借助于C移至B上
2)將A上剩下的一個(gè)移至C上.
3)將B上n-1個(gè)盤子借助于A移至C上.
可以看到:
1)、3)為同一問題,都為n-1個(gè)盤子借助于一個(gè)
空塔移至另一塔上。
C語言辭擲汽"
程序如下:
#include<stdio.h>
voidmove(chargetone9charputone)/*函數(shù)定義*/
{printf^%c——>%c\n",getone,putone);
}.
voidhanoi(intn,charone,chartwo,charthree)
/*將n個(gè)盤從one借助two,移到three*/
{if(n==1)
move(one,three);
else
hanoi(n-l5one,three,two);
move(one?three);/*函數(shù)調(diào)用*/
hanoi(n-l5two,one,three);}
}c語言盤停過日
main()
{intm;
printf("inputthenumberofdiskes"
scanf(n%d”,&m);
print/'Thesteptomoving%3ddiskes:\n",m);
hanoi(m「A'JB'JC');/*函數(shù)調(diào)用*/
C語言耗停汽苜
運(yùn)行情況如下:
inputthenumberofdiskes:3J
Thesteptomoving3diskes:
A—〉C
A—>B
C—>B
A—>C
B—>A
B—>C
A—〉C
C語言耗停汽苜
在程序中有兩個(gè)函數(shù):
*move(getone,putone)
表示從getone塔移一個(gè)盤子至putone塔
hanoi(n,one,two,three)
表示n個(gè)盤子從one塔借助于two塔(空)移至three塔。
調(diào)用時(shí)塔用字符常量A「B/C,表示。
C語言耗停直苜
§7.6局部變量與全局變量
一、局部變量
凡在函數(shù)(含main函數(shù))內(nèi)部定義的變量稱為
局部變量。
局部性:局部變量僅在函數(shù)內(nèi)部有效。
1.不同的函數(shù)可具有同名的變量,它們占不同的內(nèi)
存單元,互不影響。
2.形參為局部變量。
3.在復(fù)合語句中可定義僅復(fù)合語句中有效的臨時(shí)
變量。
捂看程停及計(jì)
二、全局變量
一個(gè)源文件中,在所有函數(shù)之外定義的變量為
全局變量。
有效性:自定義位置開始至文件結(jié)尾全部有效。
例:intp=l,q=5;
floatfl(a)
inta;p,q的作用范圍
{intb,c;
charcl,c2;—
?的作用范圜...…
IclRir
charf2(x,y);
intc,y;
{intij;
main()
情言:震
1.全局變量所作用到的函數(shù),相當(dāng)于這些函數(shù)的公
共變量。于是,當(dāng)一個(gè)函數(shù)對其值進(jìn)行改變后,另
一個(gè)函數(shù)使用該變量的值亦相應(yīng)改變。好處:函
數(shù)之間值傳遞。
2.不要隨意使用全局變量。一是始終占據(jù)內(nèi)存單
元;二是由于函數(shù)依賴于外部定義的變量,減
少了通用性。
3.不在作用域內(nèi)函數(shù)。若使用全局(外)變量,需在
函數(shù)體內(nèi)加上extern保留字。
4.全局和局部變量同名時(shí),局部變量有效。
floatfl(x)
intx;
{externinta,b;
inta=0;b=-1
main()
a,b作用域
ifi妄四
彳歹ij./*―-exp81.c-???*/
#include<stdio.h>
intfunl(intx,inty);
inta,b,z;
main()
{intu,m=0;
a=24;b=42;
printf(n(l)---------a=%d,b=%d,m=%d\n'',a,b,m);
m=m+10;
u=funl(a,b);
printf(n(2)---------a=%d,b=%d,u=%d,m=%d\n'',a,b,u,m);
m=m+10;
a=z-a;b=z-b;
u=funl(a,b);
printf(n(3)---------a=%d,b=%d,u=%d,m=%d\nn,a,b,u,m);
}ci悟言起舁汽it
intfunl(intx,inty)
{intm;
m=x+y;
a=a+10;b=b+20;
z=x+y;
printf(nchanga&b:—a=%d,b=%d,z=%d,m=%d\n”,
a,b,z,m);
return(z);
}
C語言耗停汽苜
運(yùn)行結(jié)果:
(1)----------a=24,b=42,m=0
changa&b:---a=34,b=62,z=66,m=66
(2)----------a=34,b=62,u=66,m=10
changa&b:---a=42,b=24,u=36,m=36
(3)----------a=42,b=24,u=36,m=20
C語言凝停過H
注意:
*上面程序中a,b,z是全局變量,u,m為局部
變量;
來若將inta,b,z;語句放入main()函數(shù)中,情
況會(huì)怎樣?
C語言程建冏注
§7.7動(dòng)態(tài)存儲(chǔ)變量與靜態(tài)存儲(chǔ)變量
一、變量的存儲(chǔ)類別
表達(dá)了一個(gè)變量存在的空間、時(shí)間。
程序區(qū)
內(nèi)存分配靜態(tài)存儲(chǔ)區(qū)〕
動(dòng)態(tài)存儲(chǔ)區(qū)'數(shù)據(jù),變量存放
c謂言程停過甘
靜態(tài)存儲(chǔ)變量:存放于靜態(tài)存儲(chǔ)區(qū),在.少歲?建行
過程中,始終占據(jù)固定的內(nèi)存單兀。
挪
根
區(qū)
儲(chǔ)
存
態(tài)
動(dòng)
放
存
分
酉
時(shí)
用
肥
數(shù)J
動(dòng)態(tài)存儲(chǔ)變量:函
口
狀
斤
態(tài)[zHr
I
I
不
并
元
單
定
單
元
的□:2
且)w
固-O
語言盤停及計(jì)
變量又可分為四種具體形式
1.自動(dòng)型變量(auto)
2.靜態(tài)(static)變量
3.寄存器型變量
4.外部(extern)變量
前面學(xué)習(xí)的局部、全局變量均以上述方式中
的一種形式存儲(chǔ)。
C語言辭停過計(jì)
二、局部變量
局部變量既可以靜態(tài)方式,又可以動(dòng)態(tài)方式存儲(chǔ)。
動(dòng)態(tài)方式:autointa?b;
貝U:a,b為自動(dòng)型,存入動(dòng)態(tài)區(qū)。在該函數(shù)被
調(diào)用時(shí)才分配單元,函數(shù)調(diào)用結(jié)束時(shí)釋放。
auto一般省略。以前用到的變量均為auto型,除
static夕卜。
C語言凝停直苜
靜態(tài)方式:staticinta,b;
則:a,b存入靜態(tài)區(qū)。函數(shù)中的a,b始終占據(jù)固定
存儲(chǔ)單元。
*若定義時(shí)賦初值,則程序運(yùn)行中僅在第一次調(diào)用
時(shí)賦初值,第二次調(diào)用不再賦初值,而是使用上
一次調(diào)用的值。
例:求n!
#include<stdio.h>
intfac(n)/*函數(shù)定義*/
intn;
{staticintf=l;
f=f*n;
return(f);
}.
main()
{inti;
for(i=1;i<=5;i++)
printf("%d!=%d\n”,i,fac(i));
C語言耗停汽苜
運(yùn)行結(jié)果為:
1=1
2=2
3=6
4=24
5=120
每一次調(diào)用fac⑴,打印一個(gè)i!,同時(shí)保留
這個(gè)i!的值以便下次再乘(i+1)。
C語言耗停直苜
*若不賦初值,則系統(tǒng)置初值0,而動(dòng)態(tài)變量不賦初值
則值不確定。
當(dāng)動(dòng)態(tài)局部變量在一個(gè)函數(shù)中反復(fù)被用達(dá)到數(shù)
百次以上,為了提高效率,可將其存入寄存器中
(有限個(gè)),不存入內(nèi)存的動(dòng)態(tài)區(qū)中。
說明方式registerintij=l;
*不可太多,一般1—3個(gè)
來必要時(shí)使用。
C語善混殍過言
三、全局變量
在函數(shù)外部中定義,它們一定存放在靜態(tài)存
貯區(qū)中。
全局變量即可被本文件中各函數(shù)用,亦可被其
它源文件中的函數(shù)引用。
1.只被本文件中的函數(shù)引用
全局變量本身一定是存放在靜態(tài)區(qū)的。但若加
上staic.即:
staticinta,b;
則表明a,b只被本文件
floatfl(x)
中各函數(shù)引用,即使
intx
與其它文件中的全局
變量同名,也互不影
響。
C誦言辭停過甘
2,可被其它文件中的函數(shù)引用
externinta;
inta;\fac(x)
main()intx
I文件2c
卜文件fl.c(::用到fl.c
z=a東…中的a
j
J
f2c中的extern在函數(shù)外說明,在函數(shù)內(nèi)說明
已敘述過。C語言震停過甘
總結(jié)見表7.2
函數(shù)內(nèi)函數(shù)外
存儲(chǔ)類別
作用域存在性作用域存在性
autoXX
registerqXX
11
static局部yXX
static外部X1X1本文件1
不加staticI
AJA1
全局(外部)、7
C語言
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 魚種產(chǎn)品購銷合同書樣本年
- 2025合同模板修繕修理合同范本
- 隧洞施工合同范本
- 裝修房屋托管合同范本
- 購房協(xié)議合同
- 蔬菜采購合同模板
- 中央空調(diào)銷售安裝合同書
- 夜班出租車承包合同模板
- 行紀(jì)服務(wù)合同
- 建筑項(xiàng)目進(jìn)度控制
- 五年級數(shù)學(xué)(小數(shù)乘除法)計(jì)算題專項(xiàng)練習(xí)及答案匯編
- 2024年蘇州農(nóng)業(yè)職業(yè)技術(shù)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2025年北京生命科技研究院招聘筆試參考題庫含答案解析
- GB/T 27697-2024立式油壓千斤頂
- 《消防機(jī)器人相關(guān)技術(shù)研究》
- 游泳館安全隱患排查
- 《媒介社會(huì)學(xué)》課件
- 2022-2023年人教版九年級物理上冊期末考試(真題)
- 關(guān)漢卿的生平與創(chuàng)作
- 編本八年級下全冊古詩詞原文及翻譯
- 公共政策學(xué)政策分析的理論方法和技術(shù)課件
評論
0/150
提交評論