C语言程序设计教程(第2版)课件第8章.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:68 大小:499KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C语言程序设计教程(第2版)课件第8章.ppt

C语言程序设计教程(第2版)课件第8章.ppt

预览

免费试读已结束,剩余 58 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第8章函数我们先看一个C程序:intmul(intx,inty){intresult;result=x*y;returnresult;}main(){inta,b,c,d,e;printf(“inputa,b,c:”);scanf(“%d%d%d”,&a,&b,&c);d=mul(a,b);/*计算ab的积*/e=mul(b,c);/*计算bc的积*/printf(“\n”);printf(“a*b=%d\n”,d);printf(“b*c=%d\n”,e);}说明:8.1函数概念的引入二、C函数与C程序结构main()/*主函数*/{print_star();/*调用print_star函数画****/print_message();/*调用print_message函数写字*/print_star();/*调用print_star函数画****/}print_star()/*定义print_star函数*/{prinf(“\n**********”);}print_message()/*定义print_message函数*/{prinf(“\nHello!”);}三、C函数的特点四、函数的分类2.从用户使用的角度看,函数有两种:8.2库函数函数名8.3函数的定义例如:intmax(intx,inty)/*求x和y二者中大者,x,y为形参*/{intz;/*函数体中变量的说明*/z=x>y?x:y;return(z);/*将z的值作为函数返回值*/}main()/*主函数*/{intm;printf(“pleaseinputnumber:\n”);scanf(“%d”,&m);sum(m);/*调用求和函数*/printf(“m=%d\n’,m}intsum(intn)/*求和函数*/{inti,result=0;for(i=1;i<=n;i++)result=result+i;printf(“result=%d\n”,result);return0;}8.4函数间的参数传递上例中形参与实参、函数名与返回值之间的关系:上面讲的形式参数表的说明形式是新版C语言表示形式(现代方式),即形式参数说明是类型和参数在一起说明。传统的形式参数说明是类型和参数分别说明。⑷实参可以是常量、变量或表达式,并且必须有确定的值;2.参数的传递定义:通过函数调用使主调函数得到一个确定的值,称为函数的返回值。说明:3.函数值的类型8.5函数的调用8.5.2函数调用方式3.函数参数8.5.3调用函数的声明一般形式:3.被调用函数是库函数的函数说明4.函数说明和函数定义的区别5.可省略被调用函数说明的三种情况⑵被调用函数定义在主调函数之前,可以不进行类型说明。⑶如果已在所有函数定义之前,在文件的开头,在函数的外部已说明了函数类型,则在各个主调函数中不必对所调用的函数再做说明。8.5.4函数的嵌套调用2.嵌套调用运用例函数嵌套的运用示例。#include<stdio.h>fun1(inta,intb){intc;a+=a;b+=b;c=fun2(a,b);/*在函数fun1中嵌套调用fun2函数*/return(c*c);}fun2(inta,intb){intc;c=a*b%3;returnc;}main(){intx=2,y=5;printf(“%d\n”,fun1(x,y));/*输出的结果为1*/}例用弦截法求方程的根⑵求连接P和Q点的线段与x轴的交点x。x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1))程序流程图:求root(x1,x2)函数流程图:main在调用函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。说明:不应出现无终止的递归调用,因此,应该给定一个限制递归次数的条件。例:用递归法求n!8.6数组与函数例:有两个数组A,B。各有10个元素,将它们逐个对应相比,如果A数组中的元素大于B数组中相应的元素数目多于B数组中的元素大于A数组中相应的元素数目,则认为A数组大于B数组,并分别统计出两个数组相应元素大于,小于和等于的个数。程序如下:main(){inta[10],b[10],i,n=0,m=0,k=0;printf(“enterarraya:\n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“\n”);printf(“enterarrayb:\n”);for(i=0;i<10;i++)scanf(“%d”,&b[i]);