C语言课件第6章函数1new.ppt_第1页
C语言课件第6章函数1new.ppt_第2页
C语言课件第6章函数1new.ppt_第3页
C语言课件第6章函数1new.ppt_第4页
C语言课件第6章函数1new.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1 第六章 模块化程序设计 函数 2 一 函数概述二 函数的定义及调用三 局部变量和全局变量四 变量的存储类别五 预编译命令 主要内容 3 本章要点 怎样定义函数 如何调用函数 如何声明函数 什么是函数的参数 在函数调用时 参数是如何传递的 在使用函数的过程中 要注意哪些问题 怎样确定函数的参数 如何使用局部变量和全局变量 什么是静态变量 4 怎样把多个函数组织起来 怎样用结构化程序设计的思想解决问题 怎样用函数嵌套求解复杂的问题 怎样用函数递归解决问题 预编译命令的作用 5 一 函数概述 使用结构化程序设计方法解决复杂的问题 把大问题分解成若干小问题 小问题再进一步分解成若干更小的问题 写程序时 用main 解决整个问题 用子函数解决小问题 main 调用解决小问题的子函数 这些子函数又进一步调用解决更小问题的函数 从而形成函数的嵌套调用 程序结构 6 C语言中的数学库函数 使用数学库中的函数时 应使用 include命令将数学头文件math h包含到程序中 数学函数可用来完成一些常用的数学计算 在使用函数时 通常按如下顺序书写 函数名 左圆括号 参数 或用逗号分开的参数列表 右圆括号 例如 printf 8 2f sqrt 900 0 说明如下 执行这条语句时 就会通过调用函数sqrt计算900 0的平方根 数900 0是函数sqrt的参数 函数sqrt的参数是double型 函数值也是double型 上述语句的打印结果为30 00 7 一 函数的定义 二 函数的调用 三 函数编程举例 四 函数的嵌套调用 五 函数的递归调用 二 函数的定义及调用 8 一 函数的定义 定义 函数是可重复使用的程序段 从其他的程序段中均可通过调用该函数来执行该函数所包括的程序段 函数的分类 库函数 由C语言系统提供定义如scanf printf 等函数自定义函数 需要用户自己定义如计算圆柱体体积函数cylinder 无参函数 不需要使用 代入 外来数据的函数有参函数 需要使用 代入 外来数据的函数 9 一 函数的定义 函数是指完成一个特定工作的独立程序模块 main 也是一个函数 一个C程序由一个main 或多个函数构成 程序中一旦调用了某个函数 该函数就会完成一些特定的工作 然后返回到调用它的地方 有的函数经过运算 得到一个明确的运算结果 并需要回送该结果 例如 函数cylinder 返回圆柱的体积 有的函数完成一系列操作步骤 不需要回送任何运算结果 10 1 不返回运算结果的函数定义 void函数名 参数表 函数实现过程return 这类函数通常用于屏幕输出等 表示不返回结果 在VC环境下函数的返回值类型不能省略 函数首部 函数体 可以省略return 11 例6 1输出5之内的数字金字塔 输出数字金字塔 includevoidpyramid 函数定义 inti j for i 1 i 5 i 需要输出的行数 for j 1 j 5 i j 输出每行左边的空格 printf for j 1 j i j 输出每行的数字 printf d i 每个数字的前后各有一个空格 putchar n 122333444455555 12 例6 2输出n之内的数字金字塔 输出数字金字塔 includevoidpyramid intn 函数定义 inti j for i 1 i n i 需要输出的行数 for j 1 j n i j 输出每行左边的空格 printf for j 1 j i j 输出每行的数字 printf d i 每个数字的前后各有一个空格 putchar n 122333444455555 13 举例 计算两个三角形面积 例6 3输入两个三角形三边长 分别求这两个三角形的面积 面积公式 s 其中 p a b c 2要求定义和调用函数triangle a b c 计算三角形的面积 14 include includeintmain doublea1 b1 c1 a2 b2 c2 p1 p2 s1 s2 printf 请输入第一个三角形的三边长 scanf lf lf lf 不用自定义函数的源程序 出现功能重复的语句需优化 15 例6 3自定义的函数triangle 分析 该函数须代入三边长度值 且有一结果值 首先定义求三角形面积的函数 doubletriangle doublea doubleb doublec doublep s 对语句中使用的变量进行定义 p a b c 2 s sqrt p p a r p b p c 计算面积 returns 返回结果 16 include includeintmain doublea1 b1 c1 a2 b2 c2 p1 p2 s1 s2 printf 请输入第一个三角形的三边长 scanf lf lf lf 例6 3该程序的main函数变为 例6 3的源程序由两个函数组成 他们之间是调用和被调用的关系 main函数调用triangle函数 17 doubletriangle doublea doubleb doublec doubles p p a b c 2 result sqrt p p a p b p c returns 函数定义 函数类型函数名 形参表 函数首部 函数体 函数实现过程return表达式 把函数运算的结果回送给主函数 只能返回一个值 函数返回值的类型 没有分号 18 形参变量的定义 类型1参数1 类型2参数2 类型n参数n参数之间用逗号分隔 每个参数前面的类型都必须分别写明 函数类型函数名 形参表 函数实现过程return表达式 不能写成doubler h doubletriangle doublea doubleb doublec doubles p p a b c 2 result sqrt p p a p b p c returns 19 doublecylinder doubler doubleh 函数首部 函数体 写在一对大括号内 doubleresult result 3 1415926 r r h 计算圆柱体积 returnresult 返回运算结果 分析函数的定义 函数类型 函数名 形参表 与函数类型一致 20 三 函数的调用 定义一个函数后 就可以在程序中调用这个函数 调用标准库函数时 在程序的最前面用 include命令包含相应的头文件 调用自定义函数时 程序中必须有与调用函数相对应的函数定义 21 1 函数调用的形式和过程 使用返回值 s triangle a b c printf f n triangle a b c 完成操作 pyramid 5 这也称为函数调用语句 常用于void类型函数的调用 常用于返回结果的函数的调用 常量 变量 表达式 函数名 实参表 22 函数调用的过程 计算机在执行程序时 从主函数main开始执行 如果遇到某个函数调用 主函数被暂停执行 转而执行相应的函数 该函数执行完后 将返回主函数 然后再从原先暂停的位置继续执行 函数遇return或最后的大括号 返回主函数 23 包含子函数的程序的执行过程 1 程序的执行从主函数的第一条语句开始 遇到函数调用时 暂停在主调函数中的执行 转去处理函数调用 为被调函数的形参变量分配内存单元 并将实参的值赋给形参变量 为函数内定义的内部变量分配内存单元 执行被调函数的函数体 直到遇到return语句 此时 将释放为形参变量和内部变量分配的内存单元 程序的执行流程又转回到主调函数 同时将return语句括号中表达式的值带回主函数 includevoidmain inta b c scanf d d intmax intx inty intz z x y x y return z 24 2 参数传递 函数定义时的参数被称为形式参数 简称形参 doubletriangle doublea doubleb doublec 函数调用时的参数被称为实际参数 简称实参 s1 triangle a1 b1 c1 实参 形参在参数传递过程中 实参把值复制给形参 形参和实参一一对应 数量一致 类型一致 顺序一致形参 变量 用于接受实参传递过来的值实参 常量 变量或表达式 单向传递 25 3 函数结果返回 函数返回的两种情况完成确定的运算 有一个运算结果返回给主调函数 完成指定工作 没有确定的运算结果需返回给主调函数 函数类型void 函数结果返回的形式 return表达式 return 表达式 26 对被调函数的声明和函数原型 当被调函数的定义出现在主调函数之后时 在主调函数中 使用函数原型对被调函数进行声明 函数原型的作用 函数原型告诉编译器函数返回值的数据类型 函数所要接收的参数个数 参数类型和参数顺序 编译器用函数原型校验函数调用 函数原型的两种书写格式 类型标识符函数名 参数1的数据类型 参数2的数据类型 类型标识符函数名 参数1的数据类型参数名1 参数2的数据类型参数名2 函数原型 用于声明被调函数 27 例6 4 定义判断奇偶数的函数even n 定义一个判断奇偶数的函数even n 当n为偶数时返回整数值1 否则返回整数值0 判断奇偶数的函数 inteven intn 函数首部 if n 2 0 判别n的奇偶性 return1 偶数返回1 elsereturn0 奇数返回0 如何调用该函数 28 例6 5 编写程序 输入变量m n的值 计算组合数 C m n m n m n m n floatfac intx inti floatt 1 for i 1 i x i t t i return t inputm n 53 Theresultis10 0 分析 将求阶乘的任务用子函数实现 主函数负责输入 调用函数进行计算 输出结果 includevoidmain floatc intm n floatfac intx printf inputm n scanf d d 29 四 函数编程举例 例6 6 输入精度值e 使用格里高利公式求 的近似值 精确到最后一项的绝对值小于e 要求定义和调用函数funpi e 求 的近似值 30 例6 6源程序 用格里高利公式计算 的近似值 精度为e include includeintmain void doublee pi doublefunpi doublee printf Entere scanf lf doublefunpi doublee intdenominator flag doubleitem sum flag 1 denominator 1 item 1 0 sum 0 while fabs item e item flag 1 0 denominator sum sum item flag flag denominator denominator 2 returnsum 4 Entere 0 0001pi 3 1418 31 例6 7判断素数的函数 例6 7 求100以内的全部素数 每行输出10个 素数就是只能被1和自身整除的正整数 1不是素数 2是素数 要求定义和调用函数prime m 判断m是否为素数 当m为素数时返回整数值1 否则返回整数值0 算法描述 对2 100之间的每个数进行判断 若是素数 则输出该数 for m 2 m 100 m if m是素数 printf d m prime m 0 32 例6 7源程序 include includevoidmain intcount m intprime intm count 0 for m 2 m 100 m if prime m 0 printf 6d m count if count 10 0 printf n printf n intprime intm inti n if m 1 return0 n sqrt m for i 2 i n i if m i 0 return0 return1 33 五 函数的嵌套调用 函数调用可以嵌套 即 在调用一个函数的过程中 又可以调用另一个函数 调用a函数 结束 调用b函数 例如 某个c程序中定义了3个函数 main a b 程序从主函数开始执行 执行过程如下图所示 返回 返回 34 四 局部变量和全局变量 局部变量在函数内定义的变量 包括形参 作用范围 本函数内部定义在复合语句内的变量作用范围 复合语句内部全局变量 外部变量 在函数以外定义的变量 不从属于任一函数 作用范围 从定义处到源文件结束 包括各函数 所以不同函数的同名变量互不干扰 35 例6 7在复合语句中定义局部变量 includevoidmain inta a 1 复合语句开始 intb 2 b a b a a b 复合语句结束 printf d a b 小范围内的临时变量 4 36 include stdio h intx 定义全局变量x intf intx 4 x为局部变量 returnx voidmain inta 1 x a 对全局变量x赋值 a f a的值为4 intb 2 b a b b的值为4 x x b 全局变量运算 printf d d a x 4 7 若局部变量与全局变量同名 局部变量优先 例6 7全局变量定义 37 变量作用范围示例 intx 1 voidmain inta 2 intb 3 f intt 4 voidf intx 5 b 6 inta 7 x a b b x 5b 6t 4a没定义 x b t a 38 自动变量 auto 普通的局部变量intx y autointx y charc1 autocharc1 函数调用时 定义变量 分配存储单元 函数调用结束 收回存储单元 全局变量 从程序执行开始 到程序的结束 存储单元始终保持 变量生命周期变量从定义开始分配存储单元 到运行结束存储单元被回收的整个过程 变量生命周期 39 static类型名变量表 作用范围 局部变量生命周期 全局变量 静态局部变量 40 includevoidfun intk 函数原型 voidmain intk for k 1 k 3 k fun k voidfun intk staticinta printf d a a

温馨提示

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

评论

0/150

提交评论