C语言用函数实现模块化程序设计省公共课一等奖全国赛课获奖课件.pptx
《C语言用函数实现模块化程序设计省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《C语言用函数实现模块化程序设计省公共课一等奖全国赛课获奖课件.pptx(228页珍藏版)》请在咨信网上搜索。
1、第第7章章 用函数实现模块化程序设计用函数实现模块化程序设计7.1为何要用函数为何要用函数7.2怎样定义函数怎样定义函数7.3调用函数调用函数7.4对被调用函数申明和函数原型对被调用函数申明和函数原型7.5函数嵌套调用函数嵌套调用7.6函数递归调用函数递归调用7.7数组作为函数参数数组作为函数参数7.8局部变量和全局变量局部变量和全局变量7.9变量存放方式和生存期变量存放方式和生存期7.10关于变量申明和定义关于变量申明和定义7.11内部函数和外部函数内部函数和外部函数第1页7.1为何要用函数为何要用函数问题:问题:u假如程序功效比较多,规模比较大,把全部代码假如程序功效比较多,规模比较大,把
2、全部代码都写在都写在main函数中,就会使主函数变得庞杂、函数中,就会使主函数变得庞杂、头绪不清,阅读和维护变得困难头绪不清,阅读和维护变得困难u有时程序中要屡次实现某一功效,就需要屡次重有时程序中要屡次实现某一功效,就需要屡次重复编写实现此功效程序代码复编写实现此功效程序代码,这使程序冗长,不这使程序冗长,不精炼精炼第2页7.1为何要用函数为何要用函数处理方法:用处理方法:用模块化程序设计思绪模块化程序设计思绪u采取采取“组装组装”方法简化程序设计过程方法简化程序设计过程u事先编好一批实现各种不一样功效函数事先编好一批实现各种不一样功效函数u把它们保留在函数库中把它们保留在函数库中,需要时需
3、要时直接用直接用第3页7.1为何要用函数为何要用函数处理方法:用处理方法:用模块化程序设计思绪模块化程序设计思绪u函数就是功效函数就是功效u每一个函数用来实现一个特定功效每一个函数用来实现一个特定功效u函数名字应反应其代表功效函数名字应反应其代表功效第4页7.1为何要用函数为何要用函数在设计一个较大程序时,往往把它分为若干个程序模在设计一个较大程序时,往往把它分为若干个程序模块,每一个模块包含一个或多个函数,每个函数实现块,每一个模块包含一个或多个函数,每个函数实现一个特定功效一个特定功效程序可由一个主函数和若干个其它函数组成程序可由一个主函数和若干个其它函数组成主函数调用其它函数,其它函数也
4、能够相互调用主函数调用其它函数,其它函数也能够相互调用同一个函数能够被一个或多个函数调用任意屡次同一个函数能够被一个或多个函数调用任意屡次第5页7.1为何要用函数为何要用函数mainabcfghdeie第6页7.1为何要用函数为何要用函数能够使用库函数能够使用库函数能够使用自己编写函数能够使用自己编写函数在程序设计中要善于利用函数,能够降低在程序设计中要善于利用函数,能够降低重复编写程序段工作量,同时能够方便地重复编写程序段工作量,同时能够方便地实现模块化程序设计实现模块化程序设计第7页7.1为何要用函数为何要用函数例例7.1输出以下结果,用函数调用实现。输出以下结果,用函数调用实现。*How
5、doyoudo!*第8页7.1为何要用函数为何要用函数解题思绪:解题思绪:u在输出文字上下分别有一行在输出文字上下分别有一行“*”号,显然无须号,显然无须重复写这段代码,用一个函数重复写这段代码,用一个函数print_star来实来实现输出一行现输出一行“*”号功效。号功效。u再写一个再写一个print_message函数来输出中间一函数来输出中间一行文字信息行文字信息u用主函数分别调用这两个函数用主函数分别调用这两个函数第9页#includeintmain()voidprint_star();voidprint_message();print_star();print_message();p
6、rint_star();return0;voidprint_star()printf(“*n”);voidprint_message()printf(“Howdoyoudo!n”);输出输出16个个*输出一行文字输出一行文字第10页#includeintmain()voidprint_star();voidprint_message();print_star();print_message();print_star();return0;voidprint_star()printf(“*n”);voidprint_message()printf(“Howdoyoudo!n”);申明函数申明函数定
7、义函数定义函数第11页#includeintmain()voidprint_star();voidprint_message();print_star();print_message();print_star();return0;voidprint_star()printf(“*n”);voidprint_message()printf(“Howdoyoudo!n”);第12页说明:说明:(1)一个程序由一个或多个程序模块组一个程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。成,每一个程序模块作为一个源程序文件。对较大程序,一般不希望把全部内容全放对较大程序,一般不希望把全部内
8、容全放在一个文件中,而是将它们分别放在若干在一个文件中,而是将它们分别放在若干个源文件中,由若干个源程序文件组成一个源文件中,由若干个源程序文件组成一个个C程序。这么便于分别编写、分别编译,程序。这么便于分别编写、分别编译,提高调试效率。一个源程序文件可认为多提高调试效率。一个源程序文件可认为多个个C程序共用。程序共用。第13页说明:说明:(2)一个源程序文件由一个或多个函数以及其一个源程序文件由一个或多个函数以及其它相关内容(如预处理指令、数据申明与定义它相关内容(如预处理指令、数据申明与定义等)组成。一个源程序文件是一个编译单位,等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程
9、序文件为单位进行编译,在程序编译时是以源程序文件为单位进行编译,而不是以函数为单位进行编译。而不是以函数为单位进行编译。第14页说明:说明:(3)程序执行是从程序执行是从main函数开始,假如在函数开始,假如在main函数中调用其它函数,在调用后流程返函数中调用其它函数,在调用后流程返回到回到main函数,在函数,在main函数中结束整个程函数中结束整个程序运行。序运行。第15页说明:说明:(4)全部函数都是平行,即在定义函数时是分全部函数都是平行,即在定义函数时是分别进行,是相互独立。一个函数并不隶属于另别进行,是相互独立。一个函数并不隶属于另一个函数,即函数不能嵌套定义。函数间能够一个函数
10、,即函数不能嵌套定义。函数间能够相互调用,但不能调用相互调用,但不能调用main函数。函数。main函函数是被操作系统调用。数是被操作系统调用。第16页说明:说明:(5)从用户使用角度看,函数有两种。从用户使用角度看,函数有两种。u库函数,它是由系统提供,用户无须自己定义库函数,它是由系统提供,用户无须自己定义而直接使用它们。应该说明,不一样而直接使用它们。应该说明,不一样C语言编语言编译系统提供库函数数量和功效会有一些不一样,译系统提供库函数数量和功效会有一些不一样,当然许多基本函数是共同。当然许多基本函数是共同。u用户自己定义函数。它是用以处理用户专门需用户自己定义函数。它是用以处理用户专
11、门需要函数。要函数。第17页说明:说明:(6)从函数形式看,函数分两类。从函数形式看,函数分两类。无参函数。无参函数普通用来执行指定一组无参函数。无参函数普通用来执行指定一组操作。无参函数能够带回或不带回函数值,但操作。无参函数能够带回或不带回函数值,但普通以不带回函数值居多。普通以不带回函数值居多。有参函数。在调用函数时,主调函数在调用有参函数。在调用函数时,主调函数在调用被调用函数时,经过参数向被调用函数传递数被调用函数时,经过参数向被调用函数传递数据,普通情况下,执行被调用函数时会得到一据,普通情况下,执行被调用函数时会得到一个函数值,供主调函数使用。个函数值,供主调函数使用。第18页7
12、.2 怎样定义函数怎样定义函数7.2.1为何要定义函数为何要定义函数7.2.2定义函数方法定义函数方法第19页7.2.1 为何要定义函数为何要定义函数C语言要求,在程序中用到全部函数,语言要求,在程序中用到全部函数,必须必须“先定义,后使用先定义,后使用”指定指定函数函数名字名字、函数、函数返回值类型返回值类型、函数、函数实现实现功效功效以及以及参数个数与类型参数个数与类型,将这些,将这些信息通知编译系统。信息通知编译系统。第20页7.2.1 为何要定义函数为何要定义函数指定函数名字,方便以后按名调用指定函数名字,方便以后按名调用指定函数类型,即函数返回值类型指定函数类型,即函数返回值类型指定
13、函数参数名字和类型,方便在调用指定函数参数名字和类型,方便在调用函数时向它们传递数据函数时向它们传递数据指定函数功效。这是最主要,这是在函指定函数功效。这是最主要,这是在函数体中处理数体中处理第21页7.2.1 为何要定义函数为何要定义函数对于库函数,程序设计者只需用对于库函数,程序设计者只需用#include指令把相关头文件包含到本文指令把相关头文件包含到本文件模块中即可件模块中即可程序设计者需要在程序中自己定义想用程序设计者需要在程序中自己定义想用而库函数并没有提供函数而库函数并没有提供函数第22页7.2.2 定义函数方法定义函数方法1.定义无参函数定义无参函数定义无参函数普通形式为定义无
14、参函数普通形式为:类型名类型名函数名函数名(void)函数体函数体类型名类型名函数名函数名()函数体函数体包含申明部分包含申明部分和语句部分和语句部分包含申明部分和包含申明部分和语句部分语句部分第23页7.2.2 定义函数方法定义函数方法1.定义无参函数定义无参函数定义无参函数普通形式为定义无参函数普通形式为:类型名类型名函数名函数名(void)函数体函数体类型名类型名函数名函数名()函数体函数体指定函数指定函数值类型值类型指定函数指定函数值类型值类型第24页7.2.2 定义函数方法定义函数方法2.定义有参函数定义有参函数定义有参函数普通形式为定义有参函数普通形式为:类型名类型名函数名(形式参
15、数表列)函数名(形式参数表列)函数体函数体第25页7.2.2 定义函数方法定义函数方法3.定义空函数定义空函数定义定义空空函数普通形式为函数普通形式为:类型名类型名函数名(函数名()先用空函数占一个位置,以后先用空函数占一个位置,以后逐步逐步扩充扩充好处:好处:程序结构清楚,可读性好,以后程序结构清楚,可读性好,以后扩充新功效方便,对程序结构影响不大扩充新功效方便,对程序结构影响不大第26页7.3 调用函数调用函数7.3.1函数调用形式函数调用形式7.3.2函数调用时数据传递函数调用时数据传递7.3.3函数调用过程函数调用过程7.3.4函数返回值函数返回值第27页7.3.1函数调用形式函数调用
16、形式函数调用普通形式为:函数调用普通形式为:函数名(实参表列)函数名(实参表列)假如是调用无参函数,则假如是调用无参函数,则“实参表列实参表列”能够没有,但括号不能省略能够没有,但括号不能省略假如实参表列包含多个实参,则各参数假如实参表列包含多个实参,则各参数间用逗号隔开间用逗号隔开第28页7.3.1函数调用形式函数调用形式按函数调用在程序中出现形式和位置来按函数调用在程序中出现形式和位置来分,能够有以下分,能够有以下3种函数调用方式种函数调用方式:.函数调用语句函数调用语句把函数调用单独作为一个语句把函数调用单独作为一个语句如如printf_star();这时不要求函数带回值,只要求函数完这
17、时不要求函数带回值,只要求函数完成一定操作成一定操作第29页7.3.1函数调用形式函数调用形式按函数调用在程序中出现形式和位置来按函数调用在程序中出现形式和位置来分,能够有以下分,能够有以下3种函数调用方式种函数调用方式:.函数表示式函数表示式函数调用出现在另一个表示式中函数调用出现在另一个表示式中如如c=max(a,b);这时要求函数带回一个确定值以参加表这时要求函数带回一个确定值以参加表示式运算示式运算第30页7.3.1函数调用形式函数调用形式按函数调用在程序中出现形式和位置来按函数调用在程序中出现形式和位置来分,能够有以下分,能够有以下3种函数调用方式种函数调用方式:.函数参数函数参数函
18、数调用作为另一函数调用时实参函数调用作为另一函数调用时实参如如mmax(a,max(b,c);其中其中max(b,c)是一次函数调用,它值是一次函数调用,它值作为作为max另一次调用实参另一次调用实参第31页7.3.2 函数调用时数据传递函数调用时数据传递1.形式参数和实际参数形式参数和实际参数u在调用有参函数时,主调函数和被调用函在调用有参函数时,主调函数和被调用函数之间有数据传递关系数之间有数据传递关系u定义函数时函数名后面变量名称为定义函数时函数名后面变量名称为“形式形式参数参数”(简称(简称“形参形参”)u主调函数中调用一个函数时,函数名后面主调函数中调用一个函数时,函数名后面参数称为
19、参数称为“实际参数实际参数”(简称(简称“实参实参”)u实际参数能够是常量、变量或表示式实际参数能够是常量、变量或表示式第32页7.3.2 函数调用时数据传递函数调用时数据传递2.实参和形参间数据传递实参和形参间数据传递u在调用函数过程中,系统会把实参值传递在调用函数过程中,系统会把实参值传递给被调用函数形参给被调用函数形参u或者说,形参从实参得到一个值或者说,形参从实参得到一个值u该值在函数调用期间有效,能够参加该值在函数调用期间有效,能够参加被调被调函数中运算函数中运算第33页7.3.2 函数调用时数据传递函数调用时数据传递例例7.2输入两个整数,要求输出其中值较输入两个整数,要求输出其中
20、值较大者。要求用函数来找到大数。大者。要求用函数来找到大数。解题思绪:解题思绪:(1)函数名应是见名知意,函数名应是见名知意,故故定名为定名为max(2)因为给定两个数是整数,返回主调函数值因为给定两个数是整数,返回主调函数值(即较大数)(即较大数)应该是整型应该是整型(3)max函数应该有两个参数,方便从主函数接函数应该有两个参数,方便从主函数接收两个整数,收两个整数,所以所以参数类型应该是整型参数类型应该是整型第34页7.3.2 函数调用时数据传递函数调用时数据传递先编写先编写max函数:函数:intmax(intx,inty)intz;z=xy?x:y;return(z);第35页7.3
21、.2 函数调用时数据传递函数调用时数据传递在在max函数上面函数上面,再编写主函数再编写主函数#includeintmain()intmax(intx,inty);inta,b,c;printf(“twointegernumbers:);scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“maxis%dn”,c);return0;实参能够是常量、变量或表示式实参能够是常量、变量或表示式第36页7.3.2 函数调用时数据传递函数调用时数据传递c=max(a,b);(main函数)函数)intmax(intx,inty)(max函数)函数)intz;z=xy?x:y;r
22、eturn(z);第37页7.3.3 函数调用过程函数调用过程在定义函数中指定形参,在未出现函数调在定义函数中指定形参,在未出现函数调用时,它们并不占内存中存放单元。在发用时,它们并不占内存中存放单元。在发生函数调用时,函数生函数调用时,函数max形参被暂时分配形参被暂时分配内存单元。内存单元。2a3bxy23实参实参形参形参第38页7.3.3 函数调用过程函数调用过程调用结束,形参单元被释放调用结束,形参单元被释放实参单元仍保留并维持原值,没有改变实参单元仍保留并维持原值,没有改变假如在执行一个被调用函数时,形参值发假如在执行一个被调用函数时,形参值发生改变,不会改变主调函数实参值生改变,不
23、会改变主调函数实参值2a3bxy23实参实参形参形参第39页7.3.4.函数返回值函数返回值通常,希望经过函数调用使主调函数能得通常,希望经过函数调用使主调函数能得到一个确定值,这就是函数值到一个确定值,这就是函数值(函数返回值函数返回值)(1)函数返回值是经过函数中函数返回值是经过函数中return语句取语句取得。得。u一个函数中能够有一个以上一个函数中能够有一个以上return语句,执语句,执行到哪一个行到哪一个return语句,哪一个语句,哪一个就就起作用起作用ureturn语句后面括号能够不要语句后面括号能够不要第40页7.3.4.函数返回值函数返回值通常,希望经过函数调用使主调函数能
24、得通常,希望经过函数调用使主调函数能得到一个确定值,这就是函数值到一个确定值,这就是函数值(函数返回值函数返回值)(2)函数值类型。应该在定义函数时指定函函数值类型。应该在定义函数时指定函数值类型数值类型第41页7.3.4.函数返回值函数返回值通常,希望经过函数调用使主调函数能得通常,希望经过函数调用使主调函数能得到一个确定值,这就是函数值到一个确定值,这就是函数值(函数返回值函数返回值)(3)在定义函数时指定函数类型普通应该和在定义函数时指定函数类型普通应该和return语句中表示式类型一致语句中表示式类型一致u假如函数值类型和假如函数值类型和return语句中表示式值不语句中表示式值不一致
25、,则以函数类型为准一致,则以函数类型为准第42页7.3.4.函数返回值函数返回值例例7.3将例将例7.2稍作改动,将在稍作改动,将在max函数中定函数中定义变量义变量z改为改为float型。函数返回值类型与指型。函数返回值类型与指定函数类型不一样,分析其处理方法。定函数类型不一样,分析其处理方法。解题思绪:假如函数返回值类型与指定函解题思绪:假如函数返回值类型与指定函数类型不一样,按照赋值规则处理。数类型不一样,按照赋值规则处理。第43页#includeintmain()intmax(floatx,floaty);floata,b;intc;scanf(%f,%f,&a,&b);c=max(a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 函数 实现 模块化 程序设计 公共课 一等奖 全国 获奖 课件
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。