第章ACMACM竞赛.ppt

上传人:wj 文档编号:18628109 上传时间:2023-08-21 格式:PPT 页数:38 大小:1.27MB
下载 相关 举报
第章ACMACM竞赛.ppt_第1页
第1页 / 共38页
第章ACMACM竞赛.ppt_第2页
第2页 / 共38页
第章ACMACM竞赛.ppt_第3页
第3页 / 共38页
第章ACMACM竞赛.ppt_第4页
第4页 / 共38页
第章ACMACM竞赛.ppt_第5页
第5页 / 共38页
第章ACMACM竞赛.ppt_第6页
第6页 / 共38页
第章ACMACM竞赛.ppt_第7页
第7页 / 共38页
第章ACMACM竞赛.ppt_第8页
第8页 / 共38页
第章ACMACM竞赛.ppt_第9页
第9页 / 共38页
第章ACMACM竞赛.ppt_第10页
第10页 / 共38页
第章ACMACM竞赛.ppt_第11页
第11页 / 共38页
第章ACMACM竞赛.ppt_第12页
第12页 / 共38页
第章ACMACM竞赛.ppt_第13页
第13页 / 共38页
第章ACMACM竞赛.ppt_第14页
第14页 / 共38页
第章ACMACM竞赛.ppt_第15页
第15页 / 共38页
第章ACMACM竞赛.ppt_第16页
第16页 / 共38页
第章ACMACM竞赛.ppt_第17页
第17页 / 共38页
第章ACMACM竞赛.ppt_第18页
第18页 / 共38页
第章ACMACM竞赛.ppt_第19页
第19页 / 共38页
第章ACMACM竞赛.ppt_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第章ACMACM竞赛.ppt

《第章ACMACM竞赛.ppt》由会员分享,可在线阅读,更多相关《第章ACMACM竞赛.ppt(38页珍藏版)》请在冰点文库上搜索。

第章ACMACM竞赛.ppt

2023/8/21,第8章函数,1,第8章函数,8.1概述8.2函数定义及调用8.3函数参数8.5函数嵌套调用及递归调用8.7数组用为函数参数8.8变量的作用域及生存期,引例:

在屏幕上显示以下内容*hello!

*welcome!

*,2023/8/21,第8章函数,2,#includevoidmain()intj;for(j=1;j=10;j+)printf(“*”)printf(“n”)printf(“hello!

n”);for(j=1;j=10;j+)printf(“*”)printf(“n”)printf(“welcome!

n”);for(j=1;j=10;j+)printf(“*”)printf(“n”),设printstar()功能是在屏幕在画十个*后并换行,用其来代替后边红色部分。

printstar();,printstar();,printstar();,将程序中部分功能提取出来独立成为一部分,再调用它,这就是函数。

2023/8/21,第8章函数,3,一、C程序的组成形式main()说明部分;程序实现部分;f1()说明部分;程序实现部分;f2()说明部分;程序实现部分;,C文件可以由多个函数组成,每个函数定义是独立的一个C程序必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束,8.1概述,2023/8/21,第8章函数,4,二、函数分类从用户角度标准函数(库函数):

由系统提供,如sqrt(x);fabs(x);strcmp(s1,s2);用户自定义函数:

max(x,y);printstar();从函数形式无参函数:

getchar();prinstar();有参函数:

strcpy(s1,s2);strlen(s);max(x,y);,2023/8/21,第8章函数,5,一、函数的定义(实现函数功能)一般格式:

无参函数:

函数类型函数名()说明部分;语句部分;,8.2函数的定义及调用,有参函数:

函数类型函数名(形参类型说明表)说明部分;语句部分;,合法的标志符,可有多个形参,一个形参一个说明,例:

实现画十个*的函数voidprinstar()inti;for(i=1;i=10;i+)printf(“*”);printf(“n”);,2023/8/21,第8章函数,6,例:

实现求两个数的最大值intmax(intx,inty)intz;if(xy)z=x;elsez=y;returnz;,2023/8/21,第8章函数,7,形参是形式参数,在定义函数时无须考虑其具体值,2023/8/21,第8章函数,8,二、函数的返回值返回语句形式:

return(表达式);或return表达式;功能:

使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数说明:

函数中可有多个return语句,只执行一个。

若无return语句,遇函数结束时,自动返回调用函数函数类型与return语句中表达式值的类型应一致。

无返回值则函数类型说明为void型函数,2023/8/21,第8章函数,例:

有返回值的函数intmax(intx,inty)intz;z=xy?

x:

y;return(z);main()inta,b;intc;scanf(%d,%d,例无返回值函数swap(intx,inty)inttemp;temp=x;x=y;y=temp;,Z的值,void,执行到max的return语句时,将返回值带回调用点,2023/8/21,第8章函数,三、函数的调用调用形式无返回值函数调用函数名(实参表);有返回值函数调用x=函数名(实参表);或放在其它表达式或函数中,例:

函数语句:

例printstar();函数表达式:

例m=max(a,b);m=max(12,17)+10;函数参数:

例printf(“%d”,max(a,b);m=max(12+23,max(b,c);,2023/8/21,第8章函数,11,调用过程1)再次强调任何程序一切从main函数开始执行,在main函数中结束。

2)当执行到调用函数语句时,将跳到被调用函数的定义点开始执行,直到被调用函数执行结束,再回到调用点,继续下一步执行。

3)调用时将实参的值一一对应地传给形参。

说明:

实参与形参个数相等,类型一致,按顺序一一对应,2023/8/21,第8章函数,12,floatadd(floatx,floaty)floatz;z=x+y;return(z);main()floata,b,c;scanf(%f,%f,设输入a为12,b为15,x得12,y得到15,得到z的值27,赋给c,2023/8/21,第8章函数,13,四、函数声明对被调用函数要求:

必须是已存在的函数库函数:

#include用户自定义函数:

函数声明函数声明一般形式:

函数类型函数名(形参类型形参名,.)作用:

告诉编译系统函数类型、参数个数及类型,以便检验函数声明位置:

调用函数的数据说明部分或函数体外下列情况下,可不作函数声明若函数返值是char或int型,系统自动按int型处理被调用函数定义出现在主调函数之前,2023/8/21,第8章函数,14,例函数说明举例,程序演示,2023/8/21,第8章函数,15,说明:

实参必须有确定的值形参必须指定类型形参与实参类型一致,个数相同形参与实参各自占有一个空间,形参与实参形式参数:

定义函数时函数名后面括号中的变量名实际参数:

调用函数时函数名后面括号中的表达式,8.3函数参数,2023/8/21,第8章函数,16,参数传递方式值传递方式方式:

函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:

形参与实参占用不同的内存单元单向传递,2023/8/21,第8章函数,17,例交换两个数,/*案例8_2.c*/#includemain()intx=7,y=11;printf(x=%d,ty=%dn,x,y);printf(swapped:

n);swap(x,y);printf(x=%d,ty=%dn,x,y);swap(inta,intb)inttemp;temp=a;a=b;b=temp;,7,11,a:

b:

调用前:

swap:

调用结束:

调用时:

程序演示,2023/8/21,第8章函数,19,main(),a();,a函数,b函数,b();,8.6函数嵌套与递归调用参数,一、嵌套调用C规定:

函数定义不可嵌套,但可以嵌套调用函数调用过程如下:

/*案例8_3.c*/求三个数中最大数和最小数的差值,#includeintdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);voidmain()inta,b,c,d;scanf(%d%d%d,intdif(intx,inty,intz)intm,n;m=max(x,y,z);n=min(x,y,z);returnm-n;intmax(intx,inty,intz)intr;r=xy?

x:

y;return(rz?

r:

z);intmin(intx,inty,intz)intr;r=xy?

x:

y;return(rz?

r:

z);,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,程序演示,2023/8/21,第8章函数,21,二、递归调用定义:

函数直接或间接的调用自身叫函数的递归调用,intf(intx)inty,z;z=f(y);.return(2*z);,2023/8/21,第8章函数,22,#includeintage(intn)intf;if(n=1)f=10;elsef=age(n-1)+2;return(f);,递归调用过程例:

x=age(5);,main()intx;x=age(5);printf(“the5manageis%d“,x);,n=5f=age(4)+2,n=4f=age(3)+2,n=3f=age

(2)+2,n=2f=age

(1)+2,n=1f=10return(f),return(f),return(f),return(f),return(f),2023/8/21,第8章函数,23,练习:

分析以下递归函数的调用过程,写了结果,#includeintfac(intn)intf;if(n=0|n=1)f=1;elsef=fac(n-1)*n;return(f);main()intn,y;printf(Inputaintegernumber:

);scanf(%d,2023/8/21,第8章函数,24,8.7数组作为函数参数数组元素作函数实参实参:

某个数组元素如a3形参:

简单变量的定义传递实质:

值传递(单向),2023/8/21,第8章函数,25,例数组元素作为实参,#includevoidswap2(intx,inty)intz;z=x;x=y;y=z;main()inta2=1,2;swap2(a0,a1);printf(a0=%dna1=%dn,a0,a1);,值传递,2023/8/21,第8章函数,26,数组名作函数参数实参:

数组名形参:

数组的定义形式(形参数组可以不指定大小或大小不一致)传递实质:

地址传递(双向),函数中对数组元素的修改可以传递回来。

如:

inta10;实参为a形参:

intx10或intx或intx20,2023/8/21,第8章函数,27,#includevoidswap2(intx2)intz;z=x0;x0=x1;x1=z;main()inta2=1,2;swap2(a);printf(a0=%dna1=%dn,a0,a1);,地址传递,例数组名作函数参数,2023/8/21,第8章函数,/*案例8_4.c*/数组排序-简单选择排序,a,10,程序演示,2023/8/21,第8章函数,29,二维数组名作函数参数实参:

数组名形参:

二维数组的定义形式(形参数组可以不指定第一维大小)传递实质:

地址传递(双向),函数中对数组元素的修改可以传递回来。

如:

inta1020;实参为a下面形参形式错误的是:

A)intx1020B)intaC)intx10D)inta20,2023/8/21,第8章函数,30,变量的作用域局部变量与全局变量局部变量-内部变量定义:

在函数内定义,只在本函数内有效说明:

main中定义的变量只在main中有效,无任何特权。

不同函数中同名变量,占不同内存单元形参属于局部变量,8.8变量的作用域与生存期,2023/8/21,第8章函数,31,main()inta,b;a=3;b=4;printf(main:

a=%d,b=%dn,a,b);sub();printf(main:

a=%d,b=%dn,a,b);sub(inta,intb)a=a+3;b=b+3;printf(sub:

a=%d,b=%dn,a,b);,例局部变量,main()ab,sub()ab,3,4,7,6,结果:

main:

a=3,b=4,main:

a=3,b=4,sub:

a=6,b=7,2023/8/21,第8章函数,32,全局变量定义:

在函数外定义,可为本文件所有函数共用有效范围:

从定义变量的位置开始到本源文件结束。

应尽量少使用全局变量,因为:

全局变量在程序全部执行过程中占用存储单元降低了函数的通用性、可靠性,可移植性降低程序清晰性,容易出错,若外部变量与局部变量同名,则外部变量被屏蔽,2023/8/21,第8章函数,33,inta,b;main()a=3;b=4;printf(main:

a=%d,b=%dn,a,b);sub();printf(main:

a=%d,b=%dn,a,b);sub()a=a+3;b=b+3;printf(sub:

a=%d,b=%dn,a,b);,例全部变量,main(),sub(),3,4,7,6,结果:

main:

a=3,b=4,main:

a=6,b=7,sub:

a=6,b=7,a,b,2023/8/21,第8章函数,34,inta,bmain()inta;a=3;b=4;printf(main:

a=%d,b=%dn,a,b);sub(b);printf(main:

a=%d,b=%dn,a,b);sub()a=a+3;b=b+3;printf(sub:

a=%d,b=%dn,a,b);,例局部变量与外部变量重名,main()a,sub(),3,结果:

main:

a=3,b=4,main:

a=3,b=7,sub:

a=6,b=7,4,6,b,a,7,2023/8/21,第8章函数,35,floataverage(_)inti;floatsum=array0;max=min=array0;for(i=1;imax)max=arrayi;elseif(arrayimin)min=arrayi;sum+=arrayi;return(_);,/*案例8_5.c*/利用一个函数求出10名学生的平均分、最高分、最低分。

一个函数无法用return语句带回三个值?

思想:

用return语句带回平均分,最高分和最低分求出后放在全局变量中。

main()inti;floatave,score10;/*Input*/ave=average(score,10);printf(max=%6.2fnmin=%6.2fnaverage=%6.2fn,max,min,ave);,floatmax,min;,sum/n,floatarray,intn,程序演示,2023/8/21,第8章函数,36,变量的生存期静态变量与动态变量变量的存储类型变量定义完整形式存储类型数据类型变量名;如autointa;staticfloatb;存储类型有如下四种:

autostaticregister:

存放在寄存器中,作用存取速度快一些extern:

扩展变量的作用域(如扩展到其它文件中),2023/8/21,第8章函数,37,动态变量(auto):

生存期:

从包含该变量定义的函数开始执行至函数执行结束局部变量的默认形式静态变量(static):

生存期:

从程序开始执行到程序结束全局变量的默认形式*局部变量要说明为静态变量则必须在定义中指明。

2023/8/21,第8章函数,38,main()voidincrement(void);increment();increment();increment();voidincrement(void)intx=0;x+;printf(“%dn”,x);,运行结果:

111,main()voidincrement(void);increment();increment();increment();voidincrement(void)staticintx=0;x+;printf(“%dn”,x);,运行结果:

123,例:

动态局部变量与静态局部变量,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2