收藏 分享(赏)

(演示)计算机程序设计基础(c语言)-第5章+函数.ppt

上传人:wspkg9802 文档编号:4806923 上传时间:2019-01-14 格式:PPT 页数:31 大小:190.50KB
下载 相关 举报
(演示)计算机程序设计基础(c语言)-第5章+函数.ppt_第1页
第1页 / 共31页
(演示)计算机程序设计基础(c语言)-第5章+函数.ppt_第2页
第2页 / 共31页
(演示)计算机程序设计基础(c语言)-第5章+函数.ppt_第3页
第3页 / 共31页
(演示)计算机程序设计基础(c语言)-第5章+函数.ppt_第4页
第4页 / 共31页
(演示)计算机程序设计基础(c语言)-第5章+函数.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、第5章 函数,2,内容提要,函数定义、函数调用、函数原型、函数返回值 难点:函数的参数传递与返回值 全局变量、自动变量、静态变量、寄存器变量 难点:变量的作用域与存储类型,3,引子为什么用函数?,main() int a=2, int b=3; float ave; ave =(a+b)/2.0; printf(“Average:%f”, ave); ,main() int a=2, int b=3; float pow; pow=2*2*2; printf(“power:%f “, pow); ,4,main() int a=2, b=3,c=4,d=5; float ave1,ave2,a

2、ve; ave1 =(a+b)/2.0; ave2=(c+d)/2.0; ave=(ave1+ave2)/2.0; printf(“Average:%f”, ave); ,如果求更多的数的平均值,是不是有些麻烦呢?那么求 ab, cd, ,多个 又是怎么做更简单的呢?是不是求45,也要自己写4*4*4*4*4呢?,用到了库函数pow(x,y),用来计算xy ,使程序简单,明了.定义在math.h中.类似的,求平均值,能不能也用一个函数表示.,main() int a=2, b=3,c=4,d=5; float ave1,ave2,ave; ave1=average(a,b); ave2=ave

3、rage(c,d); ave=average(ave1,ave2); printf(“Average:%f”, ave); ,5,#include float average(int x, int y) float result;result = (x + y) / 2;return result; main() int a=2, b=3,c=4,d=5;float ave1,ave2,ave;ave1=average(a,b);ave2=average(c,d);ave=average(ave1,ave2);printf(“Average:%f”, ave); ,本章的主要内容就是学习如何定

4、义自定义函数,如何使用.,6,函数定义(definition),一般形式:返回值类型 函数名(类型 参数1,类型 参数2, ) 函数体 return 表达式; 如果没有参数,则应该用void注明 返回值类型与return语句配合 如果不需要返回值,则应该用void定义返回值类型,同时return语句之后不再需要任何表达式 当函数执行到return语句时,就中止函数的执行,返回到调用它的地方.教材164页,7,例5.1a 计算两个整数的平均数教材165页,/*函数功能: 计算平均数函数入口参数: 整型x,存储第一个运算数整型y,存储第二个运算数函数返回值: 平均数*/ int Average(i

5、nt x, int y) int result;result = (x + y) / 2;return result; ,8,函数调用,函数调用 一般格式:函数名(实参表列) 单向值传递 调用函数时,必须提供所有的参数 提供的参数个数、类型、顺序应与定义时相同,9,函数调用,有返回值时 放到一个数值表达式中,如c = max(a,b); 作为另一个函数调用的参数,如c = max(max(a,b),c);printf(“%dn“, max(a,b); 无返回值时 函数调用表达式,如display(a,b);,10,例5.1b 使用了Average函数的main(),main() int a =

6、 12;int b = 24;int ave;ave = Average(a, b);printf(“Average of %d and %d is %d.n“,a, b, ave); 教材165-167页,11,函数的参数和函数的值,形式参数(形参) 在定义函数时函数名后面括弧中的变量名 必须指定形参的类型 实际参数(实参) 在主调函数中调用一个函数时,被调函数的函数名后面括弧中的参数(可以是一个表达式)实参可以是常量、变量或表达式,12,函数间的参数传递,形参和实参在内存中占用不同的内存单元 当主调函数调用被调函数时发生数据的传递, 只由实参传递给形参,且传递的是参数的值,即单向传递 实参

7、类型必须与形参相符 在函数被调用时才分配形参的存储单元。,13,函数间的参数传递图示,main() int a = 12;int b = 24;int ave;ave = Average(a, b);printf(“Average of %d and %d is %d.n“, a, b, ave); 教材165-167页,14,函数的定义与使用小结,函数定义:被调函数必须是存在的函数(库函数或自定义函数) 函数声明:(也称函数原型) 在主调函数中,对被调函数进行声明 格式: 返回值类型标识符 被调用函数名 (含类型说明的形参表) 函数调用 一般格式:函数名(实参表列) 教材167页,15,例5

8、.1,#include /*函数功能: 计算平均数函数入口参数: 整型x,存储第一个运算数整型y,存储第二个运算数函数返回值: 平均数*/ int Average(int x, int y) int result;result = (x + y) / 2;return result; main() int a = 12;int b = 24;int ave = Average(a, b); printf(“Average of %d and %d is %d.n“, a, b, ave); 教材167页,哪些是形参? 哪些是实参?,那个语句返回值? 返回谁的值? 返回给谁?,16,例5.1,#

9、include int Average(int x, int y); /*声明Average()函数*/ main() int a = 12;int b = 24;int ave = Average(a, b); printf(“Average of %d and %d is %d.n“, a, b, ave); /*函数功能: 计算平均数函数入口参数: 整型x,存储第一个运算数整型y,存储第二个运算数函数返回值: 平均数*/ int Average(int x, int y) int result;result = (x + y) / 2;return result; 教材168页,函数定义

10、? 函数原型? 调用?,17,变量的作用域,指在源程序中定义变量的位置及其能被读写访问的范围 分为 局部变量 全局变量 教材170页,18,局部变量,在语句块内定义的变量是内部变量,它只在本函数范围内有效,这种变量被称为局部变量.,说明: (1)main()中定义的变量,也只在main()中有效 (2)不同函数中可以使用相同名字的变量,他们代表不同的对象,互不干扰 (3)形参也是局部变量,在本函数中有效 (4)在复合语句中定义的变量,作用范围为该复合语句,float f1(int a) int b,c; char f2(int x,int y) int b,c; main() int m,n;

11、 ,19,例 局部变量的作用范围,void other(void) int i=16,a=100;printf(“-OTHER-n i:%d a:%dn“,i,a); main() int i=1,a=10,b=5;printf(“-MAIN-n i:%d a:%d b:%dn“,i,a,b);other();printf(“-MAIN-n i:%d a:%d b:%dn“,i,a,b);,20,例5.8 同名局部变量各自作用域,#include void GlobalPlusPlus(void); main() int global = 1;printf(“Before GlobalPlus

12、Plus(), it is %dn“, global);GlobalPlusPlus();printf(“After GlobalPlusPlus(), it is %dn“, global); void GlobalPlusPlus(void) int global = 1; printf(“Before +, it is %dn“, global);global+;printf(“After +, it is %dn“, global); ,教材173页,21,全局变量,在所有函数之外说明的变量称为外部变量,而外部变量是全局变量,它在所有函数中都是可见的。,说明 1.作用是增加了函数间数据

13、的联系渠道,利用全局变量的这个特性,可以在函数间传递数据,2.不在必要时不要使用全局变量 3.在同一个源文件中外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即不起作用,22,例5.7,#include int global; /*定义全局变量*/ void GlobalPlusPlus(void);main() global = 1;printf(“Before GlobalPlusPlus(), it is %dn“, global);GlobalPlusPlus();printf(“After GlobalPlusPlus(), it is %dn“, global

14、); void GlobalPlusPlus(void) printf(“Before +, it is %dn“, global);global+;printf(“After +, it is %dn“, global); ,Before GlobalPlusPlus(), it is 1 Before +, it is 1 After +, it is 2 After GlobalPlusPlus(), it is 2,教材173页,23,例 全局变量与局部变量同名,#include int a=3,b=5; max(int a,int b) int c; c=ab?a:b; return

15、(c); main() int a=8; pirntf(“%d“,max(a,b); ,24,供用户使用的内存空间的情况,程序和数据分开存放, 数据分别存放在静态存储区和动态存储区,静态存储区:全局变量全部存放在其中,在程序执行时给全局变量分配存储区,程序执行完毕就释放. 动态存储区:存放(1)函数的形式参数:在调用时分配存储空间(2)自动变量(未加static声明的局部变量)(3)函数调用时的现场保护和返回地址(背诵),25,变量的存储类型,存储类型是指数据在内存中的存储方式.是编译器为变量分配内存的方式,它决定变量的生存期 .分类: 静态存储:系统给变量在程序运行期间分配固定的存储空间的方

16、式动态存储:系统给变量在程序运行期间根据需要进行动态的分配存储空间的方式具体包含四种:自动的(auto),静态的(static)寄存器的(register), 外部的(extern),26,变量的存储类别,auto(自动)变量 例如:int f(int a)auto int c=3; 包括函数中的定义的局部变量和函数形参。 动态分配存储空间,在函数被调时分配,调用结束时自动释放存储空间。变量中的值被释放 可以缺省,教材174页,27,static(静态)局部变量,static(静态)局部变量 例如:int f(int a) static m=3;该局部变量占用的存储空间不释放, 意味着保留该变

17、量的原值属于静态存储类别,在静态存储区内分配存储单元,在程序的整个运行期间都不释放。 在编译时赋初值,即只赋初值一次,以后每次调用函数时不再重新赋初值,而保留上次函数调用结束时的值。 定义时如果不赋值,编译时自动赋初值为0。 不能像全局变量一样被其他函数引用,28,例5.9,#include void Func(void); main() int i;for (i=0; i10; i+)Func(); void Func(void) int times = 1; /*自动变量*/printf(“Func() was called %d time(s).n“, times+); ,Func()

18、was called 1 time(s). Func() was called 1 time(s). Func() was called 1 time(s). Func() was called 1 time(s). Func() was called 1 time(s). Func() was called 1 time(s). Func() was called 1 time(s). Func() was called 1 time(s). Func() was called 1 time(s). Func() was called 1 time(s).,教材175页,29,例5.9,#i

19、nclude void Func(void); main() int i;for (i=0; i10; i+)Func(); void Func(void) static int times = 1; /*静态局部变量*/printf(“Func() was called %d time(s).n“, times+); ,Func() was called 1 time(s). Func() was called 2 time(s). Func() was called 3 time(s). Func() was called 4 time(s). Func() was called 5 ti

20、me(s). Func() was called 6 time(s). Func() was called 7 time(s). Func() was called 8 time(s). Func() was called 9 time(s). Func() was called 10 time(s).,教材175页,30,静态变量-习题5.3,#include int Square(int i) return i * i; main() int i = 0;i = Square(i);for ( ; i3; i+)static int i = 1;i += Square(i);printf(“%d,“, i);printf(“%dn“, i); ,自动变量i,静态变量i,31,思考题,1.解释下列术语:函数的定义、调用,变量的作用域、局部变量,全局变量,变量存储类别,自动变量,静态变量, 寄存器变量 . 2.习题5.1,5.2(作业),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报