预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共75页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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

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

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

第6章函数6.1函数及其定义6.1.2函数定义依据函数是否需要参数,可将函数分为无参函数和有参函数两种。有参函数:主调函数与被调函数之间有数据传递关系。(如字符串处理函数)无参函数:普通用来执行一组操作,能够不带回函数值。(如max函数)(1)无参函数普通形式函数类型函数名(){说明语句部分;可执行语句部分;}例:前面函数调用例子中func1和func2函数。注意:在旧标准中,函数能够缺省参数表。但在新标准中,函数不可缺省参数表;假如不需要参数,则用“void”表示,主函数main()例外。(2)有参函数普通形式形式1:函数类型函数名(数据类型参数1,数据类型参数2……){说明语句部分;可执行语句部分;}例:doubleadd(doublex,doubley){doublez;z=x+y;return(z);}这是一个用户自定义求和函数。x和y是形参,经过return(z)来实现向调用它函数返回add函数结果。形式2:函数类型函数名(参数1,参数2……){数据类型参数1;数据类型参数2;…….说明语句部分;可执行语句部分;}例:doubleadd(x,y){doublex,y;doublez;z=x+y;return(z);}有参函数比无参函数多了一个参数表。调用有参函数时,调用函数将赋予这些参数实际值。为了与调用函数提供实际参数区分开,将函数定义中参数表称为形式参数表,简称形参表。4.形式参数表中形参是用户自定义变量。形参个数多于一个,中间用逗号隔开,假如函数没有形参,则称为“无参函数”,定义无参函数小括号不能省略。形式参数作用是实现主调函数和被调函数联络,通常将函数所处理数据,影响函数功效原因作为形式参数。5.函数体包含函数申明后一对花括号中。在没有特殊说明时,函数体内定义变量均为局部变量,他们只在本函数执行时有定义,所以,不一样函数中局部变量能够同名,互不干扰。即使函数体中没有语句,花括号一样不能省。没有说明语句和执行语句函数称为空函数。例:voidfunc1();{}程序设计中第一阶段只设计最基本模块,其它一些次要功效则在以后需要时补上.在程序编写开始阶段,能够在未来准备扩充功效地方写上一个空函数,表示先占一个位置,以后用一个编好程序代替它,这么程序结构清楚,以后扩充新功效方便,对程序结构影响不大.[案例7.1]定义一个函数,用于求两个数中大数。/*功效:定义一个求较大数函数并在主函数中调用*/intmax(intn1,intn2)/*定义一个函数max()*/{return(n1>n2?n1:n2);}main(){intmax(intn1,intn2);/*函数说明*/intnum1,num2;printf("inputtwonumbers:\n");scanf("%d%d",&num1,&num2);printf("max=%d\n",max(num1,num2));getch();/*使程序暂停,按任一键继续*/}[程序演示]6.2函数参数6.2.2实参加形参之间单向数值传递当常量,变量或不表示式作为实参时,对应形参应是同类型变量。当发生函数调用时,形参被分配内存空间,实参将值传递给形参,这个过程是单向值传递。形参取得值之后,便与实参脱离关系,所以,形参改变不会影响到实参。例:从键盘输入两个整数,交换次序后输出voidswap(intx,inty){intz;z=x;x=y;y=z;}main(){inta=4,b=8;swap(a,b);printf(“a=%2d,b=%2d”,a,b);}运行结果:a=4,b=8函数swap中,x和y为形参,类型为int型。主调函数中用swap(a,b);来调用该函数,a,b为实参,类型一样int型,实参加形参个数类型都一致.函数调用时,采取是单向值传递.形参x取a值4,y取b值8.x与y发生交换,形参发生交换却对实参a,b不起作用,函数调用结束后,回到main函数,a,b值仍为4和8.ababxyxy例:数组元素作为函数参数两个数组array1,array2,各有8个元素,将他们逐一相加,结果依然保留在array1中,程序以下:main(){intarray1[8],array2[8];int8;printf(“enterarray1:\n”);for(i=0;i<8;i++)scanf(“%d”,&array1[i]);printf(“enterarray2:\n”);for(i=0;i<8;i++)scanf(“%d”,&array2[i]);for(i=0;i<8;i++)array1[i]=sum(array1[i],array2[i])/*调用sum函数*/for(i=0;i<8;i++)printf(“result:array1[%d]=%d:\n”,i,ar