C语言程序设计PPT课件第7章-函数.ppt

上传人:飞****2 文档编号:77713776 上传时间:2023-03-16 格式:PPT 页数:78 大小:2.18MB
返回 下载 相关 举报
C语言程序设计PPT课件第7章-函数.ppt_第1页
第1页 / 共78页
C语言程序设计PPT课件第7章-函数.ppt_第2页
第2页 / 共78页
点击查看更多>>
资源描述

《C语言程序设计PPT课件第7章-函数.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计PPT课件第7章-函数.ppt(78页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能第第第第7 7 7 7章章章章 函数函数函数函数2023/1/182/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能本章学习内容本章学习内容 函数定义、函数调用、函数原型、函数的参数函数定义、函数调用、函数原型、函数的参数函数定义、函数调用、函数原型、函数的参数函数定义、函数调用、函数原型、函数的参数传递与返回值传递与返回值传递与返回值传递与返回值 递归函数和函数的递归调用递归函数和函数的递归调用递归函数和函数的递归调

2、用递归函数和函数的递归调用 函数封装,函数复用,函数设计的基本原则,函数封装,函数复用,函数设计的基本原则,函数封装,函数复用,函数设计的基本原则,函数封装,函数复用,函数设计的基本原则,程序的健壮性程序的健壮性程序的健壮性程序的健壮性 变量的作用域与存储类型,全局变量、自动变变量的作用域与存储类型,全局变量、自动变变量的作用域与存储类型,全局变量、自动变变量的作用域与存储类型,全局变量、自动变量、静态变量、寄存器变量量、静态变量、寄存器变量量、静态变量、寄存器变量量、静态变量、寄存器变量 “自顶向下、逐步求精自顶向下、逐步求精自顶向下、逐步求精自顶向下、逐步求精”的模块化程序设计方的模块化程

3、序设计方的模块化程序设计方的模块化程序设计方法法法法 2023/1/183/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能数学中的函数数学中的函数自变量自变量因变量因变量函数名函数名程序设计中的函数程序设计中的函数程序设计中的函数程序设计中的函数 程序设计中的函数不局限于计算程序设计中的函数不局限于计算计算类,如打印阶乘表的程序计算类,如打印阶乘表的程序计算类,如打印阶乘表的程序计算类,如打印阶乘表的程序判断推理类,如排序、查找判断推理类,如排序、查找判断推理类,如排序、查找判断推理类,如排序、查找2023/1/184/78为

4、深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能问题的提出问题的提出 读多少行的程序能让你不头疼?读多少行的程序能让你不头疼?读多少行的程序能让你不头疼?读多少行的程序能让你不头疼?假如系统提供的函数假如系统提供的函数假如系统提供的函数假如系统提供的函数printf()printf()由由由由1010行代码替行代码替行代码替行代码替换,那么你编过的程序会成什么样子?换,那么你编过的程序会成什么样子?换,那么你编过的程序会成什么样子?换,那么你编过的程序会成什么样子?实际上一个实际上一个实际上一个实际上一个printf()printf(

5、)有上千行代码有上千行代码有上千行代码有上千行代码 main()main()中能放多少行代码?中能放多少行代码?中能放多少行代码?中能放多少行代码?如果所有代码都在如果所有代码都在如果所有代码都在如果所有代码都在main()main()中,怎么团队合作中,怎么团队合作中,怎么团队合作中,怎么团队合作?如果代码都在一个文件中,怎么团队合作?如果代码都在一个文件中,怎么团队合作?如果代码都在一个文件中,怎么团队合作?如果代码都在一个文件中,怎么团队合作?2023/1/185/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能问题的提出

6、问题的提出 三国演义三国演义中有这样一段描写:中有这样一段描写:懿问曰:懿问曰:懿问曰:懿问曰:“孔明寝食及事之烦简若何?孔明寝食及事之烦简若何?孔明寝食及事之烦简若何?孔明寝食及事之烦简若何?”使者使者使者使者曰:曰:曰:曰:“丞相夙兴夜寐,罚二十以上皆亲览焉。丞相夙兴夜寐,罚二十以上皆亲览焉。丞相夙兴夜寐,罚二十以上皆亲览焉。丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,日不过数升。所啖之食,日不过数升。所啖之食,日不过数升。所啖之食,日不过数升。”懿顾谓诸将曰:懿顾谓诸将曰:懿顾谓诸将曰:懿顾谓诸将曰:“孔明食少事烦,其能久乎?孔明食少事烦,其能久乎?孔明食少事烦,其能久乎?孔明食少事烦,

7、其能久乎?”此话音落不久,诸葛亮果然病故于五丈原。此话音落不久,诸葛亮果然病故于五丈原。此话音落不久,诸葛亮果然病故于五丈原。此话音落不久,诸葛亮果然病故于五丈原。“事无巨细事无巨细”,“事必躬亲事必躬亲”管理学的观点是极其排斥这种做法的,认为工管理学的观点是极其排斥这种做法的,认为工管理学的观点是极其排斥这种做法的,认为工管理学的观点是极其排斥这种做法的,认为工作必须分工,各司其职作必须分工,各司其职作必须分工,各司其职作必须分工,各司其职其中的思想,在程序设计里也适用其中的思想,在程序设计里也适用其中的思想,在程序设计里也适用其中的思想,在程序设计里也适用 2023/1/186/78为深入

8、学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.1分而治之与信息隐藏分而治之与信息隐藏 分而治之(分而治之(Divide and Conquer,Wirth,1971)函数把较大的任务分解成若干个较小的任务,并函数把较大的任务分解成若干个较小的任务,并函数把较大的任务分解成若干个较小的任务,并函数把较大的任务分解成若干个较小的任务,并提炼出公用任务提炼出公用任务提炼出公用任务提炼出公用任务 信息隐藏(信息隐藏(Information Hiding,Parnas,1972)设计得当的函数可把具体操作细节对外界隐藏起设计得当的函数可把具体

9、操作细节对外界隐藏起设计得当的函数可把具体操作细节对外界隐藏起设计得当的函数可把具体操作细节对外界隐藏起来,从而使整个程序结构清楚来,从而使整个程序结构清楚来,从而使整个程序结构清楚来,从而使整个程序结构清楚使用函数时,不用知道函数内部是如何运作的,使用函数时,不用知道函数内部是如何运作的,使用函数时,不用知道函数内部是如何运作的,使用函数时,不用知道函数内部是如何运作的,只按照我们的需要和它的参数形式调用它即可只按照我们的需要和它的参数形式调用它即可只按照我们的需要和它的参数形式调用它即可只按照我们的需要和它的参数形式调用它即可2023/1/187/78为深入学习习近平新时代中国特色社会主义

10、思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能程序设计的艺术程序设计的艺术 算法设计艺术算法设计艺术程序的灵魂程序的灵魂程序的灵魂程序的灵魂Donald E.Knuth,Donald E.Knuth,Donald E.Knuth,Donald E.Knuth,“The Art of Computer Programming”,“The Art of Computer Programming”,“The Art of Computer Programming”,“The Art of Computer Programming”,清华大学出版社清华大学出版社清华大学出版社

11、清华大学出版社(英),国防工业出版社(中)(英),国防工业出版社(中)(英),国防工业出版社(中)(英),国防工业出版社(中)结构设计艺术结构设计艺术程序的肉体程序的肉体程序的肉体程序的肉体模块化(模块化(模块化(模块化(Parnas,1972Parnas,1972Parnas,1972Parnas,1972)结构化(结构化(结构化(结构化(StructuralStructural)面向对象(面向对象(面向对象(面向对象(Object-OrientedObject-Oriented)面向组件(面向组件(面向组件(面向组件(Component-OrientedComponent-Oriented

12、)面向智能体(面向智能体(面向智能体(面向智能体(Agent-OrientedAgent-Oriented)2023/1/188/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能 函数是函数是C语言中模块化编程的最小单位语言中模块化编程的最小单位可以把每个函数看作一个模块(可以把每个函数看作一个模块(可以把每个函数看作一个模块(可以把每个函数看作一个模块(Module Module)如把编程比做制造一台机器,函数就好比其如把编程比做制造一台机器,函数就好比其零部件零部件可将这些可将这些可将这些可将这些“零部件零部件零部件零部件”

13、单独设计、调试、测试好,单独设计、调试、测试好,单独设计、调试、测试好,单独设计、调试、测试好,用时拿出来装配,再总体调试。用时拿出来装配,再总体调试。用时拿出来装配,再总体调试。用时拿出来装配,再总体调试。这些这些这些这些“零部件零部件零部件零部件”可以是自己设计制造可以是自己设计制造可以是自己设计制造可以是自己设计制造/别人设计别人设计别人设计别人设计制造制造制造制造/现成的标准产品现成的标准产品现成的标准产品现成的标准产品7.2 7.2 函数(函数(函数(函数(FunctionFunction)的定义)的定义)的定义)的定义MoeCurlyLarry2023/1/189/78为深入学习习

14、近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.2 函数(函数(Function)的定义)的定义 若干相关的函数可以合并成一个若干相关的函数可以合并成一个若干相关的函数可以合并成一个若干相关的函数可以合并成一个“模块模块模块模块”一个一个一个一个C C C C程序程序程序程序由一个或多个源程序文件组成由一个或多个源程序文件组成由一个或多个源程序文件组成由一个或多个源程序文件组成 一个源程序文件一个源程序文件一个源程序文件一个源程序文件由一个或多个函数组成由一个或多个函数组成由一个或多个函数组成由一个或多个函数组成2023/1/1810/78

15、为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.2.1函数的分类函数的分类 函数生来都是平等的,互相独立的,没有函数生来都是平等的,互相独立的,没有高低贵贱和从属之分高低贵贱和从属之分main()main()稍微特殊一点点稍微特殊一点点稍微特殊一点点稍微特殊一点点C C程序的执行程序的执行程序的执行程序的执行从从从从mainmain函数开始函数开始函数开始函数开始调用其他函数后流程回到调用其他函数后流程回到调用其他函数后流程回到调用其他函数后流程回到mainmain函数函数函数函数在在在在mainmain函数中结束整个程序运行函

16、数中结束整个程序运行函数中结束整个程序运行函数中结束整个程序运行2023/1/1811/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.2.1函数的分类函数的分类 标准库函数标准库函数ANSI/ISO CANSI/ISO C定义的标准库函数定义的标准库函数定义的标准库函数定义的标准库函数 符合标准的符合标准的符合标准的符合标准的C C语言编译器必须提供这些函数语言编译器必须提供这些函数语言编译器必须提供这些函数语言编译器必须提供这些函数 函数的行为也要符合函数的行为也要符合函数的行为也要符合函数的行为也要符合ANSI/ISO

17、 CANSI/ISO C的定义的定义的定义的定义第三方库函数第三方库函数第三方库函数第三方库函数 由其他厂商自行开发的由其他厂商自行开发的由其他厂商自行开发的由其他厂商自行开发的C C语言函数库语言函数库语言函数库语言函数库 不在标准范围内,能扩充不在标准范围内,能扩充不在标准范围内,能扩充不在标准范围内,能扩充C C语言的功能(图形、网络、数据语言的功能(图形、网络、数据语言的功能(图形、网络、数据语言的功能(图形、网络、数据库等)库等)库等)库等)自定义函数自定义函数自己定义的函数自己定义的函数自己定义的函数自己定义的函数 包装后,也可成为函数库,供别人使用包装后,也可成为函数库,供别人使

18、用包装后,也可成为函数库,供别人使用包装后,也可成为函数库,供别人使用2023/1/1812/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.2.2函数的定义函数的定义(Function Definition)类型类型 函数名函数名(类型类型 参数参数1,1,类型类型 参数参数2,)2,)声明语句序列声明语句序列声明语句序列声明语句序列 可执行语句序列可执行语句序列可执行语句序列可执行语句序列 returnreturn 表达式表达式表达式表达式;返回值返回值类型类型函数名函数名标识符,标识符,说明运算规则说明运算规则参数表参

19、数表相当于相当于运算的操作数运算的操作数返回返回运算的结果运算的结果函数出口函数出口2023/1/1813/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能类型类型 函数名函数名(类型类型 参数参数1,1,类型类型 参数参数2,)2,)声明语句序列声明语句序列声明语句序列声明语句序列 可执行语句序列可执行语句序列可执行语句序列可执行语句序列 returnreturn 表达式表达式表达式表达式;函数体的定界符函数体的定界符参数表里的变量(叫形式参数,参数表里的变量(叫形式参数,Formal Parameter)也是内部变量)也是内

20、部变量函数体函数体7.2.27.2.2函数的定义函数的定义函数的定义函数的定义(Function DefinitionFunction Definition)2023/1/1814/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能void 函数名函数名(void)声明语句序列声明语句序列声明语句序列声明语句序列 可执行语句序列可执行语句序列可执行语句序列可执行语句序列 returnreturn;函数无返回值,用函数无返回值,用void定义返回值类型定义返回值类型用用void定义参数,定义参数,表示没有参数表示没有参数return

21、语句后无语句后无需任何表达式需任何表达式7.2.27.2.2函数的定义函数的定义函数的定义函数的定义(Function DefinitionFunction Definition)2023/1/1815/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能【例例7.1a】计算整数计算整数n的阶乘的阶乘n!/*/*函数功能:函数功能:函数功能:函数功能:用迭代法计算用迭代法计算用迭代法计算用迭代法计算n!n!函数入口参数:函数入口参数:函数入口参数:函数入口参数:整型变量整型变量整型变量整型变量n n表示阶乘的阶数表示阶乘的阶数表示阶

22、乘的阶数表示阶乘的阶数 函数返回值:函数返回值:函数返回值:函数返回值:返回返回返回返回n!n!的值的值的值的值*/long Fact(int n)/*long Fact(int n)/*函数定义函数定义函数定义函数定义*/int i;int i;long result=1;long result=1;for(i=2;i=n;i+)for(i=2;i=n;i+)result*=i;result*=i;return result;return result;返回值类型返回值类型函数名说明函数名说明函数的功能函数的功能返回值作为函数返回值作为函数调用表达式的值调用表达式的值形参表,函形参表,函数入

23、口数入口函数内部可以定义函数内部可以定义只能自己使用的变只能自己使用的变量,称内部变量量,称内部变量2023/1/1816/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能 函数名函数名(表达式表达式1,1,表达式表达式2,);2,);实际参数实际参数实际参数实际参数(Actual Argument)(Actual Argument)(Actual Argument)(Actual Argument)函数调用函数调用函数调用函数调用(Founction Call)(Founction Call)(Founction Call)(

24、Founction Call)时提供的表达式时提供的表达式时提供的表达式时提供的表达式 有返回值时有返回值时有返回值时有返回值时放到一个数值表达式中放到一个数值表达式中放到一个数值表达式中放到一个数值表达式中 c=max(a,b);c=max(a,b);作为另一个函数调用的参数作为另一个函数调用的参数作为另一个函数调用的参数作为另一个函数调用的参数 c=max(max(a,b),c);c=max(max(a,b),c);printf(printf(%dn%dn,max(a,b);,max(a,b);无返回值时无返回值时无返回值时无返回值时函数调用表达式函数调用表达式函数调用表达式函数调用表达式

25、 display(a,b);display(a,b);返回值返回值返回值返回值 =函数名函数名函数名函数名(实参表列实参表列实参表列实参表列););););函数名函数名函数名函数名(实参表列实参表列实参表列实参表列););););7.37.3向函数传递值和从函数返回值向函数传递值和从函数返回值向函数传递值和从函数返回值向函数传递值和从函数返回值2023/1/1817/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能函数的参数传递函数的参数传递 实参和形参必须匹配实参和形参必须匹配实参和形参必须匹配实参和形参必须匹配数目一致,类型

26、一一对应(否则会发生自动类型转换)数目一致,类型一一对应(否则会发生自动类型转换)数目一致,类型一一对应(否则会发生自动类型转换)数目一致,类型一一对应(否则会发生自动类型转换)【例例7.1】2023/1/1818/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.3.2函数原型函数原型(Function Prototype)在调用函数前先声明其返回值类型、函数名和参数在调用函数前先声明其返回值类型、函数名和参数在调用函数前先声明其返回值类型、函数名和参数在调用函数前先声明其返回值类型、函数名和参数 函数原型有助于编译器对函数

27、参数类型的匹配检查函数原型有助于编译器对函数参数类型的匹配检查函数原型有助于编译器对函数参数类型的匹配检查函数原型有助于编译器对函数参数类型的匹配检查 末尾有一个分号,末尾有一个分号,声明时不要省略形声明时不要省略形参和返回值的类型参和返回值的类型【例例7.1】2023/1/1819/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能函数定义与函数声明的区别函数定义与函数声明的区别 函数定义函数定义指函数功能的确立指函数功能的确立指函数功能的确立指函数功能的确立指定函数名、函数类型、形参及类型、函数体等指定函数名、函数类型、形参及

28、类型、函数体等指定函数名、函数类型、形参及类型、函数体等指定函数名、函数类型、形参及类型、函数体等是完整独立的单位是完整独立的单位是完整独立的单位是完整独立的单位 函数声明函数声明是对函数名、返回值类型、形参类型的说明是对函数名、返回值类型、形参类型的说明是对函数名、返回值类型、形参类型的说明是对函数名、返回值类型、形参类型的说明不包括函数体不包括函数体不包括函数体不包括函数体是一条语句,以分号结束,只起一个声明作用是一条语句,以分号结束,只起一个声明作用是一条语句,以分号结束,只起一个声明作用是一条语句,以分号结束,只起一个声明作用2023/1/1820/78为深入学习习近平新时代中国特色社

29、会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.3.3函数封装函数封装与防御性程序设计与防御性程序设计 函数封装函数封装函数封装函数封装(EncapsulationEncapsulation)使得外界对函数的影响使得外界对函数的影响使得外界对函数的影响使得外界对函数的影响仅限于入口参数,而函数对外界的影响仅限于一个仅限于入口参数,而函数对外界的影响仅限于一个仅限于入口参数,而函数对外界的影响仅限于一个仅限于入口参数,而函数对外界的影响仅限于一个返回值和数组、指针类型的参数返回值和数组、指针类型的参数返回值和数组、指针类型的参数返回值和数组、指针类型的参数 【例

30、例7.1】Why?传入负数实参传入负数实参会怎样?会怎样?2023/1/1821/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能防御性程序设计防御性程序设计(Defensive Programming)如何使函数具有遇到不正确使用或非法数据输入时如何使函数具有遇到不正确使用或非法数据输入时如何使函数具有遇到不正确使用或非法数据输入时如何使函数具有遇到不正确使用或非法数据输入时避免出错的能力,增强程序的健壮性?避免出错的能力,增强程序的健壮性?避免出错的能力,增强程序的健壮性?避免出错的能力,增强程序的健壮性?在函数的入口处,检

31、查输入参数的合法性在函数的入口处,检查输入参数的合法性在函数的入口处,检查输入参数的合法性在函数的入口处,检查输入参数的合法性 【例例例例7.27.27.27.2】计算整数计算整数计算整数计算整数n n的阶乘的阶乘的阶乘的阶乘n n!2023/1/1822/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能 如何使函数具有遇到不正确使用或非法数据输入时如何使函数具有遇到不正确使用或非法数据输入时如何使函数具有遇到不正确使用或非法数据输入时如何使函数具有遇到不正确使用或非法数据输入时避免出错的能力,增强程序的健壮性?避免出错的能力,

32、增强程序的健壮性?避免出错的能力,增强程序的健壮性?避免出错的能力,增强程序的健壮性?在函数的入口处,检查输入参数的合法性在函数的入口处,检查输入参数的合法性在函数的入口处,检查输入参数的合法性在函数的入口处,检查输入参数的合法性 防御性程序设计防御性程序设计(Defensive Programming)【例例例例7.27.27.27.2】计算整数计算整数计算整数计算整数n n的阶乘的阶乘的阶乘的阶乘n n!2023/1/1823/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能 主函数如何修改?主函数如何修改?增加对函数返回值

33、的检验增加对函数返回值的检验增加对函数返回值的检验增加对函数返回值的检验 防御性程序设计防御性程序设计(Defensive Programming)【例例例例7.37.37.37.3】计算整数计算整数计算整数计算整数n n的阶乘的阶乘的阶乘的阶乘n n!2023/1/1824/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能 传入负数的实参时传入负数的实参时Fact()会返回会返回-1吗?吗?存在死代码的原因何在?存在死代码的原因何在?存在死代码的原因何在?存在死代码的原因何在?防御性程序设计防御性程序设计(Defensive

34、Programming)【例例例例7.37.37.37.3】计算整数计算整数计算整数计算整数n n的阶乘的阶乘的阶乘的阶乘n n!2023/1/1825/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能 如何修改程序去除冗余代码?如何修改程序去除冗余代码?如何保证不会传入负数实参?如何保证不会传入负数实参?防御性程序设计防御性程序设计(Defensive Programming)【例例例例7.27.27.27.2】计算整数计算整数计算整数计算整数n n的阶乘的阶乘的阶乘的阶乘n n!2023/1/1826/78为深入学习习近平新

35、时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能【例例7.4】编写计算组合数的程序编写计算组合数的程序函数复用函数复用2023/1/1827/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能 使用断言(使用断言(assertassert)防止某些参数获得非法)防止某些参数获得非法值,在程序调试和测试时发现错误值,在程序调试和测试时发现错误 【例例7.2】计算整数计算整数n的阶乘的阶乘n!2023/1/1828/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育

36、大会精神,充分发挥中小学图书室育人功能#include#include voidvoid assert(assert(intint expression);expression);expressionexpression为真,无声无息;为假,中断程序为真,无声无息;为假,中断程序为真,无声无息;为假,中断程序为真,无声无息;为假,中断程序 断言仅用于调试程序,不能作为程序的功能断言仅用于调试程序,不能作为程序的功能断言仅用于调试程序,不能作为程序的功能断言仅用于调试程序,不能作为程序的功能 【例例7.2】计算整数计算整数n的阶乘的阶乘n!2023/1/1829/78为深入学习习近平新时代中国特

37、色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能 用来测试某种不可能发生的状况确实不会发生用来测试某种不可能发生的状况确实不会发生用来测试某种不可能发生的状况确实不会发生用来测试某种不可能发生的状况确实不会发生DebugDebug版有效版有效版有效版有效ReleaseRelease版失效版失效版失效版失效 考虑使用断言的几种情况考虑使用断言的几种情况考虑使用断言的几种情况考虑使用断言的几种情况检查函数入口参数的合法性检查函数入口参数的合法性检查函数入口参数的合法性检查函数入口参数的合法性在一段计算的结束处检验计算结果是否在合理的范围在一段计算的结束处检验计算结

38、果是否在合理的范围在一段计算的结束处检验计算结果是否在合理的范围在一段计算的结束处检验计算结果是否在合理的范围内内内内检查程序中的各种假设的正确性检查程序中的各种假设的正确性检查程序中的各种假设的正确性检查程序中的各种假设的正确性证实或测试某种不可能发生的状况确实不会发生证实或测试某种不可能发生的状况确实不会发生证实或测试某种不可能发生的状况确实不会发生证实或测试某种不可能发生的状况确实不会发生 断言(断言(Assert)2023/1/1830/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.3.4函数设计的基本原则函数设计

39、的基本原则 信息隐藏信息隐藏1函数规模函数规模要小要小2函数功能函数功能要单一要单一3函数接口函数接口定义定义要要清楚清楚入口参数有效性检查入口参数有效性检查敏感操作前的检查敏感操作前的检查调用成功与否的检查调用成功与否的检查2023/1/1831/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能函数的嵌套调用函数的嵌套调用函数的嵌套调用函数的嵌套调用 嵌套调用嵌套调用嵌套调用嵌套调用在调用一个函数的过程中,又调用另一个函数在调用一个函数的过程中,又调用另一个函数在调用一个函数的过程中,又调用另一个函数在调用一个函数的过程中,又

40、调用另一个函数 C C语言规定函数不能嵌套定义,但可以嵌套调用语言规定函数不能嵌套定义,但可以嵌套调用语言规定函数不能嵌套定义,但可以嵌套调用语言规定函数不能嵌套定义,但可以嵌套调用函数是相互平行的函数是相互平行的函数是相互平行的函数是相互平行的 main()a();a 函数函数b();return;b函数函数return;2023/1/1832/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.4 递归函数递归函数(Recursive Function)7.4.17.4.1递归问题的提出递归问题的提出 经典的汉诺塔(经典的汉

41、诺塔(Hanoi)问题)问题理解理解理解理解递归递归递归递归的概念的概念的概念的概念有人曾计算过,当有人曾计算过,当有人曾计算过,当有人曾计算过,当n n=64=64时,所需移动的次数时,所需移动的次数时,所需移动的次数时,所需移动的次数为为为为1844674407370955161518446744073709551615,即,即,即,即18441844亿亿次亿亿次亿亿次亿亿次若按每次耗时若按每次耗时若按每次耗时若按每次耗时1 1微秒计算,则完成微秒计算,则完成微秒计算,则完成微秒计算,则完成6464个圆盘的个圆盘的个圆盘的个圆盘的移动将需要移动将需要移动将需要移动将需要6060万年万年万年

42、万年2023/1/1833/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题 ABAB,ACAC,BCBC,ABAB,CACA,CBCB,ABABA AB BC Cn n=3=32023/1/1834/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题A AB BC C ABAB,ACAC,BCBC,ABAB,CACA,CBCB,ABABn n=3=32023/1/1835/78为深入学习习近平新时

43、代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题A AB BC C ABAB,ACAC,BCBC,ABAB,CACA,CBCB,ABABn n=3=32023/1/1836/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题A AB BC C ABAB,ACAC,BCBC,ABAB,CACA,CBCB,ABABn n=3=32023/1/1837/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育

44、大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题A AB BC Cn更大些更大些怎么办?怎么办?ABAB,ACAC,BCBC,ABAB,CACA,CBCB,ABABn n=3=32023/1/1838/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题 第第第第1 1 1 1步:将问题简化步:将问题简化步:将问题简化步:将问题简化假设假设假设假设A A杆上只有杆上只有杆上只有杆上只有2 2个圆盘,即汉诺塔有个圆盘,即汉诺塔有个圆盘,即汉诺塔有个圆盘,即汉诺塔有2 2层,层,

45、层,层,n n2 2将将将将1 1号圆盘从号圆盘从号圆盘从号圆盘从A A移到移到移到移到C C将将将将2 2号圆盘从号圆盘从号圆盘从号圆盘从A A移到移到移到移到B B将将将将1 1号圆盘从号圆盘从号圆盘从号圆盘从C C移到移到移到移到B B A AB BC C2023/1/1839/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题 第第第第2 2步:对于一个有步:对于一个有步:对于一个有步:对于一个有 n n(n n11)个圆盘的汉诺塔,将)个圆盘的汉诺塔,将)个圆盘的汉诺塔,将)个圆盘的汉诺

46、塔,将n n个圆盘分为两部分:上面个圆盘分为两部分:上面个圆盘分为两部分:上面个圆盘分为两部分:上面 n n-1 1 个圆盘和最下面的个圆盘和最下面的个圆盘和最下面的个圆盘和最下面的n n号圆盘。将号圆盘。将号圆盘。将号圆盘。将“上面上面上面上面n n-1 1个圆盘个圆盘个圆盘个圆盘”看成一个整体看成一个整体看成一个整体看成一个整体将将将将n n-1 1个圆盘从个圆盘从个圆盘从个圆盘从A A移到移到移到移到C C将将将将n n号圆盘从号圆盘从号圆盘从号圆盘从A A移到移到移到移到B B将将将将n n-1 1个圆盘从个圆盘从个圆盘从个圆盘从C C移到移到移到移到B BAC CB2023/1/18

47、40/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题 设计设计设计设计2 2 2 2个函数:个函数:个函数:个函数:将将将将n n个圆盘借助个圆盘借助个圆盘借助个圆盘借助C C从从从从A A移到移到移到移到B B 将一个圆盘从将一个圆盘从将一个圆盘从将一个圆盘从A A移到移到移到移到B B AC CB将将将将n n-1 1个圆盘从个圆盘从个圆盘从个圆盘从A A移到移到移到移到C C将将将将n n号圆盘从号圆盘从号圆盘从号圆盘从A A移到移到移到移到B B将将将将n n-1 1个圆盘从个圆盘从个

48、圆盘从个圆盘从C C移到移到移到移到B B2023/1/1841/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题 递归方法的基本原理递归方法的基本原理将复杂问题逐步化简,最终转化为一个最简单将复杂问题逐步化简,最终转化为一个最简单将复杂问题逐步化简,最终转化为一个最简单将复杂问题逐步化简,最终转化为一个最简单的问题的问题的问题的问题最简单问题的解决就意味着整个问题的解决最简单问题的解决就意味着整个问题的解决最简单问题的解决就意味着整个问题的解决最简单问题的解决就意味着整个问题的解决 2023/

49、1/1842/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能汉诺塔汉诺塔(Hanoi)问题问题2023/1/1843/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.4.2递归函数递归函数longlong factfact(intint n)n)ifif(n 0)(n 0)returnreturn-1;-1;else ifelse if(n=0|n=1)(n=0|n=1)returnreturn 1;1;elseelse returnreturn n*n*f

50、actfact(n-1);(n-1);【例例7.67.6】计算计算n!=n*(n-1)*(n-2)*1 函数直接或间接调用函数直接或间接调用自己,称为递归调用自己,称为递归调用(Recursive Call)2023/1/1844/78为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能7.4.2递归函数递归函数unsignedunsigned longlong factfact(unsignedunsigned intint n)n)ifif(n=0|n=1)(n=0|n=1)returnreturn 1;1;elseelse ret

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com