资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2023/9/21,1,Program Design in C Language,Page,WUCC,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第十讲,Begin:,第七章 函数,函数概述,函数的分类与定义,函数调用的一般形式,函数的参数,函数的返回值,数组作为函数参数,第十讲Begin:第七章 函数 函数概述,7.1,函数概述,function,函数,也可以说是:功能,就是具有一定功能的代码段,到现在为止,我们都是用主函数中的代码完成一定的功能,函数,7.1 函数概述function 函数到现在为止,我们都,7.1,函数概述,C,语言规定:可以把程序中的不同的功能写成不同的函数,即:,C,语言程序可以由不同功能的函数组成,函数,7.1 函数概述C语言规定:可以把程序中的不同的功能写成不同,7.1,函数概述,函数组成程序的例子,int main(),printstar();,print_message();,printstar();,return 0;,#include“stdio.h”,void printstar(),printf(“*n”);,void print_message(),printf(“How do you do?n”);,7.1 函数概述函数组成程序的例子#include“st,p,rintstar,和,print_message,就是两个函数,7.1,函数概述,print_message,函数的功能输出一行信息,How do you do?,p,rintstar,的功能是输出一排 ”*”,main,是主函数,首先执行,main,printstar和print_message就是两个函数,7.1,函数概述,一个,C,程序由一个或多个函数组成,但至少有一个主函数(,main,函数);,main,函数是程序执行的入口,可置于程序的任何位置。,C,语言语法规范:,7.1 函数概述 一个C程序由一个或多个函数组,函数的分类:,7.1,函数概述,从函数间的调用关系;主调函数,被调函数,从函数间数据传送的关系分为:有参函数、无参函数、有返回值函数、无返回值函数;,(接下来详细讲),从用户的观点分为:,C,编译系统提供的标准库函数和用户自定义函数;,函数的分类:7.1 函数概述从函数间的调用关系;主调函数,被,类型符,函数名称(),数据说明语句,可执行语句,7.2.2,无参函数的定义,函数头,函数体,7.2,函数定义的一般形式,printstar(),和,print_message(),都是无参函数,7.2.2 无参函数的定义函数头函数体7.2,类型符,函数名称(类型 形参,1,,,),数据说明语句,可执行语句,7.2.3,有参函数的定义,函数头,函数体,7.2,函数定义的一般形式,7.2.3 有参函数的定义函数头函数体7.2,函数定义的一般形式举例:,float sum(float x,float y),float z,;,z=x+y,;,return z,;,7.2,函数定义的一般形式,函数定义的一般形式举例:7.2 函数定义的一般形式,函数定义的一般形式说明,:,(,1,),float,sum(,float,x,float,y),float z,;,z=x+y,;,return z,;,类型说明符:,指明函数的类型,函数的类型是指函数的返回值的类型,函数返回值所具有的数据类型的种类与变量相同。,7.2,函数定义的一般形式,省略时则默认为,int,型。若明确表示函数,不带回值,,可以用,void,作类型符,称,无类型,或称,空类型,。,函数定义的一般形式说明:(1)类型说明符:7.2 函数定义,float,sum(,float,x,float,y,),float z,;,z=x+y,;,return z,;,函数名:,通常是一个标识符,在一个程序中除了主函数外其余函数的名字可以任意取,但应有意义。,(),函数标志。,7.2,函数定义的一般形式,float sum(float x,float y,float sum(,float,x,float y,),float z,;,z=x+y;,return z,;,参数表(形参表):,函数定义时的参数称为形式参数,形式参数彼此间用逗号分隔。,形式参数省略时称无参函数,但此时函数名后的圆括号不能省。,形参说明是用来指明各个形式参数的类型,它随形参的存在而存在。,7.2,函数定义的一般形式,float sum(float x,float y,float sum(float x,float y),float z,;,z=x+y;return z,;,函数体:,函数中最外层一对花括弧,括起来的内容,它由若干个数据说明语句和可执行语句组成,决定函数要实现的功能、完成的任务。,函数体内若无任何语句时,为空函数。,7.2,函数定义的一般形式,float sum(float x,float y),格式二:,类型符,函数名称(),7.2.4,空函数的定义,函数头,函数体,7.2,函数定义的一般形式,void dummy(),格式二:7.2.4 空函数的定义函数头函数体7.2,实参,(实际参数)是函数调用时调用函数传送给被调用函数参数的实际值。,实参可以是常量、变量和表达式,实参必须有确定的值。,例如:,fabs(-2);,putchar(c);,sqrt(,(,x*x+2,)*,(y+z);,7.3.1,形式参数与实际参数,7.3,函数的参数和函数的值,实参(实际参数)是函数调用时调用函数传送给被调用函数参数的实,形参,(形式参数)是函数定义时,参数表中的参数。形式参数只能是变量,数组等。在函数定义时,参数表中的形参并没有具体的值,系统也不为其分配存储单元。,7.3,函数的参数和函数的值,例如:,int max(int x,,,int y),int z;,z=xy?x:y;,return z;,形参(形式参数)是函数定义时,参数表中的参数。形式参数只能是,例,形参和实参的运用,7.3,函数的参数和函数的值,int max(int x,,,int y),int z;,z=xy?x:y;,return z;,void main(),int a,b,c;,scanf(“%d%d”,c=max(a,b);,printf(“max is%dn”,c);,例 形参和实参的运用7.3 函数的参数和函数的值,7.3.2,函数的返回值:,当被调用函数在完成一定的功能后,可以将处理的结果返回到调用函数。,7.3,函数的参数和函数的值,7.3.2 函数的返回值:7.3 函数的参数和函数的值,7.3.2,函数的返回值,方式:,return,语句,作用:将表达式的值传给调用函数,并把控制权转向调用函数实现函数的返回。,格式:,return (,表达式,),;,7.3,函数的参数和函数的值,7.3.2函数的返回值7.3 函数的参数和函数的值,对于不需要提供返回值的函数可以直接用,void,作为函数类型定义,以表明此函数返回值为”无类型”或”空类型”。,void,printchar()printf(Wuhan Universityn);,main(),printchar();,void,函数,7.3,函数的参数和函数的值,对于不需要提供返回值的函数可以直接用void作为函数类型,例,编写自定义函数计算,:,分析:,确定形参:求,c,必须知道,f,的大小,设形参为,temp,。,确定函数:函数的返回值即为,c,的值,设为实型。,程序:,float ftoc(,float,temp),float c;c=(5./9.)*(temp 32);return c;,7.3,函数的参数和函数的值,例 编写自定义函数计算:分析:程序:float ftoc(,例,编写一个自定义函数求,n,!,分析:,确定形参:,求,n,!必须知道,n,的大小,设形参为,n,。,确定函数:,函数的返回值即为,n,!的值,设为实型。,程序:,float factorial,(,int n,),float x,y;,for,(,x=y=1.0;x=n;x+,),y*=x;,return y;,7.3,函数的参数和函数的值,例 编写一个自定义函数求 n!分析:程序:float fa,7.4,函数,的,调用,7.4.1,函数调用的一般形式是:,函数名(实参表列),说明:,实参与形参的个数相等、类型相同、顺序一致,呈一一对应的关系。,实参的求值顺序不确定,与所用系统有关。,实参应有确定的值。,7.4 函数的调用7.4.1函数调用的一般形式是:说明:,函数调用时,需要注意的几点:,C,语言参数传递时,一般采用传值方式,把各个实参值分别顺序对应传给形参。被调函数执行中形参值的变化不会影响主调函数中实参变量的值。,函数调用也是一种表达式,其值就是函数的返回值。,7.4,函数,的,调用,函数调用时,需要注意的几点:7.4 函数的调用,自定义函数:,float factorial (int n,),float x,y;,for(x=y=1.0;x=n;x+,),y*=x;,return y;,例,调用自定义函数求,n,!,调用:,void main(),int n;,float f;,printf(“Please input n:”);,scanf(“%d”,f=,factorial(n),;,printf(“n!=%f”,f);,7.4,函数,的,调用,自定义函数:例 调用自定义函数求 n!调用:7.4 函数,调用方式,1,)函数语句:,例,printf(”);,2,)函数表达式:,例,c=2*pow(3.5,,,6);,3,)函数参数:,例,c=2*pow(pow(3.5,,,6),,,6);,例,printf,(”,%fn”,,,pow(3.5,,,6);,7.4,函数,的,调用,调用方式7.4 函数的调用,例:,说出下列程序的运行结果,fun2(int a,int b),int c;c=a*b%3;return c;,fun1(int a,int b),int c;a+=a;b+=b;,c=fun2(a,b);return c*c;,main(),int x=11,y=19;,printf(%dn,fun1(x,y);,程序运行结果:,4,7.4,函数,的,调用,例:说出下列程序的运行结果fun2(int a,int,#include,func(int a,int b),int c;,c=a+b;,return c;,main(),int x=6,y=7,z=8,r;,r=func(x-,y+,x+y),z-);,printf(“r=%dn”,r);,程序运行结果:,r=21,例:,说出下列程序的运行结果,7.4,函数,的,调用,#include 程序运行结果:例:说出下,函数原型:在定义或调用函数前,对该函数进行声明。,作用:将函数名、函数类型及形参个数、类型、顺序等通知编译系统,当函数被调用时,可对实参、形参的类型、个数匹配情况进行检查。,格式:,类型符 函数名(参数类型,1,,,);,或:,类型符 函数名(类型符 形参,1,,,);,7.4.3,对被调用函数的说明,函数原型:在定义或调用函数前,对该函数进行声明。7.4.3,7.4.3,对被调用函数的说明,自定义函数:,float factorial,(,int n,),float x,y;,for(x=y=1.0;x=n;x+,),y*=x;,return y;,例,调用自定义函数求,n,!,float factorial,(,int n,),;,/*,函数原型声明*,/,void main(),int n;,float f;,printf(“Please input n:”);,scanf(“%d”,f=,factorial,(n),;,printf(“n!
展开阅读全文