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

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

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

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

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

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

第7章函数7.1函数定义与调用7.1.1函数定义(2)有参函数普通形式函数类型函数名(数据类型参数[,数据类型参数2……]){说明语句部分;可执行语句部分;}有参函数比无参函数多了一个参数表。调用有参函数时,调用函数将赋予这些参数实际值。为了与调用函数提供实际参数区分开,将函数定义中参数表称为形式参数表,简称形参表。[案例7.1]定义一个函数,用于求两个数中大数。/*案例代码文件名:AL7_1.C*//*功效:定义一个求较大数函数并在主函数中调用*/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();/*使程序暂停,按任一键继续*/}[程序演示]2.说明(1)函数定义不允许嵌套。在C语言中,全部函数(包含主函数main())都是平行。一个函数定义,能够放在程序中任意位置,主函数main()之前或之后。但在一个函数函数体内,不能再定义另一个函数,即不能嵌套定义。(2)空函数──既无参数、函数体又为空函数。其普通形式为:[函数类型]函数名(void){}(3)在老版本C语言中,参数类型说明允许放在函数说明部分第2行单独指定。7.1.2函数返回值与函数类型2.函数类型在定义函数时,对函数类型说明,应与return语句中、返回值表示式类型一致。假如不一致,则以函数类型为准。假如缺省函数类型,则系统一律按整型处理。良好程序设计习惯:为了使程序含有良好可读性并降低犯错,凡不要求返回值函数都应定义为空类型;即使函数类型为整型,也不使用系统缺省处理。7.1.3对被调用函数说明和函数原型7.1.4函数调用说明:(1)调用函数时,函数名称必须与含有该功效自定义函数名称完全一致。(2)实参在类型上按次序与形参,必须一一对应和匹配。假如类型不匹配,C编译程序将按赋值兼容规则进行转换。假如实参和形参类型不赋值兼容,通常并不给出犯错信息,且程序依然继续执行,只是得不到正确结果。(3)假如实参表中包含多个参数,对实参求值次序随系统而异。有系统按自左向右次序求实参值,有系统则相反。TurboC和MSC是按自右向左次序进行。7.1.5函数形参加实参voidmain(){voids(intn);/*说明函数*/intn=100;/*定义实参n,并初始化*/s(n);/*调用函数*/printf("n_s=%d\n",n);/*输出调用后实参值,便于进行比较*/getch();}/**/voids(intn){inti;printf("n_x=%d\n",n);/*输出改变前形参值*/for(i=n-1;i>=1;i--)n=n+i;/*改变形参值*/printf("n_x=%d\n",n);/*输出改变后形参值*/}[程序演示]说明:(1)实参能够是常量、变量、表示式、函数等。不论实参是何种类型量,在进行函数调用时,它们都必须含有确定值,方便把这些值传送给形参。所以,应预先用赋值、输入等方法,使实参取得确定值。(2)形参变量只有在被调用时,才分配内存单元;调用结束时,即刻释放所分配内存单元。所以,形参只有在该函数内有效。调用结束,返回调用函数后,则不能再使用该形参变量。(3)实参对形参数据传送是单向,即只能把实参值传送给形参,而不能把形参值反向地传送给实参。(4)实参和形参占用不一样内存单元,即使同名也互不影响。7.2函数嵌套调用和递归调用[案例7.4]计算s=1k+2k+3k+……+Nk/*案例代码文件名:AL7_4.C*//*功效:函数嵌套调用*/#defineK4#defineN5longf1(intn,intk)/*计算nk次方*/{longpower=n;inti;for(i=1;i<k;i++)power*=n;returnpower;}longf2(intn,intk)/*计算1到nk次方之累加和*/{longsum=0;inti;for(i=1;i<=n;i++)sum+=f1(i,k);returnsum;}main(){printf("Sumof%dpowersofintegersfrom1to%d=",K,N);printf("%d\n",f2(N,K));getch();}[程序演示]7.2.2函数递归调用函数递归调用是指,一个函数在它函数体内,直接或间接地调用它本身。C语言允许函数递归调用。在递归调用中,调用函数又是被调用函数,执行递归函数将重复调用其本身。每调用一次就进入新一层。为了预防递归