收藏 分销(赏)

函数(0005)省公共课一等奖全国赛课获奖课件.pptx

上传人:精**** 文档编号:4155508 上传时间:2024-08-05 格式:PPTX 页数:95 大小:1.08MB
下载 相关 举报
函数(0005)省公共课一等奖全国赛课获奖课件.pptx_第1页
第1页 / 共95页
函数(0005)省公共课一等奖全国赛课获奖课件.pptx_第2页
第2页 / 共95页
函数(0005)省公共课一等奖全国赛课获奖课件.pptx_第3页
第3页 / 共95页
函数(0005)省公共课一等奖全国赛课获奖课件.pptx_第4页
第4页 / 共95页
函数(0005)省公共课一等奖全国赛课获奖课件.pptx_第5页
第5页 / 共95页
点击查看更多>>
资源描述

1、程序改错程序改错程序改错程序改错第1页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓2程序改错程序改错是个大悲大喜过程,一天之内能够让人在悲伤低谷和喜悦是个大悲大喜过程,一天之内能够让人在悲伤低谷和喜悦巅峰之间跌宕起伏。巅峰之间跌宕起伏。假如改过了成千上万个错误,假如改过了成千上万个错误,改错很像侦破案件,有坏事发生了,而仅有信息是它确实改错很像侦破案件,有坏事发生了,而仅有信息是它确实发生了。发生了。必须从结果出发,逆向思索必须从结果出发,逆向思索第2页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓3程序改错

2、程序改错改错第一步是找犯错误根源,然后对症下药改错第一步是找犯错误根源,然后对症下药寻找错误根源过程称为调试。寻找错误根源过程称为调试。第3页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓4程序改错程序改错难点在于:难点在于:症状和根源可能相隔很远症状和根源可能相隔很远有些人问阿凡提:有些人问阿凡提:“我肚子疼,该用什么药?我肚子疼,该用什么药?”症状可能在另一个错误被纠正后暂时消失症状可能在另一个错误被纠正后暂时消失症状并不是某个程序错误引发,如误差累积症状并不是某个程序错误引发,如误差累积症状可能时隐时现,如症状可能时隐时现,如“内存泄露内存泄露”

3、极难产生完全一样输入条件,难以恢复极难产生完全一样输入条件,难以恢复“错误现场错误现场”第4页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓5程序中常见犯错原因程序中常见犯错原因编译错误编译错误指在编译过程中发觉错误,通常属于语法错误,即编写语句不指在编译过程中发觉错误,通常属于语法错误,即编写语句不符合符合C语言语法规则。语言语法规则。Undefined symbol xxx 标识符标识符xxx未定义未定义Expression syntax error 表示式语法错误表示式语法错误Too few parameter in call 函数调用时实参少于

4、函数形参函数调用时实参少于函数形参第5页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓6程序中常见犯错原因程序中常见犯错原因运行错误运行错误指在程序运行时发生错误指在程序运行时发生错误往往是因为语义上错误造成,即语句即使合乎语法,但要求计往往是因为语义上错误造成,即语句即使合乎语法,但要求计算机去做不该做或做不到事情。算机去做不该做或做不到事情。比如当用比如当用0做除数时,运行后将显示做除数时,运行后将显示“Division by zero”错误提错误提醒信息,并马上返回编辑屏幕。查看运行结果时,可在醒信息,并马上返回编辑屏幕。查看运行结果时,可在Us

5、er screen(用户屏幕)上看到给出错误提醒信息。(用户屏幕)上看到给出错误提醒信息。第6页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓7逻辑错误逻辑错误程序中有逻辑错时,不影响程序运行并得到运行结果,只是程序中有逻辑错时,不影响程序运行并得到运行结果,只是运行结果不正确。比较隐蔽,犯错后不易查找。运行结果不正确。比较隐蔽,犯错后不易查找。累加求和运算时,累加和变量忘记了赋初值;累加求和运算时,累加和变量忘记了赋初值;累乘运算时,累乘变量初值赋值为累乘运算时,累乘变量初值赋值为0 0;函数申明时返回值数据类型与实际返回数据类型不一致,造函数申明时

6、返回值数据类型与实际返回数据类型不一致,造成自动类型转换成自动类型转换数组下标越界(即超出了定义范围);数组下标越界(即超出了定义范围);程序中存在死循环;程序中存在死循环;程序中常见犯错原因程序中常见犯错原因第7页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓8程序改错程序改错在程序设计语言发展中,一个主要努力方向就是想经在程序设计语言发展中,一个主要努力方向就是想经过语言特征设计帮助防止错误过语言特征设计帮助防止错误以下标范围检验,受限制指针甚至完全取消指针,内存回收,以下标范围检验,受限制指针甚至完全取消指针,内存回收,强类型检验强类型检验但没有

7、任何语言能预防我们犯错误,每个为预防一些但没有任何语言能预防我们犯错误,每个为预防一些问题而设置语言特征都会带给它本身额外代价问题而设置语言特征都会带给它本身额外代价作为程序员应知道所用语言中有潜在危险和引发错误作为程序员应知道所用语言中有潜在危险和引发错误倾向那些语言特征倾向那些语言特征如如gotogoto语句,全局变量,无限制指针,自动类型转换语句,全局变量,无限制指针,自动类型转换世界上最好调试工具是那些有经验人世界上最好调试工具是那些有经验人第8页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓9调试基本方法调试基本方法“粗分细找粗分细找”定位大

8、致范围:归纳、推理、二分、排除定位大致范围:归纳、推理、二分、排除缩减输入数据缩减输入数据设法找到能造成失败最小输入设法找到能造成失败最小输入 采取注释方法切掉一些代码采取注释方法切掉一些代码降低相关代码区域,调试无误后再将它们打开注释,即采降低相关代码区域,调试无误后再将它们打开注释,即采取分而治之策略将问题局部化取分而治之策略将问题局部化 利用调试工具利用调试工具逐条语句跟踪逐条语句跟踪插入打印语句插入打印语句观看屏幕输出结果观看屏幕输出结果第9页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓10错误案例错误案例关系运算符关系运算符=错写成错写成

9、赋值运算符赋值运算符=if(a=b)printf(yes);/*运行结果错误运行结果错误*/Warning:Possibly incorrect assignment in function mainif(a=b)printf(yes);/*正确正确*/=表示赋值操作表示赋值操作=表示比较是否相等操作表示比较是否相等操作第10页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓11错误案例错误案例while后面有分号后面有分号while(n 100);n+;循环体为空语句,造成死循环循环体为空语句,造成死循环for后表示式后表示式2省略省略for(n=1;

10、n+)/*死循环死循环*/第11页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓12错误案例错误案例判断字符是大写字符或者小写字符判断字符是大写字符或者小写字符(a=ch=z)|(A=ch=a&ch=A&ch=Z)/*正确正确*/判断字符是数字字符判断字符是数字字符0=ch=0&ch=9/*正确正确*/第12页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓13错误案例错误案例数据类型由高向低赋值时,进行类型转换后造成信息丢失数据类型由高向低赋值时,进行类型转换后造成信息丢失double a,b;int sum;

11、sum=a+b;TC下编译,不提醒任何错误下编译,不提醒任何错误VC下编译下编译warning C4244:=:conversion from double to int,possible loss of data第13页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓14错误案例错误案例函数申明时返回值类型与实际返回数据类型不一致,造成自函数申明时返回值类型与实际返回数据类型不一致,造成自动类型转换动类型转换double Add(double a,double b)int sum;return sum;不提醒任何错误不提醒任何错误int Add(dou

12、ble a,double b)double sum;return sum;warning C4244:return:conversion from double to int,possible loss of data第14页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓15错误案例错误案例数组下标越界数组下标越界int a10,i,sum;for(i=1;i=10;i+)sum=sum+ai;不提醒任何错误,或者提醒不提醒任何错误,或者提醒Written、read之类信息之类信息第15页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得

13、愈深,愈能找到知识的精髓16关于代码格调问题关于代码格调问题缩进缩进(indent)(indent)确保代码整齐、层次清楚主要伎俩确保代码整齐、层次清楚主要伎俩int isprime(int n)int k,i;k=sqrt(double)n);for(i=2;i=k;i+)if(n%i=0)return 0;return 1;#includeint main()int i;for(i=2;i100;i+)if(isprime(i)printf(%dt,i);return 0;第16页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓17关于代码格调问题关

14、于代码格调问题良好格调程序应严格采取梯形层次对应好各层次良好格调程序应严格采取梯形层次对应好各层次int isprime(int n)int k,i;k=sqrt(double)n);for(i=2;i=k;i+)if(n%i=0)return 0;return 1;#include int main()int i;for(i=2;i100;i+)if(isprime(i)printf(%dt,i);return 0;第17页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓18程序版式程序版式现在许多开发环境、编辑软件都支持现在许多开发环境、编辑软件都支

15、持“自动缩进自动缩进”依据用户代码输入,智能判断应该缩进还是反缩进,替用户依据用户代码输入,智能判断应该缩进还是反缩进,替用户完成调整缩进工作完成调整缩进工作VCVC中有自动整理格式功效中有自动整理格式功效只要选取需要代码,按只要选取需要代码,按ALT+F8ALT+F8就能自动整理成微软就能自动整理成微软cppcpp文件文件格式格式第18页第第第第9 9章章章章 函数函数函数函数第19页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓20回顾回顾字符串常量字符串常量字符串与字符数组字符串与字符数组字符串输入字符串输入/输出函数输出函数惯用字符串函数惯用字

16、符串函数strlenstrcpystrcmpstrcatstrrevstrlwrstrupr第20页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓21教学目标教学目标描述描述 C 语言中函数语言中函数掌握掌握 C 语言中常见内置函数语言中常见内置函数了解函数原型和函数返回值了解函数原型和函数返回值熟练掌握自定义函数定义和调用熟练掌握自定义函数定义和调用了解变量作用域了解变量作用域了解变量存放类型了解变量存放类型了解两种参数传递方式:传值、引用了解两种参数传递方式:传值、引用熟悉带参函数调用熟悉带参函数调用熟练使用数组作为函数参数熟练使用数组作为函数参数

17、第21页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓22程序设计艺术程序设计艺术三国演义三国演义中有这么一段描写:中有这么一段描写:懿问曰:懿问曰:“孔明寝食及事之烦简若何?孔明寝食及事之烦简若何?”使者曰:使者曰:“丞相夙兴夜丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,日不过数升。寐,罚二十以上皆亲览焉。所啖之食,日不过数升。”懿顾谓诸懿顾谓诸将曰:将曰:“孔明食少事烦,其能久乎?孔明食少事烦,其能久乎?”此话音落很快,诸葛亮果然病故于五丈原。此话音落很快,诸葛亮果然病故于五丈原。“事无巨细事无巨细”,“事必躬亲事必躬亲”管理学观点是极其排斥这种做

18、法,认为工作必须分工,各司其职管理学观点是极其排斥这种做法,认为工作必须分工,各司其职其中思想,在程序设计里也适用其中思想,在程序设计里也适用第22页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓23程序设计艺术程序设计艺术结构化程序设计有两大最高级艺术结构化程序设计有两大最高级艺术算法设计艺术算法设计艺术结构设计艺术结构设计艺术C C语言为程序结构提供了两样武器语言为程序结构提供了两样武器函数和模块函数和模块函数函数(functionfunction)是结构设计最基本单位)是结构设计最基本单位“一个程序应该是轻灵自由,它一个程序应该是轻灵自由,它子过

19、程子过程就象串在一根线上珍珠。就象串在一根线上珍珠。”Geoffrey JamesGeoffrey James编程之道编程之道第23页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓24数学函数数学函数自变量自变量因变量因变量函数名函数名第24页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓25数学函数数学函数一个自变量,一个因变量一个自变量,一个因变量两个两个自变量,一个因变量自变量,一个因变量第25页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓26数学函数数学函数自

20、变量自变量因变量因变量第26页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓27数学函数数学函数一个变量一个变量二个变量二个变量N N个变量个变量一个变量一个变量二个变量二个变量N N个变量个变量自变量自变量与与因变量因变量关系关系第27页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓28数学函数数学函数集合集合A A关系关系集合集合B B第28页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓29int main(void):x=x*x*x;y=y*y*y;z=z*z*

21、z;ans1=x+y+z;a=a*a*a;b=b*b*b;c=c*c*c;ans2=a+b+c;:为何使用函数为何使用函数重复屡次同一计重复屡次同一计算类型算类型int main(void):ans1=cube(x,y,z);ans2=cube(a,b,c);:int cube(int a,int b,int c)int ans;ans=(a*a*a)+(b*b*b)+(c*c*c);return ans;函数函数主程序主程序ans函数能够把相对独立某个功效抽象出来,使之成为程函数能够把相对独立某个功效抽象出来,使之成为程序中一个独立实体。能够在同一个程序或其它程序中序中一个独立实体。能够在同

22、一个程序或其它程序中屡次重复使用屡次重复使用第29页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓30程序设计中函数程序设计中函数程序设计中函数不局限于计算程序设计中函数不局限于计算计算类,如打印阶乘表程序计算类,如打印阶乘表程序判断推理类,如排序、查找判断推理类,如排序、查找第30页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓31用函数处理问题关键点用函数处理问题关键点分而治之分而治之函数把较大任务分解成若干个较小任务,并提炼出公用任务函数把较大任务分解成若干个较小任务,并提炼出公用任务复用复用程序员能够在

23、其它函数基础上结构程序,而不需要从头做起程序员能够在其它函数基础上结构程序,而不需要从头做起信息隐藏信息隐藏设计得当函数能够把详细操作细节对程序中不需要知道它们那些部分设计得当函数能够把详细操作细节对程序中不需要知道它们那些部分隐藏掉,从而使整个程序结构清楚隐藏掉,从而使整个程序结构清楚MoeCurlyLarry第31页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓32函数机制优点函数机制优点使程序变得更简短而清楚使程序变得更简短而清楚 有利于程序维护有利于程序维护能够提升程序开发效率能够提升程序开发效率 提升了代码重用性提升了代码重用性 第32页学习

24、如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓33C语言中函数语言中函数说明说明:一个源程序文件由一个或多个函数组成。一个源程序文件由一个或多个函数组成。一个一个C C程序由一个或多个源程序文件组成。程序由一个或多个源程序文件组成。C C程序执行从程序执行从mainmain函数开始,调用其它函数后流程回到函数开始,调用其它函数后流程回到mainmain函数,在函数,在mainmain函数中结束整个程序运行。函数中结束整个程序运行。全部函数都是平行,即函数定义时是相互独立,一个全部函数都是平行,即函数定义时是相互独立,一个函数并不隶属于另一个函数。函数并不隶

25、属于另一个函数。第33页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓34函数类型函数类型 内置函数:内置函数:由语言系统提供;由语言系统提供;用户无须定义,也无用户无须定义,也无须在程序中作类型说明;须在程序中作类型说明;只需在程序前包含有只需在程序前包含有该函数定义头文件该函数定义头文件;自定义函数:自定义函数:用户在程序中依据需用户在程序中依据需要而编写函数要而编写函数;第34页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓35惯用内置函数惯用内置函数内置函数内置函数头文件头文件用途用途double sq

26、rt(double x)math.h计算x平方根double pow(double x,double y)计算xy次幂double ceil(double x)求大于等于x最小整数,并以double形式显示double floor(double x)求小于等于x最大整数,并以double形式显示int toupper(int x)ctype.h假如x为小写字母,返回对应大写字母int tolower(int x)假如x为大写字母,返回对应小写字母int rand(void)stdlib.h产生一个随机数产生一个随机数void exit(int retval)终止程序终止程序第35页学习如钻探石

27、油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓36问题描述:问题描述:求自然数求自然数110平方根和立方。平方根和立方。内置函数内置函数sqrt 和和pow 示例示例2664#include#include int main(void)int x=1;double squareroot,power;while(x=10)squareroot=sqrt(x);power=pow(x,3);printf(%d平方根:%3.2ft%d立方:%5.0f n,x,squareroot,x,power);x+;return 0;1平方根:1.00 1立方:1 2平方根:1.4

28、1 2立方:8 3平方根:1.73 3立方:27 4平方根:2.00 4立方:64 5平方根:2.24 5立方:125 6平方根:2.45 6立方:216 7平方根:2.65 7立方:343 8平方根:2.83 8立方:512 9平方根:3.00 9立方:72910平方根:3.16 10立方:1000Press any key to continue第36页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓37内置函数内置函数ceil和和floor示例示例2664#include#include int main(void)printf(=floor()=

29、);printf(n floor(99.1)=%f n,floor(99.1);printf(floor(-99.1)=%fn,floor(-99.1);printf(floor(99.9)=%fn,floor(99.9);printf(floor(-99.9)=%fn,floor(-99.9);printf(n=ceil()=);printf(n ceil(99.1)=%fn,ceil(99.1);printf(ceil(-99.1)=%fn,ceil(-99.1);printf(ceil(99.9)=%fn,ceil(99.9);printf(ceil(-99.9)=%fn,ceil(-9

30、9.9);return 0;=floor()=floor(99.1)=99.000000 floor(-99.1)=-100.000000 floor(99.9)=99.000000 floor(-99.9)=-100.000000=ceil()=ceil(99.1)=100.000000 ceil(-99.1)=-99.000000 ceil(99.9)=100.000000 ceil(-99.9)=-99.000000Press any key to continue第37页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓38toupper和和tol

31、ower示例示例2664#include#includeint main(void)char msg1,msg2,to_upper,to_lower;printf(请输入一个小写字母:);msg1=getchar();to_upper=toupper(msg1);printf(转换为大写:%cn,to_upper);printf(请输入一个大写字母:);fflush(stdin);msg2=getchar();to_lower=tolower(msg2);printf(转换为小写:%cn,to_lower);return 0;请输入一个小写字母:d转换为大写:D请输入一个大写字母:E转换为小写

32、:ePress any key to continue第38页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓39内置函数内置函数rand示例示例2664#include#include/#includeint main(void)int i;printf(产生 10 个 0 到 99 之间随机数序列:nn);/srand(unsigned)time(NULL);for(i=0;iy?x:y;return m;该函数名为该函数名为max,它有两个,它有两个double类型参数,返回值为类型参数,返回值为double类型。在函数体内有三条语句实现了求两个数

33、中较大数,类型。在函数体内有三条语句实现了求两个数中较大数,并将它返回。并将它返回。第44页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓45计算打折函数计算打折函数void displayDiscount()float price,discount_amt;printf(请输入价格请输入价格);scanf(%f,&price);discount_amt=0.75*price;printf(折扣额为折扣额为%f,discount_amt);该函数名为该函数名为displayDiscount,无参数,使用,无参数,使用void说明无返回说明无返回值,函数

34、体内语句用于依据产品价格求折扣后价格。值,函数体内语句用于依据产品价格求折扣后价格。第45页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓46函数参数函数参数形参形参(形式参数形式参数 ):):在定义函数时,定义函数名后面括号中变量名在定义函数时,定义函数名后面括号中变量名实参实参(实际参数实际参数 ):):在主调函数中调用一个函数,调用函数名后面括号中在主调函数中调用一个函数,调用函数名后面括号中参数参数(或表示式或表示式)第46页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓47函数调用函数调用经过在程序中

35、使用函数名称,能够执行函数中包含语句,经过在程序中使用函数名称,能够执行函数中包含语句,这称为调用函数这称为调用函数单向值传递单向值传递调用函数时,必须提供全部参数调用函数时,必须提供全部参数printfprintf和和scanfscanf是采取变长变量表定义函数,所以变量个数不固定。是采取变长变量表定义函数,所以变量个数不固定。提供参数个数、类型、次序应与定义时相同提供参数个数、类型、次序应与定义时相同形式参数形式参数实际参数实际参数第47页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓48函数调用函数调用int main()int a=12;int

36、 b=24;int ave;ave=Average(a,b);printf(Average of%d and%d is%d.n,a,b,ave);return 0;int Average(int x,int y)int result;result=(x+y)/2;return result;main()int a=12;int b=24;int ave;ave=Average(a,b);printf();数据传递数据传递执行次序执行次序int main()return 0;第48页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓49函数调用函数调用有返回

37、值时有返回值时放到一个数值表示式中放到一个数值表示式中如如 c=max(a,b);作为另一个函数调用参数作为另一个函数调用参数如如 c=max(max(a,b),c);printf(%dn,max(a,b);无返回值时无返回值时函数调用表示式函数调用表示式如如 display(a,b);返回值返回值 =函数名函数名(实参表列实参表列););函数名函数名(实参表列实参表列););第49页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓50函数之间允许相互调用,也允许嵌套调用函数之间允许相互调用,也允许嵌套调用函数还能够自己调用自己,称为递归调用函数还能够自

38、己调用自己,称为递归调用#includeint main(void):set_discount();displayDiscount();:float set_discount():float displayDiscount():函数调用函数调用 第50页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓51函数原型函数原型调用一个函数之前,先要对其返回值类型、函数名和参数调用一个函数之前,先要对其返回值类型、函数名和参数进行申明进行申明(declare)有利于编译器进行类型检验有利于编译器进行类型检验函数原型说明在形式上与函数头部类似,最终加一个分号。函数

39、原型说明在形式上与函数头部类似,最终加一个分号。原型说明中参数表里参数名能够不写(只写原型说明中参数表里参数名能够不写(只写参数参数类型)。类型)。申明时不要省略参数以及返回值类型申明时不要省略参数以及返回值类型#include float count(int,int);int main(void).float count(int x,int y).第51页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓52#include/*函数功效:函数功效:计算平均数计算平均数 函数入口参数:函数入口参数:整型整型x,存放第一个运算数,存放第一个运算数 整型整型y

40、,存放第二个运算数,存放第二个运算数 函数返回值:函数返回值:平均数平均数*/int Average(int x,int y)int result;result=(x+y)/2;return result;int main()int a=12;int b=24;int ave=Average(a,b);printf(Average of%d and%d is%d.n,a,b,ave);return 0;函数原型函数原型第52页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓53#include int Average(int x,int y);/*申明申

41、明Average()函数函数*/int main()int a=12;int b=24;int ave=Average(a,b);printf(Average of%d and%d is%d.n,a,b,ave);return 0;/*函数功效:函数功效:计算平均数计算平均数 函数入口参数:函数入口参数:整型整型x,存放第一个运算数,存放第一个运算数 整型整型y,存放第二个运算数,存放第二个运算数 函数返回值:函数返回值:平均数平均数*/int Average(int x,int y)int result;result=(x+y)/2;return result;函数原型函数原型第53页学习如

42、钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓设计型】设计型】9.1 数合并数合并请编写函数请编写函数fun,其功效是:将两个两位数正整数,其功效是:将两个两位数正整数a、b合合并形成一个整数放在并形成一个整数放在c中。合并方式是:将中。合并方式是:将a十位和个位依十位和个位依次存放在次存放在c数十位和千位上,数十位和千位上,b十位和个位依次存放在十位和个位依次存放在c数数个位和百位上。个位和百位上。比如:当比如:当a=45,b=12,调用该函数后,调用该函数后,c=524154第54页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈

43、能找到知识的精髓55void reverse():#includeint main(void):palindrome();:void palindrome():reverse();:函数嵌套调用函数嵌套调用 从一个函数调用另一个函数称为函数嵌套调用从一个函数调用另一个函数称为函数嵌套调用 第55页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓56函数嵌套调用函数嵌套调用mainmainmainmain函数函数函数函数 调用函调用函调用函调用函数数数数 A;A;A;A;函数函数函数函数 A A A A 调用函数调用函数调用函数调用函数 B B;函数函数函

44、数函数 B B B B 调用调用调用调用调用调用调用调用返回返回返回返回返回返回返回返回第56页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓57/*此函数用于计算 a 阶乘*/int factorial(int a)if(a0)printf(data error!);else if(a=0|a=1)return 1;else return a*factorial(a-1);函数递归调用函数递归调用 在一个函数体内调用本身称为函数递归调用在一个函数体内调用本身称为函数递归调用 第57页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深

45、,愈能找到知识的精髓设计型】设计型】9.6 杀鸡用牛刀杀鸡用牛刀学习递归喽学习递归喽背景:背景:哈哈!我们终于学了递归了,现在大家一定感到非常有意哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个经典思吧,那个经典“汉诺塔汉诺塔”问题,一个非常短程序竟然能问题,一个非常短程序竟然能够完成如此复杂工作,真是神奇啊!来吧,让我们也动手够完成如此复杂工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写不可能太复杂。编写一个递归程序,当然,我们要编写不可能太复杂。功效:功效:求整数求整数 n 到到 m 区间累加和,其中区间累加和,其中n=m。输入:输入:区间起始点区间起始点

46、n 区间终止点区间终止点m输出:输出:累加和累加和要求:要求:使用递归算法完成。使用递归算法完成。58第58页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓设计型】设计型】9.7 求最大条约数求最大条约数递归递归请使用递归算法计算正整数请使用递归算法计算正整数n和和m最大条约数最大条约数GCD(n,m)。输入:输入:n和和m输出:输出:n和和m最大条约数最大条约数提醒:本题提交时候,只需要提交提醒:本题提交时候,只需要提交fun函数就能够。函数就能够。59第59页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓6

47、0问题描述:问题描述:依据用户选择求不一样形状面积。依据用户选择求不一样形状面积。函数调用示例函数调用示例#includevoid AreaOfRect();void AreaOfTriangle();void AreaOfRound();int main(void)int select;do printf(0、退出、退出n 1、长方形、长方形n 2、三角形、三角形n 3、圆形、圆形n);printf(请选择功效:请选择功效:);scanf(%d,&select);if(select=0)break;switch(select)case 1:AreaOfRect();break;/长方形长方形

48、 case 2:AreaOfTriangle();break;/三角形三角形 case 3:AreaOfRound();break;/圆形圆形 default:printf(输入有误,请在输入有误,请在 04 之间选择。之间选择。n);while(1);return 0;void AreaOfRect()int x,y;printf(请输入长方形长:);scanf(%d,&x);printf(请输入长方形宽:);scanf(%d,&y);printf(面积为:%dn,(x*y);void AreaOfTriangle()int x,y;printf(请输入三角形底:);scanf(%d,&x)

49、;printf(请输入三角形高:);scanf(%d,&y);printf(面积为:%dn,(x*y)/2);void AreaOfRound()int r;printf(请输入圆形半径:);scanf(%d,&r);printf(面积为:%dn,3.14*r*r);函数原型第60页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓61int divisibleCheck(int num)if(num%5=0)return 1;else return 0;C C语言中函数至多能够返回一个值,不能返回多个值;语言中函数至多能够返回一个值,不能返回多个值;返回

50、值数据类型必须与函数原型中返回值数据类型匹配;返回值数据类型必须与函数原型中返回值数据类型匹配;当碰到当碰到 return return 语句时,函数执行将终止。程序控制流将马上语句时,函数执行将终止。程序控制流将马上返回调用函数;返回调用函数;函数返回值函数返回值C 语言中语言中 return 语句用于向调用函数返回值,语法以下:语句用于向调用函数返回值,语法以下:return();第61页学习如钻探石油,钻得愈深,愈能找到知识的精髓学习如钻探石油,钻得愈深,愈能找到知识的精髓62函数返回值示例函数返回值示例#include int get_age();int main(void)int a

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服