《C语言教程函数.pptx》由会员分享,可在线阅读,更多相关《C语言教程函数.pptx(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、16.1 概述#include void main()void printstar();/*对printstar函数声明*/void print_message();/*对print_message函数声明*/i=printstar();*调用printstar函数*print_message();/*调用print_message函数*/printstar();*调用printstar函数*/先看一个函数调用的简单例子第1页/共26页2void printstar()*定义printstar函数*printf(*n);void print_message()*定义print_message函
2、数*printf(How do you do!n);运行情况如下:*How do you do!*第2页/共26页3几点说明:一个程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对于较大的程序,通常将程序内容分别放在若干个源文件中,再由若干源程序文件组成一个C程序。这样便于分别编写、分别编译,提高调试效率。一个源程序文件可以为多个C程序公用。一个源程序文件由一个或多个函数以及其他有关内容(如命令行、数据定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函数为单位进行编译的。第3页/共26页4程序的执行是从main函数开始的,如果在m
3、ain函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。main函数是系统调用的。第4页/共26页5从用户使用的角度看,函数有两种:1.标准函数,即库函数。这是由系统提供的,定义在不同的头文件中,用户不必自己定义这些函数,可以直接使用它们。用户使用时,必须用#include把相应的头文件包含到程序中来。2.用户自己定义的函数。用以解决用户的专门需要。从函数的形式看,函数分两类:1.无参函数。无参函数一般用
4、来执行指定的一组操作。在调用无参函数时,主调函数不向被调用函数传递数据。2.有参函数。主调函数在调用被调用函数时,通过参数向被调用函数传递数据。第5页/共26页66.2 函数的定义方式1 函数返回值类型名 函数名(参数类型说明及参数列表)局部变量说明;语句序列;方式2 函数返回值类型名 函数名(参数列表)参数类型说明 局部变量说明;语句序列;如:int max(a,b)int a,b;如:int max(int a,int b)第6页/共26页7 例 定义符号函数sign。int sign(int x)/*函数首部*/int y;/*函数体局部变量*/y=x0?1:(x=0?0:-1);ret
5、urn y;/*返回函数值*/注意:C语言函数分为两大部分:函数的说明部分函数体部分第7页/共26页8函数各部分作用1.函数的说明部分 函数说明部分说明函数的类型,函数名,参数表及参数类型。(1)函数的类型说明函数的类型即函数的返回值类型。若函数不提供返回值,则可定义其类型为:void。例如:void putdata(int a)省略函数类型名时,C语言默认其为int型。(2)函数名 函数名又称函数标识符。命名遵循C语言标识符的规定;函数名要反映函数完成的功能。第8页/共26页9(3)参数表参数表写在函数名后的()内,由一个或多个变量标识符及类型标识符组成。参数表中的变量称为形式参数,简称形参
6、。若函数没有形参,则称为无参函数,其后“()”不能省略。参数必须指定类型。形参的类型说明:int max(int a,int b)第9页/共26页102.函数体函数体以“”开始,以“”结束,包括变量定义和执行语句序列。函数所完成的工作由函数体中一段程序实现。函数的返回值用返回语句return返回,形式:return(表达式);或 return 表达式;或 return;如果函数的类型与return语句的表达式的类型不一致时,则以函数的类型为准。返回时自动进行数据转换。第10页/共26页11例 定义函数power(x,n),求x的n次方。函数定义如下:float power(float x,in
7、t n)int i;float t=1;for(i=1;ib)?a:b;y=yc?y:c;printf(max=%dn,y);void main()int x,y,z,m;scanf(%d,%d,%d,&x,&y,&z);max(x,y,z);/*采用函数语句形式调用函数max*/第14页/共26页15int max(int a,int b)int y;y=(ab)?a:b;return y;void main()int x,y,z,m;scanf(%d,%d,%d,&x,&y,&z);m=max(x,y);m=max(m,z);/*表达式调用形式*/printf(“max=%dn”,m);m
8、=max(x,y);printf(max=%dn,max(m,z);/*函数参数调用形式*/第15页/共26页166.3.2 函数声明函数定义在主调函数之后,需要进行主调函数中加入函数声明语句。类型名 函数名(类型1 变量1,类型2 变量2,类型n 变量n);说明:函数声明应与该函数定义的函数类型与名称、形参的个数、类型、次序相一致。函数声明中的形参名可省略,其形式为:类型名 函数名(类型1,类型2,类型n);类型名 函数名();当函数定义在主调函数之前,即先定义,后调用。则调用时函数声明可以省略。第16页/共26页17 例 编写计算x的n次乘方的程序。#include stdio.h”voi
9、d main()float x,y;int n;float power(float x,int n);scanf(%f,%d,&x,&n);y=power(x,n);printf(“%8.2f”,y);float power(float x,int n)int i;float t=1;for(i=1;iy)t=x;else t=y;return t;第19页/共26页202)关于形式参数和实际参数说明如下:形式参数在函数被调用时才被分配内存。当函数执行完毕返回时,形式参数占用的内存空间便被释放。实参可以是变量、常量和表达式。如:y=power(x,4);y=power(x,i*2);但实参必须
10、有确定的值。3)形参和实参的类型必须相容。4)形参和实参之间的关系是:单向的值的传递101055axby1)形参y之间值的传递如图所示。第20页/共26页216.3.4 函数的嵌套调用调用一个函数的过程中又调用了另一个函数,这种调用称为函数的嵌套调用。函数1调用函数2函数2调用函数3函数3(1)(9)(8)(2)(3)(5)(4)(7)(6)第21页/共26页226.3.5 递归调用函数调用函数本身,称为函数的递归调用。递归调用形式如下:2)间接递归 void a().b();.void b().a();.1)直接递归void a().a();.第22页/共26页23用递归算法计算n!讨论:采
11、用递归的方法计算。n!的递归定义形式的:编程:if(初始条件)表达式;else 递推表达式;1 n=0;n!=n*(n-1)!n0第23页/共26页24例程序:#include int fac(unsigned n)int f;if (n=0)f=1;/*递归结束条件*/else f=n*fac(n-1);return f;void main()int y;int n;scanf(“%d”,&n);y=fac(n);printf(“%d!=%dn”,n,y);第24页/共26页25分析:当程序输入3时y=fac(3)3*fac(2)2*fac(1)1*fac(0)1第25页/共26页26感谢您的观看!第26页/共26页