资源目录
压缩包内文档预览:(预览前5页/共46页)
编号:74277633
类型:共享资源
大小:2.95MB
格式:RAR
上传时间:2020-04-19
上传人:独**
认证信息
个人认证
王**(实名认证)
江苏
IP属地:江苏
20
积分
- 关 键 词:
-
语言程序设计
课件
黄维通
- 资源描述:
-
C语言程序设计(第3版)课件-黄维通,语言程序设计,课件,黄维通
- 内容简介:
-
清华大学黄维通设计制作 1 第5章函数及其应用 清华大学黄维通设计制作 2 本章主要内容 函数的定义与调用函数间的信息传递方式函数与数组递归函数与递归调用变量的存储类型及作用域 清华大学黄维通设计制作 3 函数是构成C程序的基本构件 C程序是一系列函数的集合 每个函数都具有相对独立的单一功能 一个完整的C程序由主函数 被调函数来构成 C语言中允许一个函数被多次调用 也允许函数调用自己本身 递归调用 清华大学黄维通设计制作 4 函数 库函数 内部函数 I O 分类 转换 诊断 目标控制 图形 接口 进程控制 处理 数学 文本窗口 内存 时间 日期 自定义函数 从使用角度划分 清华大学黄维通设计制作 5 5 1函数的定义与调用 清华大学黄维通设计制作 6 从函数定义形式的角度看 函数又可以分成有参函数和无参函数两大类 存储类型 函数返回值的数据类型 函数名 形式参数表及其说明 内部变量说明语句 可执行语句 5 1 1函数的定义 intabc inta intb intc d c a b d a b 清华大学黄维通设计制作 7 存储类型 函数返回值的数据类型 函数名 形式参数表及其说明 内部变量说明语句 可执行语句 缺省为int 若无参写void 由主调函数初始化并传递 属内部变量 寿命和可见性仅限于函数内部 清华大学黄维通设计制作 8 一般调用形式是 函数名 实参表 5 1 2函数的调用 清华大学黄维通设计制作 9 1 直接以函数引用语句的形式出现例如 call function x y z scanf d d d i j k 2 函数在表达式中出现例如 y 8 25 min x y function n 3 在函数引用中以实参的形式出现例如 y cos tg x 也称嵌套调用 清华大学黄维通设计制作 10 例 编写函数实现xn n为整数 功能longfun longx intn longm 1 m存放最后结果if n 0 幂指数 0for n 0 n 求n个x的乘积m x elsem 1 n 0时 m的0次幂 1return m 函数通过return或指针返回结果 若return中表达式类型与函数类型不一致 则转换为函数类型 无返回值的函数定义为void类型 清华大学黄维通设计制作 11 例 给定两整数M和N 求最大公约数根据欧几里德的辗转相除法 用较大的数除以较小的数 结果的余数和除数构成新的一对数 继续做上面的除法 直到大数被小数求尽 这个较小的数就是最大公约数 如 288 123 42 123 42 39 3 39 则3就是他们的最大公约数 清华大学黄维通设计制作 12 1 辗转相除法求最大公约数的函数 include stdio h intgcd intm intn inttemp k while n 0 temp m n m n n temp k m return k 2 调用gcd函数的主函数voidmain intm n j temp scanf d d 清华大学黄维通设计制作 13 值的传送 先求实参值 然后传送给相应的形参 5 2函数间的信息传递方式 信息传递方式 地址传送 实参是地址名 如数组名 或指针名 则将该地址或指针传送给相应形参 清华大学黄维通设计制作 14 1 当形参是变量名时 实参可以是一个可求值的表达式 包括常数 已赋值的变量名 5 2 1实参 形参之间的信息传递 清华大学黄维通设计制作 15 下面的代码试图实现数据顺序交换 分析代码特点 include stdio h voidswap floatf1 floatf2 floattemp temp f1 f1 f2 f2 temp voidmain floatx y scanf f f 3 4567 89x 3 456000y 7 890000 doswap x 3 456000y 7 890000 x和y没交换运行结果不通过实 形参传递 清华大学黄维通设计制作 16 函数返回值为定义的函数类型 voidmain floata b c d inte printf Pleaseinputthreedatas n scanf f f f 返回值类型应为定义的函数类型 此为错误程序 17 2 实参可以是调用另一个函数的返回值 include stdio h include math h voidmain intj doublex y scanf lf lf 18 例 输入任意的正数n n 2 求nn 1 include stdio h include math h voidmain floatn i j printf Entern scanf f 若输入n 5时 其结果应是nn 1 54 625 但实际输出却是nn 1 3125 若将语句 i pow j n 改为 i pow j n 输出则是 nn 1 625 正确 这里关键是要掌握前减和后减的区别 19 1利用return语句传递函数调用的结果 例如下面的sign函数 include stdio h intsign intx if x 0 return 1 elseif x 0 return 0 elsereturn 1 voidmain inti j for j 1 j 2 j i sign j printf ni d j d i j 5 2 2函数调用结果的返回 可根据需要设置多个return语句 但调用函数时仅执行其中一个 所以最多只返回一个值 清华大学黄维通设计制作 20 2利用全局变量传递数据 include stdio h intsum voidplus intx inty sum x y voidmain inti j printf Enteriandjplease scanf d d 清华大学黄维通设计制作 21 3void类型函数 voidfuncf floata floatb floatf if a 0 输出在被调函数内完成 不必返回结果 无return语句 22 无返回型函数的调用voidprintstar printf n voidprint message printf TsinghuaUniversity n printf CopyrightProtected n voidmain printstar print message printstar 清华大学黄维通设计制作 23 本节主要介绍用数组元素 数组名 字符数组和多维数组作函数的参数 实现函数间数据传送的方法 5 3函数与数组 数组作为参数时的情况 数组元素作实参 与单个变量一样数组名作函数参数 形 实参数都应是数组名或指针实参数组与形参数组的大小可以不同 但实参 形参 清华大学黄维通设计制作 24 include stdio h include math h voidmain floata 10 b 0 inti for i 1 i0 b b sqrt a i printf b f n b 5 3 1数组元素作实参 清华大学黄维通设计制作 25 5 3 2一维数组名作实参 例 求100名职工的平均薪水 include stdio h floataverage floatarr 100 inti floataver sum arr 0 for i 1 i 100 i sum sum arr i aver sum 100 return aver voidmain floatsal 100 aver inti for i 0 i 100 i scanf f floataverage arr floatarr 100 26 例 编写求矩阵乘积的函数 include stdio h voidmatrixmul intx 2 3 inty 3 2 intc 2 2 intm intk intn inti j p printf m d k d n d n m k n for i 0 i m i 矩阵x为m行k列for j 0 j n j 矩阵y为k行n列 c i j 0 矩阵z为m行n列for p 0 p k p c i j x i p y p j 矩阵相乘 5 3 3多维数组名作参数 27 voidmain inta 2 3 b 3 2 c 2 2 i j for i 0 i 2 i 初始化矩阵a和bfor j 0 j 3 j scanf d d 清华大学黄维通设计制作 28 例 将任意两个字符串进行连接 include stdio h voidconnect str charstr1 50 charstr2 20 inti 0 j 0 while str1 i 0 求str1的长度i while str1 i str2 j 0 连接str1 i 0 5 3 4字符数组作函数的参数 voidmain charstr1 50 str2 20 scanf s s str1 str2 connect str str1 str2 printf s str1 清华大学黄维通设计制作 29 5 4递归函数与递归调用 清华大学黄维通设计制作 30 inta intn intd c b d a c 5 4 1递归的概念 定义 在调用一个函数的过程中又直接或间接地调用了该函数本身 清华大学黄维通设计制作 31 函数的嵌套调用 调用一个函数过程中又调用了另一个函数如果嵌套的是本身函数 就是递归调用 清华大学黄维通设计制作 32 要实现递归设计 首先要分析问题是否具有递归处理过程 该递归过程是什么 5 4 2递归程序的设计 递归最大缺点是效率低 原因如下 1 递归函数会带来大量的重复计算 例如n 程序 每一次递归函数调用都会带来前面的重复计算 大大降低效率 2 函数的每一次调用都需进行保留现场 传递参数以及恢复现场等操作 效率低 清华大学黄维通设计制作 33 例 用递归算法计算0 1 n include stdio h floatfac intn floatf if n 0 结束递归的条件 printf n 0 dataerror elseif n 0 n 1 f 1 elsef fac n 1 n return f voidmain intn i floaty 0 scanf d 清华大学黄维通设计制作 34 auto自动型extern外部型或全局型static静态型 5 5变量的存储类型及作用域 三种存储类型 存放在堆栈中 属临时存储 可被若干变量多次覆盖使用 存放在一般内存区域中 清华大学黄维通设计制作 35 auto型变量在函数内部定义 它局限于所在的函数 也称为局部变量 auto型变量定义的形式 auto 数据类型标识符变量名表 5 5 1auto型变量 auto可以省略 清华大学黄维通设计制作 36 func inta intb inti1 i2 charc1 c2 floata1 a2 intp1 p2 doubled1 d2 autointk auto型变量的作用范围局限于所在的花括号 函数的形参属于auto型变量其生命期在执行所属的函数这段时间区间 同名变量在不同函数中代表不同的含义 清华大学黄维通设计制作 37 extern型变量也称为外部变量 它是一种全局变量 在函数之外定义 其定义格式如下 extern 数据类型标识符变量名表 5 5 2extern型变量 extern标识符可省略 清华大学黄维通设计制作 38 全局变量与局部变量的应用 intf2 inta a a b c return a voidmain intx 5 u v u f1 x x v f2 x printf d d n u v include stdio h intb 1 c 2 intf1 inta intc intb 8 scanf d 局部变量与全局变量同名时 以局部变量为准 清华大学黄维通设计制作 39 外部变量定义与外部变量说明的不同 include stdio h intmax intx inty intz if x y z x elsez y return z voidmain externinta b printf d max a b inta 100 b 200 可以多次在函数内部说明外部变量 外部变量定义在函数之外 只能定义一次 移到最前 有何不同 extern删去有何结果 清华大学黄维通设计制作 40 全局变量在程序的整个执行过程都占用内存 注意 考虑程序的模块性 通用性 可读性 应少用全局变量 全局变量太多 当程序长且大时往往难以清楚的判断出各个瞬时各个全局变量的值 若函数中用到以前未定义过的参数 要用extern作外部变量说明 清华大学黄维通设计制作 41 静态变量 5 5 3static型变量 内部静态变量 外部静态变量 静态变量定义的一般形式为 static数据类型标识符变量名表 函数内定义 在源文件的开始和所有函数之外定义 清华大学黄维通设计制作 42 static和全局变量若不初始化 自动赋0static和全局变量初始化时必须用常量为其赋初值static型局部变量的初始化仅执行一次extern型的变量不能进行初始化 清华大学黄维通设计制作 43 include stdio h defineABC d d d d n inti 1 voidother void staticinta 2 staticintb intc 10 a a 2 i i 32 c c 5 printf ABC i a b c b a i 1a 0b 10c 0i 33a 4b 0c 15i 33a 0b 10c 8i 75a 6b 4c 15 voidmain staticinta intb 10 intc 0 voidother void printf ABC i a b c c c 8 other printf ABC i a b c i
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。