c语言作业4A,计算机C语言4a.ppt

第4章函数 4 1结构化程序设计与C程序结构4 1 1结构化程序设计的特征与风格由三种基本控制结构 顺序结构 选择结构和循环结构构成采用自顶向下 逐步求精的方法对其进行分析和设计在设计较复杂的程序时 我们一般采用的方法是 把问题分成几个部分 每部分又可分成更细的若干小部分 逐步细化 直至分解成很容易求解的小问题 这样的话 原来问题的解就可以用这些小问题来表示 4 1 2模块与函数一个大任务分成多个功能模块 功能模块则由一个或多函数实现 结构化化的程序设计是靠设计函数和调用函数实现的 C是结构化程序设计语言 C程序结构 C是函数式语言必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始 在main中结束函数不能嵌套定义 可以嵌套调用 函数分类从函数定义角度标准函数 库函数 由系统提供用户自定义函数从函数调用之间数据传递角度无参函数有参函数从返回值角度有返回值函数无返回值函数 使用库函数应注意 1 函数功能2 函数参数的数目和顺序 及各参数意义和类型3 函数返回值意义和类型4 需要使用的包含文件 4 2函数的定义一 一般格式 合法标识符 函数返回值类型缺省int型无返回值void 函数体 例有参函数 现代风格 intmax intx inty intz z x y x y return z 例无参函数printstar printf n 或printstar void printf n 函数定义可放在主函数之前 也可放在主函数之后 二 函数的返回值返回语句形式 return 表达式 或return表达式 或return 功能 使程序控制从被调用函数返回到调用函数中 同时把返值带给调用函数说明 函数中可有多个return语句若无return语句 遇 时 自动返回调用函数若函数类型与return语句中表达式值的类型不一致 按前者为准 自动转换 函数调用转换void型函数 例无返回值函数voidswap intx inty inttemp temp x x y y temp 例函数返回值类型转换 includemain floata b intc scanf f f 4 3函数的调用一 调用形式函数名 实参表 说明 实参与形参个数相等 类型一致 按顺序一一对应实参表求值顺序 因系统而定 VC 6 0自右向左 includeintf inta intb intc if a b c 1 elseif a b c 0 elsec 1 return c main inti 2 p p f i i printf d p 例参数求值顺序 运行结果 0 二 调用方式函数语句 例printstar printf Hello World n 函数表达式 例m max a b 2 作为其他函数实参 例printf d max a b m max a max b c 三 函数声明对被调用函数要求 必须是已存在的函数库函数 include用户自定义函数 函数声明函数声明一般形式 函数类型函数名 形参类型 形参名 作用 告诉编译系统函数类型 参数个数及类型 以便检验函数定义与函数声明不同函数声明位置 程序的数据说明部分 函数内或外 下列情况下 可不作函数声明若函数返值是char或int型 系统自动按int型处理被调用函数定义出现在主调函数之前 例函数声明举例 includemain floatadd float float functiondeclaration floata b c scanf f f 四 函数参数及其传递方式1 形参与实参形式参数 定义函数时函数名后面括号中的变量名实际参数 调用函数时函数名后面括号中的表达式 例比较两个数并输出大者 includemain inta b c scanf d d 说明 实参必须有确定的值形参必须指定类型形参与实参类型一致 个数相同若形参与实参类型不一致 自动按形参类型转换 函数调用转换形参在函数被调用前不占内存 函数调用时为形参分配内存 调用结束 内存释放 四 函数参数及其传递方式1 形参与实参形式参数 定义函数时函数名后面括号中的变量名实际参数 调用函数时函数名后面括号中的表达式 例计算x的立方 includefloatcube floatx return x x x main floata product printf Pleaseinputvalueofa scanf f x 1 2 1 2 1 728 2 参数传递方式值传递方式方式 函数调用时 为形参分配单元 并将实参的值复制到形参中 调用结束 形参单元被释放 实参单元仍保留并维持原值特点 形参与实参占用不同的内存单元单向传递 例交换两个数 includemain intx 7 y 11 printf x d ty d n x y printf swapped n swap x y printf x d ty d n x y swap inta intb inttemp temp a a b b temp 地址传递 以后详细介绍 方式 函数调用时 将数据的存储地址作为参数传递给形参特点 形参与实参占用同样的存储单元 双向 传递实参和形参必须是地址常量或变量 ch9 3 c swap p1 p2 int p1 p2 intp p p1 p1 p2 p2 p main inta b scanf d d 例交换两个数 4 4函数的嵌套调用与递归调用一 函数的嵌套调用C规定 函数定义不可嵌套 但可以嵌套调用函数 例求三个数中最大数和最小数的差值 includeintdif intx inty intz intmax intx inty intz intmin intx inty intz voidmain inta b c d scanf d d d intdif intx inty intz returnmax x y z min x y z intmax intx inty intz intr r x y x y return r z r z intmin intx inty intz intr r x y x y return r z r z 二 函数递归调用函数调用它本身 称为递归 直接在函数内调用自己为直接递归 通过别的函数调用自己为间接递归 说明C编译系统对递归函数的自调用次数没有限制每调用函数一次 在内存堆栈区分配空间 用于存放函数变量 返回值等信息 所以递归次数过多 可能引起堆栈溢出 voida a voida b voidb a 递归在解决某些问题中 是一个十分有用的方法 因为其一 有的问题它本身就是递归定义的 其二 它可以使某些看起来不易解决的问题变得容易解决 写出的程序较简短 例求n的阶乘 includeintfac intn intf if n 0 printf n 0 dataerror elseif n 0 n 1 f 1 elsef fac n 1 n return f main intn y printf Inputaintegernumber scanf d 例 问题 第1个月有1对兔子过2个月 兔子就可每个月生1对兔子问第n个月有多少对兔子 分析 设第n个月有f n 对兔子根据题意有f 0 0 f 1 1f n f n 1 f n 2 f n 1 前一个月的兔子数f n 2 本月生的兔子数 includemain longf intn intn printf ninputn scanf d 调用函数f n 例 辗转相除法求最大公约数 求m和n的公约数算法if m n 0n是公约数 else求n和m n的公约数 includevoidmain intm n t a b intgcd intm intn scanf d d

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值