如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第5章函数第5章函数5.1C程序的模块结构5.1.1C程序的模块化结构概念5.1.2函数的概述【例5.1】一个简单函数调用的例子:#include<stdio.h>main(){hello();/*调用hello函数*/}hello()/*hello函数*/{printf("Hello,human\n");}5.2函数的分类从函数的作用范围进行分类外部函数:可以被任何编译单位调用的函数称为外部函数。内部函数:只能在本编译单位中被调用的函数称为内部函数。从有无返回值的角度进行分类有返回值函数:有返回值函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。无返回值函数:无返回值函数用于完成某项特定的处理任务,执行完成后不向调用者返回函数值。在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。例如,下面的定义是错误的,该程序试图在print函数定义中定义另一个函数prnline。voidprint(){putchar('*');voidprnline()/*错误*/{putchar('\n');}}5.3函数的定义和调用5.3.1函数的说明5.3.2函数的定义例:编写一个函数实现求xn。说明:5.3.3有参函数和无参函数【例5.2】定义一个函数,该函数的功能是求出三个数中的最大数。intmax(inta,intb,intc){intmax;max=a;if(a<b)max=b;if(max<c)max=c;return(max);}在C程序中,一个函数的定义可放在主函数main之前或main之后。例如下面所示的程序是将max函数放在main之前。#include<stdio.h>intmax(inta,intb,intc){intmax=a;if(a<b)max=b;if(max<c)max=c;return(max);}main(){intmax(inta,intb,intc);intz,m,n,y;printf("inputthreenumbers:\n");scanf("%d%d%d",&m,&n,&y);z=max(m,n,y);printf("Themaxis%d",z);}5.3.4函数的调用1.函数的简单调用2.调用的方式在调用系统函数时,需要用包含命令#include“头文件名.h”将定义系统函数的库文件包含在本程序中。以下两种情况可以不对被调用函数加以说明:在书写顺序上被调用函数比调用函数先出现;被调用函数的类型是整型或字符型。函数说明的位置一般在调用函数的函数体开头的数据说明语句中。例:函数说明、函数调用和函数定义之间的关系。【例5.3】编写程序求四个整数的最大值。其中四个整数由键盘输入。#include<stdio.h>intmax(inta,intb,intc);main()/*主函数*/{intx,y,z,m,n;puts("pleaseinputfournumbers:\n");scanf("%d,%d,%d,%d",&x,&y,&z,&m);n=max(x,y,z);/*求3个数的最大值*/if(m>n)/*将三个数中的最大值与第4个数进行比较*/n=m;printf("max=%d\n",n);/*输出结果*/getch();/*等待任意键*/}intmax(inta,intb,intc)/*定义求3个整数中最大值的函数*/{intmax;max=a;if(a<b)max=b;if(max<c)max=c;return(max);}5.4函数间的参数传递5.4.1函数的参数和值【例5.4】求m个自然数之和。#include<stdio.h>voidsum(intm)/*求和函数sum的定义*/{inti;for(i=m-1;i>=1;i--)m=m+i;printf("sum=%d\n",m);}main(){intm;printf("pleaseinputnumber:\n");scanf("%d",&m);sum(m);printf("m=%d\n",m);}在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。函数值为整型时,在函数定义时可以省去类型说明。函数值的类型和函数定义中说明的函数的类型应保持一致。不返回函数值的函数,可以明确定义为“空类型”,空类型的说明符为“void”。例如:voidm(intn){…}5.4.2用数组作为函数参数进行传递【例5.5】数组名作为函数参数应用举例。#include<stdio.h