版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机程序设计基础,第三章 函 数,提 纲,3.1 函数声明与调用 3.2 函数定义 3.3 函数调用规范 3.4 程序的结构化与模块化 3.5 程序测试与代码优化 本章小结,3.1 函数声明与调用,函数调用 主调(客户)函数与被调(服务器)函数 函数调用时的参数与返回值 例一:printf( %2d, i ); 例二:n = GetIntegerFromKeyboard(); 函数原型 函数的实现与调用格式说明:作为函数接口 一般出现在头文件中 / #include 格式:函数返回值类型 函数名称( 形式参数列表 ); 例一:int Add( int x, int y ); 例二:void
2、Swap( int x, int y ); 例三:void Compute(,3.2 函数定义,函数实现 函数定义,使用编程语言给出函数的执行步骤 函数返回值 函数完成后带回来的结果 主调函数可以使用 谓词函数 返回 BOOL 类型值的函数 表达某项任务是否完成或某个条件是否满足,Add 函数,编写函数 Add,求两个整数之和,int Add( int x, int y ) int t; t = x + y; return t;,Compare 函数,编写函数 Compare,比较两个整型数据 x、y 的大小。若 x 等于 y 返回 0,若 x 大于 y 返回 1,若 x 小于 y 返回 -1
3、,int Compare( int x, int y ) int t; if ( x = y ) t = 0; else if ( x y ) t = 1; else t = -1; return t;,Swap 函数,编写函数 Swap,互换两个整型数据 x、y 的值,void Swap( int x, int y ) int t; t = x; x = y; y = t; return; / 因函数没有返回值,只需直接列写 return 语句,多条 return 语句,编写函数 Compare,比较两个整型数据 x、y 的大小。若 x 等于 y 返回 0,若 x 大于 y 返回 1,若 x
4、 小于 y 返回 -1,允许函数中包含多条 return 语句 / 函数在执行到第一条 return 语句后终止 int Compare( int x, int y ) if( x = y ) return 0; else if( x y ) return 1; else return -1;,谓词函数,编写函数 IsLeapYear,判断某个给定年份是否为闰年,BOOL IsLeapYear( int year ) return year % 4 = 0,3.3 函数调用规范,函数调用示例 参数传递机制 函数调用栈框架 函数的嵌套调用,函数调用示例,编写程序将用户输入的两个整数相加,要求尽可
5、能使用函数将程序中的有关操作独立出来,include #include zylib.h void PrintWelcomeInfo(); int GetInteger( STRING prompt ); int Add( int x, int y ); int main() int a, b, sum; PrintWelcomeInfo(); a = GetInteger( The first number: ); b = GetInteger( The second number: ); sum = Add(a, b); printf( The sum is %d.n, sum ); ret
6、urn 0;,include int main() int a, b, sum; printf( The program gets two integers, and prints their sum.n ); printf( The first number: ); scanf(%d,函数调用示例,void PrintWelcomeInfo() printf( The program gets two integers, and prints their sum.n ); int GetInteger( STRING prompt ) int t; printf( %s, prompt );
7、 t = GetIntegerFromKeyboard(); /scanf(%d,参数传递机制,形式参数在函数调用时才分配存储空间,并接受实际参数的值 实际参数可以为复杂的表达式,在函数调用前获得计算 形式参数与实际参数可同名,也可不同名 参数较多时,实际参数值逐一赋值,它们必须保持数目、类型、顺序的一致 值的复制过程是单向不可逆的,函数内部对形式参数值的修改不会反映到实际参数中去 函数参数一般为函数输入集的一部分,函数输出集一般使用返回值表示,只有使用特殊的手段才可以将函数参数作为函数输出集的一部分,函数调用栈框架,首次调用 GetInteger 函数前,函数调用栈框架,首次调用 GetIn
8、teger 函数,数据输入前,函数调用栈框架,The first number,10,prompt,t,GetInteger,首次调用 GetInteger 函数,数据输入后,函数调用栈框架,首次调用 GetInteger 函数,数据输入后,函数调用栈框架,首次调用 GetInteger 函数结束,函数调用栈框架,再次调用 GetInteger 函数,数据输入后,函数调用栈框架,再次调用 GetInteger 函数结束,函数调用栈框架,调用 Add 函数,函数调用栈框架,调用 Add 函数结束,结果为 30,整数互换示例第一版,编写程序将用户输入的两个整数互换,include #include
9、 zylib.h void PrintWelcomeInfo(); int GetInteger( STRING prompt ); void Swap( int x, int y ); int main() int a, b; /* 输入部分 */ PrintWelcomeInfo(); a = GetInteger( The first number: ); b = GetInteger( The second number: ); /* 数据处理与输出部分 */ printf( In main(): a: %d; b: %dn, a, b ); Swap(a, b); printf( I
10、n main(): a: %d; b: %dn, a, b ); return 0;,整数互换示例第一版,void PrintWelcomeInfo() printf( The program gets two integers, and tries to swap them.n ); int GetInteger( STRING prompt ) int t; printf( %s, prompt ); t = GetIntegerFromKeyboard(); return t; void Swap( int x, int y ) int t; printf( In Swap(): x:
11、%d; y: %dn, x, y ); t = x; x = y; y = t; printf( In Swap(): x: %d; y: %dn, x, y ); return;,整数互换程序栈框架,调用 Swap 函数前,整数互换程序栈框架,调用 Swap 函数,数据互换前,整数互换程序栈框架,调用 Swap 函数,数据互换后,整数互换程序栈框架,调用 Swap 函数后,整数互换示例第二版,编写程序将用户输入的两个整数互换,include #include zylib.h int a, b; /* 全局数据对象声明,以保证所有函数都可以访问这两个数据对象 */ void PrintWelc
12、omeInfo(); int GetInteger( STRING prompt ); void Swap(); /* 不再需要函数参数 */ int main() /* 输入部分 */ PrintWelcomeInfo(); a = GetInteger( The first number: ); b = GetInteger( The second number: ); /* 数据处理与输出部分 */ printf( In main(): a: %d; b: %dn, a, b ); Swap(); printf( In main(): a: %d; b: %dn, a, b ); ret
13、urn 0;,整数互换示例第二版,void PrintWelcomeInfo() printf( The program gets two integers, and tries to swap them.n ); int GetInteger( STRING prompt ) int t; printf( %s, prompt ); t = GetIntegerFromKeyboard(); return t; void Swap() int t; printf( In Swap(): a: %d; b: %dn, a, b ); t = a; a = b; b = t; printf( I
14、n Swap(): a: %d; b: %dn, a, b ); return;,函数嵌套调用,函数平行定义,不能嵌套定义,但可以嵌套调用,3.4 程序的结构化与模块化,结构化与函数抽象 结构化负责实现函数,强调编码 自顶向下,逐步求精 抽象手段:函数 模块化与函数抽象 模块化负责组织函数,进行任务划分,强调设计 抽象手段:函数 模块间通信使用接口,典型表现为函数参数与返回值,3.5 程序测试与代码优化,程序测试原则 顺序结构:一般一次测试。注意:仅仅是一般! 分支结构:每条路径都需要测试 循环结构:一般测试第一次、最后一次与中间某次迭代 程序效率 混合运算时文字的存储类型 程序测试示例 编写
15、程序,实现从摄氏温度到华氏温度值的转换。温度转换公式为 f = 1.8 c + 32,c 为摄氏温度值,f 为转换后的华氏温度值,温度转换程序,include #include zylib.h const float absolute_zero = -273.15; float f, c; float GetFloat( STRING prompt ); void Input(); void Compute(); void Output(); void main() Input(); Compute(); Output();,温度转换程序,void Input() c = GetFloat( Input a temperature value (C): ); while( c = absolute_zero ) printf( The temperature value is below %.2f.n, absolute_zero ); c = GetFloat( Input a temperature greater than the absolute zero: ); void Compute() f = c * 1.8 + 32; void Output() printf( Temperature value (F) is %.2f.n, f )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机考试女排题目及答案
- 2026五年级数学上册 可能性单元测试
- 信用担保机构与公信保证人制度
- 2026八年级下语文综合性学习方法指导
- 传染病分级分层分流制度
- 会务接待流程制度
- 企业某项业务的制度是不是属于专项制度
- 产品质量安全追溯制度
- 二手车商户经营制度
- 销售部门集客奖惩制度
- 2026年中学新团员入团测试题及答案
- (一模)东北三省三校2026年高三第一次联合模拟考试语文试卷(含答案详解)
- 2026河南郑州建设集团所属公司社会招聘工作人员44名笔试备考题库及答案解析
- 2026辽宁大连理工大学后勤处自聘管理岗位招聘2人笔试备考题库及答案解析
- 2026年吉安职业技术学院单招综合素质考试题库含答案详解
- 2026年春五年级下册数学教学计划(附教学进度表)
- 薄抹灰施工方案
- 2026年南京交通职业技术学院单招职业技能考试题库及答案详解(基础+提升)
- 2025年青岛农商银行春招笔试及答案
- 绍兴2025年浙江绍兴市政务服务办公室招聘政务服务专员6人笔试历年参考题库附带答案详解
- 中华人民共和国药品管理法实施条例培训宣贯
评论
0/150
提交评论