




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机程序设计基础,第三章函数,提纲,3.1函数声明与调用3.2函数定义3.3函数调用规范3.4程序的结构化与模块化3.5程序测试与代码优化本章小结,3.1函数声明与调用,函数调用主调(客户)函数与被调(服务器)函数函数调用时的参数与返回值例一:printf(%2d,i);例二:n=GetIntegerFromKeyboard();函数原型函数的实现与调用格式说明:作为函数接口一般出现在头文件中格式:函数返回值类型函数名称(形式参数列表);例一:intAdd(intx,inty);例二:voidSwap(intx,inty);例三:voidCompute();,3.2函数定义,函数实现函数定义,使用编程语言给出函数的执行步骤函数返回值函数完成后带回来的结果主调函数可以使用谓词函数返回BOOL类型值的函数表达某项任务是否完成或某个条件是否满足,Add函数,编写函数Add,求两个整数之和,intAdd(intx,inty)intt;t=x+y;returnt;,Compare函数,编写函数Compare,比较两个整型数据x、y的大小。若x等于y返回0,若x大于y返回1,若x小于y返回-1,intCompare(intx,inty)intt;if(x=y)t=0;elseif(xy)t=1;elset=-1;returnt;,Swap函数,编写函数Swap,互换两个整型数据x、y的值,voidSwap(intx,inty)intt;t=x;x=y;y=t;return;/因函数没有返回值,只需直接列写return语句,多条return语句,编写函数Compare,比较两个整型数据x、y的大小。若x等于y返回0,若x大于y返回1,若x小于y返回-1,/允许函数中包含多条return语句/函数在执行到第一条return语句后终止intCompare(intx,inty)if(x=y)return0;elseif(xy)return1;elsereturn-1;,谓词函数,编写函数IsLeapYear,判断某个给定年份是否为闰年,BOOLIsLeapYear(intyear)returnyear%4=0,3.3函数调用规范,函数调用示例参数传递机制函数调用栈框架函数的嵌套调用,函数调用示例,编写程序将用户输入的两个整数相加,要求尽可能使用函数将程序中的操作独立出来,#include#includezylib.hvoidPrintWelcomeInfo();intGetInteger(STRINGprompt);intAdd(intx,inty);intmain()inta,b,sum;PrintWelcomeInfo();a=GetInteger(Thefirstnumber:);b=GetInteger(Thesecondnumber:);sum=Add(a,b);printf(Thesumis%d.n,sum);return0;,函数调用示例,voidPrintWelcomeInfo()printf(Theprogramgetstwointegers,andprintstheirsum.n);intGetInteger(STRINGprompt)intt;printf(%s,prompt);t=GetIntegerFromKeyboard();returnt;intAdd(intx,inty)intt;t=x+y;returnt;,参数传递机制,形式参数在函数调用时才分配存储空间,并接受实际参数的值实际参数可以为复杂的表达式,在函数调用前获得计算形式参数与实际参数可同名,也可不同名参数较多时,实际参数值逐一赋值,它们必须保持数目、类型、顺序的一致值的复制过程是单向不可逆的,函数内部对形式参数值的修改不会反映到实际参数中去函数参数一般为函数输入集的一部分,函数输出集一般使用返回值表示,只有使用特殊的手段才可以将函数参数作为函数输出集的一部分,函数调用栈框架,首次调用GetInteger函数前,函数调用栈框架,首次调用GetInteger函数,数据输入前,函数调用栈框架,Thefirstnumber:,10,prompt,t,GetInteger,首次调用GetInteger函数,数据输入后,函数调用栈框架,首次调用GetInteger函数,数据输入后,函数调用栈框架,首次调用GetInteger函数结束,函数调用栈框架,再次调用GetInteger函数,数据输入后,函数调用栈框架,再次调用GetInteger函数结束,函数调用栈框架,调用Add函数,函数调用栈框架,调用Add函数结束,结果为30,整数互换示例第一版,编写程序将用户输入的两个整数互换,#include#includezylib.hvoidPrintWelcomeInfo();intGetInteger(STRINGprompt);voidSwap(intx,inty);intmain()inta,b;/*输入部分*/PrintWelcomeInfo();a=GetInteger(Thefirstnumber:);b=GetInteger(Thesecondnumber:);/*数据处理与输出部分*/printf(Inmain():a:%d;b:%dn,a,b);Swap(a,b);printf(Inmain():a:%d;b:%dn,a,b);return0;,整数互换示例第一版,voidPrintWelcomeInfo()printf(Theprogramgetstwointegers,andtriestoswapthem.n);intGetInteger(STRINGprompt)intt;printf(%s,prompt);t=GetIntegerFromKeyboard();returnt;voidSwap(intx,inty)intt;printf(InSwap():x:%d;y:%dn,x,y);t=x;x=y;y=t;printf(InSwap():x:%d;y:%dn,x,y);return;,整数互换程序栈框架,调用Swap函数前,整数互换程序栈框架,调用Swap函数,数据互换前,整数互换程序栈框架,调用Swap函数,数据互换后,整数互换程序栈框架,调用Swap函数后,整数互换示例第二版,编写程序将用户输入的两个整数互换,#include#includezylib.hinta,b;/*全局数据对象声明,以保证所有函数都可以访问这两个数据对象*/voidPrintWelcomeInfo();intGetInteger(STRINGprompt);voidSwap();/*不再需要函数参数*/intmain()/*输入部分*/PrintWelcomeInfo();a=GetInteger(Thefirstnumber:);b=GetInteger(Thesecondnumber:);/*数据处理与输出部分*/printf(Inmain():a:%d;b:%dn,a,b);Swap();printf(Inmain():a:%d;b:%dn,a,b);return0;,整数互换示例第二版,voidPrintWelcomeInfo()printf(Theprogramgetstwointegers,andtriestoswapthem.n);intGetInteger(STRINGprompt)intt;printf(%s,prompt);t=GetIntegerFromKeyboard();returnt;voidSwap()intt;printf(InSwap():a:%d;b:%dn,a,b);t=a;a=b;b=t;printf(InSwap():a:%d;b:%dn,a,b);return;,函数嵌套调用,函数平行定义,不能嵌套定义,但可以嵌套调用,3.4程序的结构化与模块化,结构化与函数抽象结构化负责实现函数,强调编码自顶向下,逐步求精抽象手段:函数模块化与函数抽象模块化负责组织函数,进行任务划分,强调设计抽象手段:函数模块间通信使用接口,典型表现为函数参数与返回值,3.5程序测试与代码优化,程序测试原则顺序结构:一般一次测试。注意:仅仅是一般!分支结构:每条路径都需要测试循环结构:一般测试第一次、最后一次与中间某次迭代程序效率混合运算时文字的存储类型程序测试示例编写程序,实现从摄氏温度到华氏温度值的转换。温度转换公式为f=1.8c+32,c为摄氏温度值,f为转换后的华氏温度值,温度转换程序,#include#includezylib.hconstfloatabsolute_zero=-273.15;floatf,c;floatGetFloat(STRINGprompt);voidInput();voidCompute();voidOutput();voidmain()Input();Compute();Output();,温度转换程序,voidInput()c=GetFloat(Inputatemperaturevalue(C):);while(c=absolute_zero)printf(Thetemperaturevalueisbelow%.2f.n,absolute_zero);c=GetFloat(Inputatemperaturegreaterthantheabsolutezero:);voidCompute()f=c*1.8+32;voidOutput()printf(Temperaturevalue(F)is%.2f.n,f);floatGetFloat(STRINGprompt)float
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论