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

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

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

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

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

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

第9章函数内容概述教学目标在进行大型程序设计时,采取模块化程序设计是一个十分有效办法。C语言在支持模块化程序设计方面含有很强优势。C语言将函数作为程序设计基本单元,每个函数用于描述一个相对独立基本操作,函数之间经过参数传递数据。采取模块化程序设计思想可降低程序设计复杂度,提升程序可维护性。求解较小问题算法和程序称作“功效模块”,各功效模块能够先单独设计,然后将求解全部子问题模块组合成求解原问题程序。例输入两个数输出其中一个大数(1)判断闰年。(2)求某月天数。/*函数month_days调用函数leap判断year是否为闰年*/intmonth_days(intyear,intmonth){intd;switch(month){case1:case3:case5:case7:case8:case10:case12:d=31;break;case2:d=leap(year)?29:28;break;/*若为闰年,d赋值29,不然赋值28*/default:d=30;}returnd;}(3)求天数和。/*函数days调用函数month_days,求各月份对应天数*/intdays(intyear,intmonth,intday){inti,ds=0;for(i=1;i<month;i++)ds=ds+month_days(year,i);ds=ds+day;returnds;}注意:在完整程序中,前三个函数应放在main()函数之前。在C语言中可从不一样角度对函数分类:有返回值函数有返回值函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。无返回值函数无返回值函数用于完成某项特定处理任务,执行完成后不向调用者返回函数值。1.在C语言中,全部函数都是平等,即函数不能嵌套定义。不过函数之间允许相互调用,即允许嵌套调用。2.main()函数是程序执行起点,也是程序执行终点。3.一个C源程序有且仅有一个主函数main()。{说明部分;执行部分;}例调用函数在屏幕上打印一行“*”#include"stdio.h"voidprint(intn)/*一个形参*/{inti;for(i=0;i<n;i++)printf("*");}main(){intn;scanf("%d",&n);print(n);/*一个实参*/}#include"stdio.h"voidprint(intn,charch)/*两个形参*/{inti;for(i=0;i<n;i++)printf("%c",ch);}main(){intn;charch;scanf("%d%c",&n,&ch);print(n,ch);/*两个实参*/}9.3.1形式参数与实际参数【例9.1】求1+2+3+…+n值。阅读以下程序:函数main函数形参和实参含有以下特点:C函数计算结果经过return语句返回,return语句表示形式以下:return表示式;或return(表示式);对函数值有以下一些说明:一个函数一旦被定义,就可在程序其它函数中使用它,这个过程称为函数调用。函数表示式函数作为表示式中一项出现在表示式中,以函数返回值参加表示式运算。这种方式要求函数是有返回值。如sum=s(n);函数语句函数调用普通形式加上分号即组成函数语句。如printf();scanf();print();函数实参函数作为另一个函数调用实际参数出现。如printf(“sum=%d”,s(n));9.4.2实参到形参数据传递方式9.4.3函数申明和函数原型假如被调函数返回值是整型或字符型时,能够不对被调函数作说明而直接调用。这时系统将自对被调函数返回值按整型处理。当被调函数函数定义出现在主调函数之前时,在主调函数中也能够不对被调函数再作说明而直接调用。如在全部函数定义之前,在函数外预先说明了各个函数类型,则在以后各主调函数中,可不对被调函数作说明。对库函数调用不需要再作说明,但必须把该函数头文件用include命令包含在源文件前部。例编程求两个整数阶乘之和。longfac(intn)/*定义函数fac,其功效是求n!*/{inti;longr=1;for(i=1;i<=n;i++)r=r*i;returnr;}所谓函数嵌套调用是指一个函数调用另一函数过程中又出现对其它函数调用。【例9.2】计算s=22!+32!#include"stdio.h"longf2(intq){longc=1;inti;for(i=1;i<=q;i++)c=c*i;returnc;}longf1(intp){intk;longr;k=p*p;r=f2(k);returnr;}9.6函数递归调用递归不是一个数据结构,而是一个有效算法设计阶乘递归定义:longintfact(intn){intx;longinty;if(n=