大学一年级C语言教学课件《C语言程序设计》第9章 函数

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《C语言程序设计》函数目标要求课后作业讲课提纲讲课内容退出模块设计掌握函数、函数值(函数返回值)以及函数调用等的基本概念。掌握函数的定义和调用方法。掌握函数参数的传递方法。掌握变量的作用范围。目标要求目标要求课后作业讲课提纲讲课内容退出概述C的库函数简介函数的定义调用和声明函数的参数和返回值函数的嵌套调用和递归调用变量的作用域变量的存储类别典型实例剖析小结讲课提纲模块设计目标要求课后作业讲课提纲讲课内容退出模块设计(),!!()!mnmnmnmnnm从键盘输入两个正整数与求的值。C目标要求课后作业讲课提纲讲课内容退出模块化程序设计基本思想:将一个大的程序按功能分割成一些小模块开发方法:自上向下,逐步分解,分而治之概述模块设计目标要求课后作业讲课提纲讲课内容退出模块化的优点模块各司其职每个模块只负责一件事情,它可以更专心便于进行单个模块的设计、开发、调试、测试和维护等工作一个模块一个模块地完成,最后再将它们集成开发人员各司其职按模块分配任务,职责明确并行开发,缩短开发时间分而治之(Wirth,1971)信息隐藏(Parnas,1972)目标要求课后作业讲课提纲讲课内容退出函数(function)和模块(module)函数是C语言中模块化编程的最小单位可以把每个函数看作一个模块若干相关的函数可以合并作一个“模块”main()printf()scanf()power()putchar()getchar()main()stdio:printf()scanf()putchar()getchar()mymdl:power()目标要求课后作业讲课提纲讲课内容退出分而治之函数把较大的任务分解成若干个较小的任务,并提炼出公用任务复用程序员可以在其他函数的基础上构造程序,而不需要从头做起信息隐藏设计得当的函数可以把具体操作细节对程序中不需要知道它们的那些部分隐藏掉,从而使整个程序结构清楚用函数解决问题目标要求课后作业讲课提纲讲课内容退出概述源程序文件1预编译命令说明部分执行部分函数1函数n源程序文件i源程序文件nC程序C程序结构模块设计目标要求课后作业讲课提纲讲课内容退出函数是程序的基本组成单位必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数与函数之间是平行的独立的,不能嵌套定义,可以嵌套调用函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数的参数形式看无参函数;有参函数模块设计目标要求课后作业讲课提纲讲课内容退出使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件C的库函数简介模块设计目标要求课后作业讲课提纲讲课内容退出函数定义的一般形式函数类型函数名(数据类型参数1,数据类型参数2,…){函数体;[return表达式;]}合法标识符模块设计参数表没有加void函数出口返回值目标要求课后作业讲课提纲讲课内容退出函数定义的一般形式例有参函数intmax(intx,inty){intz;z=xy?x:y;return(z);}例无参函数printstar(){printf(“**********\n”);}或printstar(void){printf(“**********\n”);}例空函数dummy(){}模块设计函数定义不允许嵌套目标要求课后作业讲课提纲讲课内容退出返回语句:形式:return(表达式);或return表达式;或return;功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数函数的返回值模块设计目标要求课后作业讲课提纲讲课内容退出函数是这样的一种运算:函数名说明运算规则参数是运算的操作数返回值是运算的结果当函数执行到return语句或}时,函数的运算停止。程序返回到调用它的地方继续执行函数可以有多个return,但最好只有一个且是最后一行用void定义返回值类型函数没有运算结果,没有返回值return语句之后不需要任何表达式用void定义参数,表示没有参数在定义函数时,对函数类型的说明,应与return语句中返回值表达式的类型一致。如果不一致,则以函数类型为准。系统将缺省函数类型按整型(int)来处理函数定义(definition)目标要求课后作业讲课提纲讲课内容退出例函数返回值类型转换函数的返回值main(){intmax(float,float);floata,b;intc;scanf(%f,%f,&a,&b);c=max(a,b);printf(Maxis%d\n,c);}intmax(floatx,floaty){floatz;z=xy?x:y;return(z);}模块设计目标要求课后作业讲课提纲讲课内容退出模块设计(),!!()!mnmnmnmnnm从键盘输入两个正整数与求的值。C目标要求课后作业讲课提纲讲课内容退出模块设计#includestdio.hintfac(intk)/*计算阶乘值的函数*/{ints,i;s=1;for(i=1;i=k;i=i+1)s=s*i;return(s);}main(){intm,n;intfac(int);scanf(%d,%d,&m,&n);if(m=n)printf(%d\n,fac(m)/(fac(n)*fac(m-n)));elseprintf(mn!\n);}目标要求课后作业讲课提纲讲课内容退出模块设计函数声明:一般形式:函数类型函数名(形参类型[形参名],…)作用:告诉编译系统函数类型、参数个数及类型,以便检验在主调函数之前,需对被调函数进行声明以下情况可以不用函数声明(1)当被调用函数的函数定义出现在主调函数之前时。(2)如果在所有函数定义之前,在函数外部(例如文件或程序开始处)预先对各个函数进行了声明,则在主调函数中可以省去对被调用函数的说明。函数调用的一般形式目标要求课后作业讲课提纲讲课内容退出调用形式:函数名(实参表);说明:无参函数调用时,圆括号不可省略实参与形参个数相等,类型一致,按顺序一一对应函数定义与函数调用的区别:函数的定义中有“类型标识符”而函数的调用中没有。函数的定义中的参数为“形参”,而函数的调用中参数为“实参”。函数的定义后没有“;”,而函数的调用中有“;”(函数作为实参外)。函数调用的一般形式模块设计目标要求课后作业讲课提纲讲课内容退出函数调用方式函数语句:例printf(IloveChina!\n);函数表达式:例c=max(a,b);函数参数:例printf(%d\n,max(a,b));putchar(getchar());函数调用的一般形式模块设计目标要求课后作业讲课提纲讲课内容退出调用函数时,对被调函数的要求:必须是已存在的函数库函数:#include*.h用户自定义函数:函数类型声明对被调用函数的声明模块设计目标要求课后作业讲课提纲讲课内容退出对被调用函数的声明main(){floatadd(float,float);/*函数原型声明*/floata,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sumis%f,c);}floatadd(floatx,floaty)/*函数首部*/{floatz;/*函数体*/z=x+y;return(z);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}main(){floata,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sumis%f,c);}被调函数出现在主调函数之前,不必函数说明模块设计目标要求课后作业讲课提纲讲课内容退出形式参数:在定义函数时函数名后面圆括号中的变量名,简称形参。实际参数:在主调用函数中调用一个函数时,函数名后面圆括号中的表达式,简称实参。。例比较两个数并输出大者intmax(intx,inty){intz;z=xy?x:y;return(z);}main(){inta,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(Maxis%d,c);}实参形参c=max(a,b);(main函数)形式参数和实际参数(max函数)intmax(intx,inty){intz;z=xy?x:y;return(z);}目标要求课后作业讲课提纲讲课内容退出说明:形参必须指定类型形参与实参类型一致,个数相同,才能正确地进行数据传递若形参与实参类型不一致,自动按形参类型转换——函数调用转换形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放实参对形参的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。实参和形参占用不同的内存单元,即使同名也互不影响。形式参数和实际参数目标要求课后作业讲课提纲讲课内容退出例计算x的立方形式参数和实际参数#includestdio.hfloatcube(floatx){return(x*x*x);}voidmain(){floata,product;printf(Pleaseinputvalueofa:);scanf(%f,&a);product=cube(a);printf(”Cubeof%.4fis%.4f\n,a,product);}aproduct××××1.21.21.728x模块设计目标要求课后作业讲课提纲讲课内容退出模块设计函数调用的执行过程main()函数{······}调用function()函数保存:返回地址当前现场function()函数①②③④⑤⑥⑦结束恢复:主调函数现场返回地址返回目标要求课后作业讲课提纲讲课内容退出C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。函数的嵌套调用模块设计目标要求课后作业讲课提纲讲课内容退出模块设计目标要求课后作业讲课提纲讲课内容退出例求三个数中最大数和最小数的差值main(){intdif(intx,inty,intz);intmax(intx,inty,intz);intmin(intx,inty,intz);inta,b,c,d;scanf(%d%d%d,&a,&b,&c);d=dif(a,b,c);printf(Max-Min=%d\n,d);}intdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}intmax(intx,inty,intz){intr;r=xy?x:y;return(rz?r:z);}intmin(intx,inty,intz){intr;r=xy?x:y;return(rz?r:z);}函数的嵌套调用目标要求课后作业讲课提纲讲课内容退出例求三个数中最大数和最小数的差值main()调用函数dif输出结束dif函数max函数调用函数max调用函数minmin函数main(){……d=dif(a,b,c);……}intdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}intmax(intx,inty,intz){……}intmin(intx,inty,intz){……}目标要求课后作业讲课提纲讲课内容退出定义:函数直接或间接的调用自身叫函数的递归调用函数的递归调用intf(intx){inty,

1 / 60
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功