虎贲c语言第七章

上传人:kms****20 文档编号:51717051 上传时间:2018-08-16 格式:PPT 页数:46 大小:382.50KB
返回 下载 相关 举报
虎贲c语言第七章_第1页
第1页 / 共46页
虎贲c语言第七章_第2页
第2页 / 共46页
虎贲c语言第七章_第3页
第3页 / 共46页
虎贲c语言第七章_第4页
第4页 / 共46页
虎贲c语言第七章_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《虎贲c语言第七章》由会员分享,可在线阅读,更多相关《虎贲c语言第七章(46页珍藏版)》请在金锄头文库上搜索。

1、第7章 函数_ 虎贲讲师:路谨铭_章节知识点:7.1 函数概述及定义 7.2 函数的声明、调用及返回值 7.3 函数的嵌套调用 7.4 函数的递归调用 7.5 数组与函数 7.6 变量的作用域 7.7 变量与函数的存储分类 7.8 函数的参数传递笔试考点分布知识点所占分值考试概率难易程度掌握基本库函数的使用2分30%函数的定义4分60%函数的递归调用4分100%函数的嵌套调用2分100%函数的声明形式2分70%函数参数的传递2分90%数组与函数6分100%知识点所占分值考试概率难易程度函数调用10分33.3% 函数参数的正确 使用(填空)5分40%机试考点分布与分析7.1 函数概述及定义(1)

2、一个程序是由预编译部分和一个main函数组成,函数 是程序的基本单位。 (2)函数是C源程序的基本模块,通过对函数模块的调用 实现特定的功能。 (3)函数的分类 从函数的定义角度:库函数、自定义函数。 从返回值的角度划分:有返回值函数、无返回值函数。 从函数的参数传递角度划分:无参函数、有参函数。函数的定义1.无参函数的定义形式:类型标识符 函数名( )声明部分执行部分类型标识符指本函数的返回值类型 ,包括整型、浮点型、字符型以及指针 类型等等。函数名是用户定义的标识符 ,函数名后有一对空括号,必不可少。 我们发现我们自定义的函数和main函数 结构非常相似,同样包括声明部分和执 行部分。 说

3、明:当我们不需要返回值类型时, 函数类型即为空类型,我们在函数名前 面添加void即可。 例如:我们可以改写一个函数定义:void huben()printf (“虎贲欢迎您 n”);类型标识符 函数名(形式参数表列)声明部分执行部分 这里添加了一个形式参数表列,在形参表列中给出的 参数称为形式参数,简称形参,又叫虚参,它们由数据 类型加变量名组成,各参数之间用逗号间隔。当函数被 调用时,主调函数将赋予这些形式参数实际的值。2.有参函数定义的一般形式例如:假设我们定义一个绝对值函数:int jueduizhi(int n) /*定义了一个名叫jueduizhi的函数*/if (n=0) ret

4、urn n; /*判断n是否大于0,大于0返回n*/ else return n; /*否则返回-n*/章节知识点:7.1 函数概述及定义 7.2 函数的声明、调用及返回值 7.3 函数的嵌套调用 7.4 函数的递归调用 7.5 数组与函数 7.6 变量的作用域 7.7 变量与函数的存储分类 7.8 函数的参数传递7.2 函数的声明、调用及返回值例7.1: int jueduizhi(int n) /*先定义了一个名叫jueduizhi的函数*/if (n=0) return n; /*如果n=0,则返回n的值*/else return n; /*否则,返回-n的值*/ main()int j

5、ueduizhi(int n); /*对jueduizhi函数的声明*/int x,y;scanf(“%d“,y=jueduizhi(x); /*对jueduizhi函数的调用*/printf(“%d的绝对值是%dn“,x,y);函数声明的一般形式为:类型说明符 被调函数名(类型 形参,类型 形 参);在例7.1中主调 main函数就对被调jueduizhi函 数进行了声明:int jueduizhi(int n);如果函数的返回值是整型,可以不对被调函数 作说明,这时系统按整型处理。另外当被调函数定义出现 在主调函数之前时,可以直接调用。在例7.1中,函数jueduizhi函数的定义放在 m

6、ain 函数之前,因此int jueduizhi(int n);这条声明语 句是可以省略的。7.2.1 函数的声明函数调用的一般形式是:函数名(实际参数表) 在例7.1中: main()int jueduizhi(int n); int x,y;scanf(“%d“,y=jueduizhi(x); /*对 jueduizhi函数的调用*/printf(“%d的绝对值是%dn“,x,y);7.2.2 函数调用7.2.3 函数的返回值(1)返回值必须通过return语句返回主调函数。即:return 表达式;或 return (表达式);说明:对于一个函数,每次只能使用一个return 语 句,只

7、能返 回一个函数值。 (2)函数返回值的类型应和主调函数中的类型保持一致。 (3)大多数情况下不需要返回函数值,只需将类型说明符写为 ”void”,即空类型。int jueduizhi(int n) /*先定义了一个名叫jueduizhi的函数*/if (n=0) return n; /*如果n=0,则返回n的值*/else return n; /*否则,返回-n的值*/章节知识点:7.1 函数概述及定义 7.2 函数的声明、调用及返回值 7.3 函数的嵌套调用 7.4 函数的递归调用 7.5 数组与函数 7.6 变量的作用域 7.7 变量与函数的存储分类 7.8 函数的参数传递7.3 函数的

8、嵌套调用语言不允许嵌套定义,但是允许函数的嵌套调用。即在被调函数中 又调用了其它函数。如图所示:#include“stdio.h“ void f2( ) printf(“进入被调函数2.n“); void f1( ) printf(“进入被调函数1.n“);f2( ); /*在f1函数中调用了f2函数*/printf(“回到被调函数1.n“); main() printf(“进入主函数.n“);f1( ); /*在main函数中调用了f1函数*/printf(“回到主函数.n“); 例 7.2 函数嵌套7.4 函数的递归调用一个函数在它的函数体内调用它自身称为递归调用, 这种函数称为递归函数。

9、例如: int f(int n)int sum;if(n=1)sum=1; else sum= f(n-1)*n;return sum; #include long jiecheng(int n) long sum;if(n=0|n=1)sum=1;else sum=jiecheng(n-1)*n; /*利用递归函数实现阶乘*/return(sum); main() int n;long y;printf(“n请输入一个数字:n“);scanf(“%d“,y=jiecheng(n); /*调用jiecheng函数,并且把返回值赋值给y。*/printf(“%d!=%ld“,n,y); 例7.3

10、 用递归函数计算n!章节知识点:7.1 函数概述及定义 7.2 函数的声明、调用及返回值 7.3 函数的嵌套调用 7.4 函数的递归调用 7.5 数组与函数 7.6 变量的作用域 7.7 变量与函数的存储分类 7.8 函数的参数传递7.5 数组与函数7. 5. 1 数组元素作函数实参7. 5. 2 数组名作为函数参数数组也是一种数据类型,所以数组也可以作为函数的参数来使用, 进行数据传送。数组用作函数参数时有两种形式,一是把数组元素作为 实参使用,相当于把数组元素当作了普通变量;一是把数组名作为函数 的形参和实参使用,数组名是一个地址常量,所以数组名传递的数据是 地址值。 7.5.1 数组元素

11、作函数实参例7.5:判别一个整数数组中各元素的值,若大于0 则输出,若小于等于0则输出0值。void f(int n)if(n0) printf(“%d “,n); else printf(“%d “,0);main()int a10,i;printf(“请输入10个整数:n“);for(i=0;i int f(int a) /*定义了变量a,a的作用域从这里开始*/ int b; /*定义了变量a,a的作用域从这里开始*/ b=a+1; return b; /*变量a、b的作用域结束*/ main() int x=1,y; /*变量x、y的作用域就只能是main函数*/y=f(x);例7.8

12、:全局变量的说明符为extern。全局变量也称为外部变量,它 一旦定义,即可在相应的函数内直接使用,而不需要再去定义 。 例如:int a,b; /*外部变量*/int f() main() /*主函数* 在本例中,a、b既是全局变量,那么在f函数、main函数中都可直接使用 。7.6.2 全局变量例7.9:求两数之中最大的数字。 int a=1,b=2; /*a,b为外部变量*/ max(int a,int b) /*a,b为局部变量*/ int c;c=ab?a:b;return(c); main() int a=3;printf(“%dn“,max(a,b); 在一个源文 件中如果外部变

13、 量与局部变量同 名,则在局部变 量的作用范围内 ,外部变量被“屏 蔽”,以局部变量 为准。7.7 变量与函数的存储分类C语言中变量定义的完整形式是:存储类别 数据类型 变量名; 存储类别由“ ”括起,表示该项不是必须的,是可选部分。用于指定存储类别的关键字包括: static:静态的,表示所定义的变量是静态变量; auto:自动的,表示所定义的变量是自动(动态)变量; resgiter:寄存器的,表示该变量地址不在内存,而是分配到寄存器中。 7.7.1 变量的存储分类变量的存储类别决定了变量的生存期,即变量的值何时 存在。从变量值存在的时间角度来看,可以将变量分为两大 类:静态变量和动态变量

14、。 1、静态变量 (关键字static)静态变量是在编译时分配存储空间,所占存储单 元直到程序结束时才释放,它的值在程序运行过程中 一直存在。且变量的初始化只进行一次。静态变量包括:(1)全局变量:全局变量总是静态分配的,不能使用 auto、resgister关键字定义全局变量;关键字static用于全 局变量定义时,具有特定含义:将限制该变量只在当前文件 有效,不能被其它文件访问。(2)局部变量: 省略变量存储类别时,局部变量默认情 况下为auto类型,存储在动态存储区中。用static关键字可 以定义一种特殊的局部变量静态局部变量,指定将局部 变量分配在静态存储区中。例7.10 分析以下程序运行后的输出结果:fun(int a) int b=0; static int c=3;b+;c+;return (a+b+c); main() int i,a=5;for(i=0;i3;i+)printf(“%d%d”,i,fun(a); 第几次调用调用时初值调用结束时的值 abcabc函数值 第1次调用50351410 第2次调用50451511 第3次调用50551612通过对fun函数的分析可知:当函数执行结束后,局部静态变量所占存储单元并不释放,并保 留变量的值,当再次调用该函数时,不再执行初始化语句。 2.自动变量(动态变量)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号