电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

函数调用函数原型

63页
  • 卖家[上传人]:n****
  • 文档编号:93398047
  • 上传时间:2019-07-21
  • 文档格式:PPT
  • 文档大小:806.50KB
  • / 63 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第5章 函数-1,C语言程序设计,内容提要,函数定义、函数调用、函数原型、函数返回值 难点:函数的参数传递与返回值 程序调试 代码风格 变量的作用域与存储类型 模块化程序设计 Skill: 用函数编程求解问题的能力 程序排错与调试的能力,数学中的函数,自变量,因变量,函数名,说明自变量与因变量的映射关系,程序设计中的函数,程序设计中的函数不局限于计算 计算类,如打印阶乘表的程序 判断推理类,如排序、查找,请问,读多少行的程序能让你不头疼? 假如系统提供的函数printf()由10行代码替换,那么你编过的程序会成什么样子? 实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?,程序设计的艺术,“事无巨细”,“事必躬亲” 管理学的观点是极其排斥这种做法的,认为工作必须分工,各司其职 其中的思想,在程序设计里也适用 分而治之(Divide and Conquer,Wirth, 1971) 函数把较大的任务分解成若干个较小的任务,并提炼出公用任务,程序设计的艺术,信息隐藏(Informat

      2、ion Hiding, Parnas, 1972) 设计得当的函数可以把具体操作细节对程序中不需要知道它们的那些部分隐藏掉,从而使整个程序结构清楚 使用函数时,不用知道这个函数内部是如何运作的,只按照我们的需要和它的参数形式调用它即可,函数是C语言中模块化编程的最小单位 可以把每个函数看作一个模块 如把编程比做制造一台机器,函数就好比其零部件 可将这些“零部件”单独设计、调试、测试好,用时拿出来装配,再总体调试。 这些“零部件”可以是自己设计制造/别人设计制造/现成的标准产品,函数(function)和模块(module),函数(function)和模块(module),若干相关的函数可以合并成一个“模块” 一个源程序文件由一个或多个函数组成 一个C程序由一个或多个源程序文件组成,C程序结构,函数的分类,函数生来都是平等的,互相独立的,没有高低贵贱和从属之分 main()稍微特殊一点点 C程序的执行从main函数开始 调用其他函数后流程回到main函数 在main函数中结束整个程序运行,函数的分类,库函数 ANSI/ISO C定义的标准库函数 符合标准的C语言编译器必须提供这些函数 函

      3、数的行为也要符合ANSI/ISO C的定义 第三方库函数 由其它厂商自行开发的C语言函数库 不在标准范围内,能扩充C语言的功能(图形、网络、数据库等) 自定义函数 自己编写的函数 包装后,也可成为函数库,供别人使用,函数定义(definition),类型 函数名(类型 参数1, 类型 参数2, ) 函数体; return 表达式; ,返回值类型,函数名标识符 说明运算规则,参数表 相当于运算的操作数,返回值是运算的结果,函数出口,函数定义(definition),类型 函数名(类型 参数1, 类型 参数2, ) 函数体; return 表达式; ,参数表里的变量(叫形式参数,parameter)也是内部变量,例5.1a 计算两个整数的平均数,/* 函数功能: 计算平均数 函数入口参数: 整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值: 平均数 */ int Average(int x, int y) int result; result = (x + y) / 2; return result; ,返回值类型,函数名说明函数的功能,返回值作为函数调用表达式的值,形参表,

      4、函数入口,函数内部可以定义只能自己使用的变量,称内部变量,函数定义(Function definition),void 函数名(void) 函数体; return ; ,函数没有运算结果,无返回值,用void定义返回值类型,用void定义参数,表示没有参数,return语句后不需要任何表达式,函数调用(Function call),函数名(表达式1, 表达式2, ); 调用函数时,提供的表达式叫实际参数(argument) 有返回值时 放到一个数值表达式中 c = max(a,b); 作为另一个函数调用的参数 c = max(max(a,b),c); printf(“%dn“, max(a,b); 无返回值时 函数调用表达式 display(a,b);,函数的每次执行都会建立一个全新的独立的环境 在“栈”中为函数的每个变量(包括形式参数)分配内存 把实参值复制给形参 开始执行函数内的第一条语句,main() int a=12, b=24,ave; ave = Average(a,b); ,int Average(int x, int y) int result; result = (x

      5、 + y) / 2; return result; ,函数调用的过程,12,24,函数内的代码在这个独立的环境内工作 当函数执行到return语句或时函数退出 程序从当次调用函数的地方继续执行 函数可有多个return,但最好只有一个且是最后一行,main() int a=12, b=24,ave; ave = Average(a,b); ,int Average(int x, int y) int result; result = (x + y) / 2; return result; ,函数调用的过程,12,24,18,函数退出时 求出返回值,存入一个可被调用者访问的地方 收回分配给所有变量(包括形式参数)的内存 程序控制权交给调用者,调用者拿到返回值,将其作为函数调用表达式的结果,main() int a=12, b=24,ave; ave = Average(a,b); ,int Average(int x, int y) int result; result = (x + y) / 2; return result; ,函数调用的过程,18,函数参数传递,从实参到形参是单向值

      6、传递 形参值的改变不会影响对应的实参 实参和形参必须匹配 数目一致 类型一一对应(会发生自动类型转换),函数的嵌套调用,嵌套调用 在调用一个函数的过程中,又调用另一个函数 C语言规定函数不能嵌套定义,但可以嵌套调用 函数是相互平行的,main() a(); ,a 函数 b(); return; ,b函数 return; ,递归(Recursion),函数直接或间接调用自己为递归 unsigned long func(unsigned int n) if (n = 0) return 1; else return n * func(n-1); ,用递归的方法求n!,n! =n*(n-1)! (n-1)! =(n-1)*(n-2)! (n-2)! (n-3)! 4! : 3! =3*2! : 2! =2*1! : 1! =1*0! 0! =1,回推过程,递推过程,每个递归函数必须至少有一个基线条件 一般情况必须最终能简化为基线条件,递归层数太多易 导致栈空间溢出 后果很严重,程序被异常中止,递归与迭代,迭代即循环方法来编写的阶乘函数 unsigned long factorial(unsi

      7、gned int n) unsigned long fact = 1 ; unsigned int i ; for (i = 1; i = n ; i+) fact *= i ; return fact ; 递归程序遵循了数学中对阶乘的定义 因此递归方法编写程序具有更清晰、可读性更好的优点,递归与迭代,优点: 从编程角度来看,比较直观、精炼,逻辑清楚 符合人的思维习惯,逼近数学公式的表示 尤其适合非数值计算领域 hanoi塔,骑士游历、八皇后问题(回溯法) 缺点: 增加了函数调用的开销,每次调用都需要进行参数传递、现场保护等 从程序运行效率来看,大量重复计算,时空效率低 应尽量用迭代形式替代递归形式,函数原型(Function prototype),在调用一个函数之前 要先对其返回值类型、函数名和参数进行声明(declaration) 函数声明,也称函数原型 有助于编译器进行类型检查 不对函数进行声明是非常危险的,例5.1b 使用了Average函数的main(),#include int Average(int x, int y); main() int a = 12; int b

      8、= 24; int ave; ave = Average(a, b); printf(“Average of %d and %d is %d.n“, a, b, ave); ,函数声明(函数原型),声明时不要省略形参和返回值的类型,函数调用,#include /* 函数功能: 计算平均数 函数入口参数: 整型x,存储第一个运算数 整型y,存储第二个运算数 函数返回值: 平均数 */ int Average(int x, int y) int result; result = (x + y) / 2; return result; main() int a = 12; int b = 24; int ave = Average(a, b); printf(“Average of %d and %d is %d.n“, a, b, ave); ,例5.1,函数定义也有声明函数的效果 当返回值为整型或者函数定义在函数调用前面时,可以省略原型,函数定义与函数声明的区别,函数定义 指函数功能的确立 包括指定函数名、函数类型、形参及其类型、函数体等 是完整独立的单位 函数声明 是对函数名、函数返回

      9、值类型、形参类型的说明 不包括函数体 是一条语句,以分号结束,只起一个声明作用,循序渐进式编程 实验4:小学生加法考试题,通过输入两个加数给学生出一道加法运算题,输入答案正确: right 错误: Not correct! Try again!,循序渐进式编程 实验4:小学生加法考试题,void Print(int flag) if (flag) printf(“Right!n“); else printf(“Not correct!n“); ,实验4:小学生加法考试题,/* 函数功能: 计算两整型数之和,如果与用户输入的答案相同,则返回1,否则返回0 函数参数: 整型变量a和b,分别代表被加数和加数 函数返回值:当a加b的结果与用户输入的答案相同时,返回1,否则返回0 */ int AddTest(int a, int b) int answer; printf(“%d+%d=“, a, b); scanf(“%d“, ,main() int a, b, answer; printf(“Input a,b:“); scanf(“%d,%d“, ,do while (answer = 0);,实验4:小学生加法考试题,main() answer = AddTest(a, b); Print(answer, chance); ,chance = 0; do chance+; while (answer = 0 ,实验4:小学生加法考试题,srand(time(NULL); error = 0; score = 0; for (i=0; i10; i+) a = rand()%10 + 1; b = rand()%10

      《函数调用函数原型》由会员n****分享,可在线阅读,更多相关《函数调用函数原型》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结
     
    收藏店铺
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.