计算机课件15函数_第1页
计算机课件15函数_第2页
计算机课件15函数_第3页
计算机课件15函数_第4页
计算机课件15函数_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ProgramminginC

c程序设计

ProgramminginC

西安电子科技大学计算机学院张淑平

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China1

.上次课要点__________ProgramminginC

•函数定义

•形式参数doubleCelsToFahr(intc)

•函数调用(

•实际参数doublet;

•参数传递t=9.0/5*c+32;

•实际参数向形式参数传值return(t);

•函数返回值}

voidmain(void)

{intx;doubley;

printf(MCelsiustoFahrenheittable:\nn);

for(x=0;x<=100;x+=5){

y=CelsToFahr(x);printf(H%3d--%3g\tn,x,y);

膏形参和实参ProgramminginC

实参可以是常量、变量、表达式、函数等。无论实参是何

种类型的量,在进行函数调用时,它们都必须具有确定的

值,以便把这些值传送给形参。

>因此,应预先用赋值、输入等办法,使实参获得确定的

值。

形参变量只有在被调用函数执行时,才分配内存单元;调

用结束时,即刻释放所分配的内存单元。

>因此,形参只有在该被调用函数内有效。调用结束,返

回主调函数后,则不能再使用该形参变量。

•实参对形参的数据传送是单向的,即只能把实参的值传送

给形参,而不能把形参的值反向地传送给实参。

•实参和形参占用不同的内存单元,即使同名也互不影响。

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China3

ProgramminginC

这次课的主要内容

参数传递

函数调用

嵌套调用

•递归调用

全局变量和局部变量

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China4

ProgramminginC

&传值调用一

•函数调用执行时,将实际参数的值传递给形

式参数

main()

voidswap(intx,inty)inta,b,c;

{a=3;b=8;c=2;

intt;if(a>b)swap(a,b);

t=x;x=y;y=t;if(a>c)swap(a,c);

if(b>c)swap(b,c);

nf

printf(%d%d%d\a5b,c);

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China5

ProsramminsinC

第;传值调用

•函数调用执行时,将实际参数变量的地址传

递给形式参数

main()

(

voidswap(int*x,int*y)inta,b,c;

{a=3;b=8;c=2;

intt;if(a>b)swap(&a,&b);

t=*x;*x=*y;*y=t;if(a>c)swap(&a,&c);

if(b>c)swap(&b,&c);

nf

printf(%d%d%d\a9b,c);

西安电子科技大学计算机学院-XidianUniversity,ChinaTC2.0

ProgramminginC

题数组作为函数参数______________

•数组作为参数有两种形式

•数组元素作为实参使用;

•把数组名作为函数的形参和实参使用

•数组元素是一个变量

intnum[5]={79,11,27,26,43};

num[O]79

num[l]11

num[2]27

num[3]26

num[4]43

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China7

ProgramminginC

;数组名作为函数参数

•数组名可以作为实参和形参,传递的是数组

空间的首地址

voidsort(inta[]9intn)/*数组a白main()

{inti,j,temp;

for(i=0;i<n-1;i++){inti;

for(j=0;j<n-1-i;j++)intnum[6]={43,18,9,13,55,7};

if(a[j]>a[j+l]){

temp=a[j];a[j]=a[j-sort(num,6);

}/*endif*/for(i=0;i<6;i++)

}/*endfori*/printf(n%d\tn,num[i]);

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,ChinaTC2.0

ProgramminginC

改组名作为函数参数(续)

•多位数组作为实参酒碗一

inti,j,max,num[3][4];

•例如:找出二维数组

for(i=0;i<3;i++){

intmax_value_Matrix(inta[]

for(j=0;j<4;j++){

{inti,j,line,col;

num[i][j]=rand();

max=a[0][0];line=0;co

printf(n%d\tn,num[i][j]);

for(i=0;i<m;i++)

}

for(j=0;j<n;j++)

printf(H\nn);

if(a[i][j]>max){max

}

printf(n%d,%d,line,co

max=max_value_Matrix(num,354);

returnmax;

printf(n%d\tn,max);

TC2.0

ProgramminginC

函数的嵌套调用

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China10

令NProsramminsinC

初函数的嵌套调用____________________

O嵌套调用是指在执行被调用函数时,被调用

函数又调用了其他函数

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,ChinaTC2.0

ProgramminginC

殛嵌套调用:排序

voidsort(inta[],intn)main()

{inti,j,temp;(

for(i=0;i<n-1;i++){inti;

for(j=0;j<n-1-i;j++)intnum[6]={43,18,9,13,55,7};

if(a[j]>a[j+l]){

swap(&a[j],&a[j+l]);sort(num,6);

}/*endif*/for(i=0;i<6;i++)

}/*endfori*/printf(M%d\f\num[i]);

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,ChinaTC2.0

徵嵌套调用:求组合数ProgramminginC

longfact(intn)

・书架上有10本不同的书,

从中任取2本,有多少(

种取法?longt=1,i=1;

for(i=1;i<=n;i++)

<1010!t=t*i;

2)2!(10-2)!return(t);

longcombinations(intn,intk)

return(fact(n)/(fact(k)*fact(n-k)));

0E。子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,Ctl己事TC2.0

ProgramminginC

缪函数不能嵌套定义

•函数不能嵌套定义,即不能在一个函数内定

义另一个函数

longfact(intn)main()

longt=1,i=1;inti=1;

for(i=1;i<=n;i++){for(i=1;i<=10;i++){

t=t*i;printf(n%d!=%ld\nn,i,fact(i));

)}

return(t);

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China14

ProgramminginC

函数的递归调用

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China15

ProgramminginC

现函数的递归调用

•若函数在执行过程中直接或间接地调用自身,

称为函数的递归调用

•函数的递归定义)例如:n!=n*(n-1)!(n>l)

1n<=1

fact(n)={

n*fact(n-1)n>1

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,Ct递归TC2.0

鹭函数的递归调用ProgramminginC

•在递归调用中,调用函数又是被调用函数,

执行递归函数将反复调用其自身。每调用一

次就进入新的一层。

•为了防止递归调用无终止地进行,必须在函

数内有终止递归调用的手段。常用的办法是

加条件判断,满足某种条件后就不再作递归

调用,然后逐层返回。

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China17

ProgramminginC

£全局变量和局部变量___________

在函数中定义的变量是局部变量

在所有函数之外定义的变量是全局变量

形式参数是局部变量

西安电子科技大学计算机学院-SchoolofComputerScience&Engineering,XidianUniversity,China18

圆全局变量和局部变量ProgramminginC

局部变量只在定义它的函数中有意义

全局变量在所有函数中都有意义

intm9n;

intgcd(intx,inty)

main()

{

{

inti;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论