使用函数封装代码.ppt

上传人:xt****7 文档编号:5186950 上传时间:2020-01-22 格式:PPT 页数:51 大小:520.81KB
返回 下载 相关 举报
使用函数封装代码.ppt_第1页
第1页 / 共51页
使用函数封装代码.ppt_第2页
第2页 / 共51页
使用函数封装代码.ppt_第3页
第3页 / 共51页
点击查看更多>>
资源描述
第五章使用函数封装代码 办公地点 信息学院 主楼四层 411室办公室电话 010 62336516E mail shinestar1129 什么是函数 函数是完成某些特定功能的程序段除一个主函数main 外 还包含其他函数程序执行方式是由主函数调用其他函数 及其他函数间也可以互相调用一个函数可以被一个或多个函数调用多次 函数有两类 从用户使用函数的角度讲自定义函数标准库函数由编程者根据实际需要而定义和编写的函数 被称为自定义函数 已经学习过哪些 标准库函数 认识 自定义 函数 函数是一个被命名的 独立的代码段 它执行特定的任务 并可以给调用它的函数返回一个值 doublemyfunc doublea doubley a a a printf cub f n y returny include defineN7intmain void longj k 1 for j 2 j N j k k j printf d n k return0 函数有自己的函数名函数是能完成特定任务的一段独立的代码块函数执行完毕时 可以将一个数值返回给调用它的函数 函数的用法 自定义函数要先定义自身的功能代码段 在其代码段存在的情况下才可以被调用 includedoublecube doublex intmain void doublex result printf Inputavalue scanf lf 例5 1编写程序实现对输入的数据输出其立方值 要求建立一个自定义函数来计算数据的立方值 函数的工作原理 C程序的执行总是从main 函数开始 函数和结构化程序设计 结构化编程要求将程序要实现的目标分解为一个个独立的子任务 每一个子任务由独立的程序代码段完成 这个独立程序段就是函数 结构化编程的三个重要原因 结构化程序设计更容易编写 结构化程序设计更容易调试 结构化程序设计可以通过共享相同的函数段 达到提高工作效率的目的 函数的构成 函数是由函数头和函数体组成函数头doublecube doublea 函数体是由声明语句 操作语句 返回语句三个部分组成 doublecube doublea returna a a 函数名的取名方式 函数的参数列表 函数体 声明语句操作语句返回语句 函数头 doublecube doublea floatfunc 1 intnum floatx floaty voidexp data intpox 1 intpox 2 voidprt c charmycc intfunc 2 void voidadorn void intmain void 例如 includevoidprtstar intn intmain void intnum printf Inputaanumber scanf d voidprtstar intn intk m for k 1 k n k for m 1 m k m printf putchar n return 有些函数在调用时 需要提供参数 即自变量 例5 2观察参数的传递 includeintfunc doublez intmain void doublex 12 702 y 0 031 intresult result func x printf nresult d result result func y printf nresult d result return0 intfunc doublez intj if z 0 j 1 elsej 1 return j 函数原型 编译器使用函数原型校验函数调用的合法性 函数原型将告诉编译器函数的返回类型 函数所要接收的参数个数 参数类型和参数顺序 编译器据此可以查验源代码文件中调用函数的格式正确与否 以确保能有效地传递参数和正确地获得返回值 编译器使用函数原型时会忽略函数原型中的参数名 函数原型 doublemy func intx doubley doublez doublemy func int double double 函数原型放置的位置一般建议将函数原型放在所有函数之外 及源代码文件的第一个函数之前 这样可以保证出现在函数原型之后的其他函数都可以合法地调用它 函数调用 调用函数时 通过函数名及其后面一对圆括号括起的实参表来实现调用 调用函数时 如果被调函数是一个无参函数 则调用函数的语句中 被调函数没有实参表 但函数名后的一对圆括号不能省略 函数调用的方法和形式 直接以函数调用语句的形式出现 scanf d 函数的传值调用 如果被调用的函数其函数原型为有参函数 则调用此函数时需要提供相应的实参 传递给函数的实参是放在被调函数的函数名后面 并用一对圆括号括起 如果实参表中包含多个实参 则各个实参之间用逗号隔开 实参的数量和类型必须与被调函数的函数头及函数原型中的形参匹配 建立自定义函数和函数调用 建立一个自定义函数 写函数头 函数体 doublemy func doublex doubley doubles s x y returns 在源程序的开头加函数声明语句doublemy func double double 在主调函数中使用函数调用printf f n my func 20 30 举例 建立一个函数 判别某数是否能被17整除 includeintdata17 int intmain void intx printf n请输入一个整数 scanf d intdata17 inta intb if a 17 b 1 elseb 0 returnb intdata17 inta intb b a 17 returnb intdata17 inta return a 17 intdata17 inta if a 17 return1 elsereturn0 编写函数 编写函数就是定义和设计函数的代码段 设计一个乘法和除法器程序 要求乘法和除法运算都使用独立的自定义函数编写 voidmul void doublex y printf Inputtwodata scanf lf lf 编写函数 voiddiv void doublex y printf Inputtwodata scanf lf lf 编写函数 主函数为设计一个菜单列表显示乘除法器的内容当选择了一种运算操作后 要求从键盘输入操作数 调用mul div 函数完成运算 结束程序 includevoidmul voiddiv intmain void intsel 0 puts t 1 乘法运算 puts t 2 除法运算 printf Inputanumber scanf d 标准库函数和头文件 标准库函数自定义函数 include includeintmain void intn doublex for n 2 n 6 n x sqrt n printf t d t f n n x return0 例5 3输出 2 6 区间中每个整数的平方根 变量的作用域 变量的作用域是指程序执行期间变量起作用的范围 变量的作用域决定了变量的生命周期 变量在内存中存活的时间 即何时为其分配内存空间 何时释放掉其占用的存储空间 例5 7通过在不同的位置上声明变量x 观察此变量在程序中的作用域 includeintx 109 voidprt data void intmain void printf First x d n x prt data printf Third x d n x return0 voidprt data void x x 2 printf Second x d n x return includeintx 109 voidprt data void intmain void voidprt data void includevoidprt data void intmain void intx 109 printf First x d n x prt data printf Third x d n x return0 voidprt data void x x 2 printf Second x d n x return includevoidprt data void intmain void intx 109 voidprt data void 外部变量 在程序的所有函数之外声明的变量称为外部变量 外部变量对main 函数以及整个程序中的其他函数都是可见的 因此也称其为全局变量 严格地讲 说外部变量的作用域为整个程序并不准确 而应该说外部变量的作用域是从声明该外部变量的位置开始至整个程序的末尾 includevoidprt data void intmain void externintx printf First x d n x prt data printf Third x d n x return0 voidprt data void externintx x x 2 printf Second x d n x return intx 109 includevoidprt data void intx 109 intmain void voidprt data void 注意 普通的变量声明与extern声明是不同的 前者给变量预留了存储空间 后者则指出 该函数使用了一个在其他地方声明的外部变量 其名称和类型分别是 注意 在同一个源代码文件中 extern声明有时并非必不可少 如例5 7的程序清单1就省略了extern声明 它取决于外部变量在源程序中的声明位置 但是 如果外部变量与需要引用此外部变量的函数位于不同的源程序文件 则extern声明就是必不可少的 注意 应该谨慎使用外部变量 因为只要修改某个外部变量的值 就将影响所有引用其值的函数 过多的使用和依赖外部变量 将破坏函数的独立性及其个体的封闭性 它不符合结构化程序设计的原则 局部变量 局部变量是在函数内部定义的变量 其作用域为它所在的函数 例如 前面介绍的函数的形参和函数内部声明的变量都属于局部变量 动态局部变量和静态局部变量 默认情况下的局部变量都是动态的 这意味着每次调用函数时 都要重新创建变量 而当函数执行完毕后 变量将被自动释放 也就是说 在程序的一次执行中 函数的两次调用之间 该函数的动态局部变量由于经过了释放与再分配存储单元的过程 使其原值无法保留 动态局部变量和静态局部变量 有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值 即其占用的存储单元不释放 在下一次该函数被调用时 该变量仍保留着上一次函数调用后的值 这时就应该指定该局部变量为 静态局部变量 用关键字static进行声明 声明格式如下 statictypevariable name 其中type是变量的数据类型 variable name是变量名 静态局部变量存储于专门的静态存储区中 在程序执行过程中它们始终占据着固定的存储单元 直至程序终止时才释放 例5 9观察动态局部变量x与静态局部变量y之间的区别 includevoidprt data void intmain void inti for i 1 i 3 i prt data return0 voidprt data void intx 0 staticinty 0 x x 5 y y 5 printf x d ty d n x y return 调用随机函数 随机函数是一个专门产生模拟随机数的程序 一般应用于程序的模拟测试或游戏软件的制作 C语言编译系统在标准函数库中提供了一个这种功能的随机函数 名为rand 调用随机函数的语句形式如下 x rand 随机函数 函数rand 产生一个从0至RAND MAX之间的整数 RAND MAX是在头文件中定义的符号常量 ANSI标准规定RAND MAX的值不得小于32767 随机函数 include includeintmain void intn for n 1 n 30 n printf d t rand if n 10 0 printf n return0 伪随机数 随机函数 srand 是一个带有单一unsigned类型整数作参数的函数 为了实现每次执行程序时能获取不同的随机数序列 首先要确保每次执行程序时 都可以改变srand 函数的参数 然后调用srand 函数来确立新的随机数种子 最后通过多次调用rand 来获得新的随机数序列 调用srand 函数的语句形式如下 srand seed 随机函数 srand seed seed是无符号整数 也被称为随机数种子 头文件中列出了srand 的函数原型 一种能随时改变随机数种子的简单方法是 srand time NULL 函数time 返回以秒计算的当前系统时间值 time 的函数原型存在于头文件中 随机函数 include include includeintmain void intn srand time NULL for n 1 n 30 n printf d t rand if n 10 0 printf n return0 获取指定区间范围内的数据 如果模拟产生某一个数据范围内的随机数 如 产生符合 a b 数据区间内的need值 则通过所需数据范围的起始值a和终结值b 利用如下的算法语句即可 need a rand b a 其中 a被称为初值 它等于所需的连续整数范围内的第一个数 b a 被称为比例因子 它等于所需的连续整数范围的宽度 获取指定区间范围内的数据 例如假设要获取10至50范围内的随机数 则可以使用如下形式的语句来产生符合其指定范围的数值 need 10 rand 40 举例 输出200个取值在60至100之间的数据 例5 5制作一个简单的游戏程序 猜数 1 要猜的数的大小在为0 20之间 2 每猜一个数据 最多给三次猜测的机会 并给予提示 3 可以反复玩 直至输入 1为止 include include include defineMAX DATA20 defineNO0 defineYES1intfun play int intmain void intluck newone srand time NULL do luck rand MAX DATA printf nHavegotanewRandomnumber n newone fun play luck while newone printf n GameOver n return0 intfun play intlucky intguess counter printf nPickanumberbetween0and d 1toend MAX DATA scanf d 调用exit 函数 exit 的作用是终止程序的执行 并将控制权归还操作系统 exit 函数的语法如下 exit status 其中 status是exit 接收的唯一参数 它是int类型 是可以返回给操作系统的一个值 使用exit 函数时 应该包含头文件stdlib h 函数的位置 一个C程序可以由一个或多个自定义函数组成 自定义函数代码可以放在main 函数所在的源代码文件中 位于main 函数的后面或前面均可以 也可以将自定义函数和main 函数分放在不同的源代码文件中 一个源代码文件可以由一个或多个函数组成 并作为一个编译单位执行编译过程 对于较大的程序 一般不希望把所有的内容全放在同一个源代码文件中 而是将其分放于若干个不同的源文件 以便于分别编写和分别编译 从而提高调试程序的效率 小结 什么是函数函数的组成函数的工作原理函数的建立方式 调用方式变量的作用域 课堂练习 任意输入n个数 假设是3 输出其中最大的数值 任意输入n个数 假设是3 输出其中最小的数值 将第1 2题的程序改为自定义函数 设计一个主函数 显示菜单 来调用它们 菜单形式如下 1 输出最大值 2 输出最小值 3 结束 作业 1 产生50个 10 50 区间中的数据 2 模仿讲义中建立乘除法函数调用的例题 设计一个可以执行加 减 乘 除运算的程序 要求加 减 乘 除运算过程分别是独立的函数 3 利用C编译器的随机函数来模拟抛骰子的情况 分别统计抛出1000次时 出现1点 2点 3点 6点的次数
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!