c语言自定义函数设计-云南师范大学.ppt_第1页
c语言自定义函数设计-云南师范大学.ppt_第2页
c语言自定义函数设计-云南师范大学.ppt_第3页
c语言自定义函数设计-云南师范大学.ppt_第4页
c语言自定义函数设计-云南师范大学.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章自定义函数设计 本章要点 输入三个数 求最大 最小值自定义函数 定义 调用交换两个变量的值存储类和作用域习题下一章要讨论的话题 输入三个数 求最大 最小值 includeintmain 1 定义变量 2 输入数据 3 处理 4 输出结果return0 处理 计算 xy 最大的数 程序实现 怎样说明函数的调用格式 怎样使函数被执行参数的传递 函数返回 怎样定义函数关系运算符if语句 条件运算符 函数max2 输入两个数 求最大值 程序实现 includeintmax2 intx inty 函数声明intmain inta b max printf 请输入两个数 scanf d d max max2 a b 函数调用 函数定义intmax2 intx inty intmax if x y max x elsemax y returnmax 函数声明举例 intmax2 intx inty intmain inta b c max return0 intmain inta b c max intmax2 intx inty return0 intmax2 intx inty intmax if x y max x elsemax y returnmax intmain inta b c max return0 函数声明 原型 对被调用函数要求 必须是已存在的函数库函数 include用户自定义函数 函数声明函数声明的作用 告诉编译系统函数类型 参数个数及类型 以便检验格式 类型函数名 类型 形参名 intmax2 intx inty 位置 程序的数据声明部分 函数内或外 若被调用函数的定义出现在主调函数之前 可以不作函数声明缺省函数类型时 系统自动按int型处理 函数调用 实参与形参的个数应相等 类型应一致如果实参表包含多个实参 则各参数间用逗号隔开如果调用的是无参函数 则 实际参数表 可以没有 但括号 不能省略调用格式 函数名 实参表 max max2 a b max max2 max c max max2 max2 a b c printf a d b d n a b ch getchar 函数调用的概念 C语言程序是由若干个函数组成的 各函数在结构上是独立的 但它们所处理的数据却是相互联系的一个函数定义好后 只有调用它时才被执行通过函数的参数 主调函数和被调函数具有数据传递的关系函数不能嵌套定义 即在一个定义好的函数中 又定义另一个函数 但是函数之间允许相互调用 也允许嵌套调用 main函数通常由操作系统调用函数还可以自己调用自己 称为递归调用 函数参数的传递 值传递 a 10 b 30 y x 10 30 值传递 形参与实参占用不同的内存单元 单向传递 函数返回 功能 使程序控制从被调用函数返回到调用函数中 同时把返值带给主调函数返回语句形式 return 表达式 return表达式 return 函数中可有多个return语句 但只能返回唯一的函数值若无return语句 遇 时 自动返回调用函数 返回值是一个不确定的值void型函数 表示 空类型 或 无类型 若函数类型与return语句中表达式值的类型不一致 自动转换成函数类型 有返回值函数intmax2 intx inty intmax if x y max x elsemax y returnmax 返回最大值 有多个return语句intmax2 intx inty if x y returnx elsereturny 无返回值函数voidprintstart printf 赋值表达式中 数据的类型是怎样转换的 表达式类型与函数类型不一致intmax2 floatx floaty floatmax if x y max x elsemax y returnmax 函数的定义 类型函数名 形式参数类型说明表 声明部分执行部分 形式参数表是一个用逗号分隔的变量表 当函数被调用时这些变量接受调用参数的值 相当于函数调用时传递信息的通道 注意 每个参数必须指明类型函数不能单独运行 函数可以被主函数或其它函数调用 也可以调用其它函数 intmax2 intx inty if x y returnx elsereturny 函数头 函数体 练习 定义函数min2求两个浮点数的最小值 关系运算符 若表达式成立 则结果为1 否则为0例若b为3 C分别为 2 3 6 求表达式的值b c0 c 5 比较两个数 整数 浮点数 a b是否相等 0 c 5 整数 if a b 浮点数 if fabs a b 1E 6 if语句 if 表达式 语句 intmax2 intx inty intmax max x if y max max y returnmax if 表达式 语句1 else语句2 表达式 即条件 要用一对圆括号括起来 如果语句1或语句2有多于一条语句要执行时 必须使用 把这些语句括住 intmax2 intx inty if x y returnx elsereturny 嵌套条件语句else语句与最近未匹配的一个if语句匹配 如果if和else的数目不一样 可以用 来确定匹配的关系 例intx 5 y 0 z 0 1 if x 0 if y 1 z 1 elsez 2 2 if x 0 if y 1 z 1 elsez 2 判断某一年份year是否是闰年地球绕太阳公转一周叫做一回归年 一回归年长365日5时48分46秒公历规定 平年一年有365日 比回归年短0 2422日 四年共短0 9688日 故每四年增加一日 但四年增加一日比四个回归年又多0 0312日 400年后将多3 12日 故在400年中少设3个闰年 也就是在400年中只设97个闰年验证 公元100年 公元1000年 公元2000年 判断闰年 处理 计算 year 是闰年不是闰年 函数leapyear 判断闰年 实现 是闰年 某年能被4整除 某年能被400整除 是闰年 某年不能被100整除 intleapyear intyear intleap 0 if year 4 0 if year 100 0 leap 1 elseif year 400 0 leap 1 returnleap 令 表示是 表示不是某年能被4整除 year 4 0 练习 输入三角形的三边 判断三角形的形状 等腰 等边 直角 等腰直角 直角 等腰 三角形 等边 等腰直角 不是三角形 任意两边之和都不大于第三边 三边相等 两边相等 有直角 有直角 等边 等腰直角 等腰 直角 一般 若先做预处理 将最长边放到C中 则判断条件可以简化 如何测试 等腰直角三角形 自己上机实现本题 不是三角形 收款打折程序 编写一个收款程序 计算购买某物品的总价 该物品的单价为5元 公斤 购买5公斤以上打9折 10公斤以上打8折 20公斤以上打7折 50公斤以上打6折 100公斤以上打5折 收款打折判断逻辑 s s 1 n 5 n 10 n 10 n 20 n 50 s s 0 9 n 5 n 20 n 50 n 100 n 100 s s 0 8 s s 0 7 s s 0 6 s s 0 5 每公斤5元 总价 s n 5 阶梯式结构 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 else语句n 从上到下逐个对条件进行判断 一旦发现条件满足点就执行与它有关的语句 并跳过其它剩余阶梯 若没有一个条件满足 则执行最后一个else语句n 最后这个else常起着 缺省条件 的作用 收款打折程序 includefloatdiscount floatn intmain floatn printf n您要买多少公斤 scanf f floatdiscount floatn floats s n 5 if n 5 s s 1 按购买斤数计算打折后的总价elseif n 10 s s 0 9 elseif n 20 s s 0 8 elseif n 50 s s 0 7 elseif n 100 s s 0 6 elses s 0 5 returns 练习 将百分制成绩转换成等级制 0 59为不及格60 69为及格70 79为中80 89为良90 100为优 条件运算符 一般形式 expr1 expr2 expr3max x y x y 优先级仅高于赋值运算和逗号运算 自右向左结合a b a c d c d a b a c d c d 例求 x printf d d n x 0 x x 库函数intabs int longlabs long doublefabs double intmax2 intx inty intmax max x y x y returnmax 练习 求输入的4个数的最小值 用函数来交换两个变量的值 为什么要使用函数控制任务的规模控制变量的作用范围由多人分工协作完成程序的开发重新利用已有的 调式好的 成熟的程序模块 函数 处理 计算 ab 函数swap includevoidswap floata floatb intmain floata b printf 请输入两个数 scanf f f 函数分为求值 判断 操作 交换两个变量思路 有两个瓶子A和B 分别盛放醋和酱油 要求将它们互换 交换 思考 各步骤的顺序是不是固定的 A B C voidswap floata floatb floatc c a a b b c 变量的作用域与存储类型 变量定义格式 存储类型 数据类型变量表 变量的存储类型auto register static extern作用域 局部变量 全局变量生存期 静态变量 动态变量存储器 寄存器 静态存储区 动态存储区 intsum autointa b c registerinti staticfloatx y 局部变量 内部变量 在函数内或复合语句中定义的变量 形参只在本函数或本复合语句内有效存储类型 auto register static 默认为auto main中定义的变量只在main中有效不同函数中同名变量 占不同内存单元 defineN5 includeintmain inti inta N 1 2 3 4 5 for i 0 i N 2 i inttemp temp a i a i a N i 1 a N i 1 temp for i 0 i N i printf d a i return0 运行结果 54321 全局变量 外部变量 在函数外定义的变量有效范围 从定义变量的位置开始到本源文件结束 及有extern声明的其它源文件存储类型 缺省extern 或static外部变量声明 extern数据类型变量表 应尽量少使用全局变量 全局变量在程序全部执行过程中占用存储单元降低了函数的通用性 可靠性 可移植性降低程序清晰性 容易出错 定义说明次数 只能1次可说明多次位置 所有函数之外函数内或函数外分配内存 分配内存 可初始化不分配内存 不可初始化 若外部变量与局部变量同名 则外部变量被屏蔽 交换两数全局变量实现 includeinta b 全局变量voidswap intmain printf 请输入两个数 scanf f f 函数定义voidswap intc c a a b b c 函数参数传递 地址传递 函数调用时 将数据的存储地址传递给形参 双向 传递 形参与实参占用同一片存储单元 1234 a pa 0 x0012ff7c 主调函数 intmain swap 0 x0012ff7c 被调函数 voidswap int pa int pb printf d pa a 交换两数地址传递 includevoidswap int pa int pb intmain printf 请输入两个数 scanf f f 函数定义voidswap int pa int pb intc c pa pa pb pb c a b ca c bc a bb a cb c ac b a a b a c 输出a b c 输出b c 输出c b 输出c a b b c 输出b a c 输出a c 输出c a 输出c b a 对4个数 按从小到大输出 排序 反复 将相邻两数按从小到大排列 练习 有三个数a b c 按小大顺序把它们打印出来 动态变量与静态变量 生存期静态变量 从程序开始执行到程序结束动态变量 从包含该变量定义的函数开始执行至函数执行结束 自动变量auto 局部变量缺省为自动变量 automaticvariable autointx y 等价intx y voidprt void intmain intx 1 intx 3 prt printf 2ndx d n x printf 1stx d n x return0 voidprt void intx 5 printf 3thx d n x 37 用static声明局部变量 includeintfact inti intmain inti for i 1 i 5 i printf d fac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论