版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章第七章 函函 数数 7.1 7.1 函数的概念函数的概念标准标准库函数库函数 组成的组成的,而每一个模块常用来实现一个特定的功能。而每一个模块常用来实现一个特定的功能。 在在 C 语言中就是利用函数来实现模块功能的。语言中就是利用函数来实现模块功能的。 对于任何应用程序来说都是由若干个对于任何应用程序来说都是由若干个 程程序模块序模块 7.2 函数的定义和返回值函数的定义和返回值 1、常量、常量 2、变量、变量 3、表达式、表达式 4、指针值、指针值 7.3 函数的调用函数的调用在调用函数时,一般在主调函数和被调用函数之间有 信息传递 这是由函数中的来完成的。 7.4 调用函数和被调用函
2、数之间的参数传递调用函数和被调用函数之间的参数传递(即形参的值不能传回给实参) main() int a=100,b=200,c ; c =; printf(“c=%dn”, c); int int x,y ; int z ; z=(+x)+(+y) ; return( ); 当形参值在函 数中发生变化时, 且不影响调用它的 实参值的变化。 采用这种数据复制的参数传递方式,每次每个参数只能传递一个数据。 当希望通过形参的值的变化来改 变主调函数中变量的值,则可采用地 址传送方式传递数据。(即实现了利用参数来返回计算结果的功能)第七章第七章 函函 数数P144main() int a=100 ,
3、c ; func(&a); printf(“a=%dn”, a); int func( int *p ) int j ; j=*p+100 ; return(j) ; a20002000p&aa2000 从上面的分析中,我们可以得出,使用参数传递地址时,当从上面的分析中,我们可以得出,使用参数传递地址时,当 对形参作出的任何变动,都将影响实参的变化。所以,利用这个对形参作出的任何变动,都将影响实参的变化。所以,利用这个特性,可以在被调用函数中把它的处理结果送入某个参数的存储特性,可以在被调用函数中把它的处理结果送入某个参数的存储空间空间,函数返回时函数返回时,通过参数的地址就会
4、把处理结果带通过参数的地址就会把处理结果带 回调用函数回调用函数 请建立一个一维数组并为该数组存入10名学生某科考试成绩,然后调用一函数用以计算这10名学生的平均成绩。 main() int x=6,y=7,z=8,r ; r=f (x-,y+,x+y),z-); printf(“r=%dn”, r); f ( int a, int b ) int c ; c=a+b; return(c); 7.5 函数的递归调用函数的递归调用 语言的特点之一,就是允许函数的递归调用语言的特点之一,就是允许函数的递归调用 其特点是在其特点是在。 递归函数的结构十分简练,对于可以使用递归递归函数的结构十分简练,
5、对于可以使用递归 算法实现功能的函数,在算法实现功能的函数,在C 语言中都可以把它们编语言中都可以把它们编 写成递归函数。写成递归函数。 构造递归函数的关键是寻找构造递归函数的关键是寻找象数学中的递推函数,都可以用象数学中的递推函数,都可以用C语言中的递语言中的递归函数来实现。归函数来实现。 递归函数的典型例子是 的函数首先我们来分析一下阶乘计算的公式,并从中找出 X X XX X XX X X X 因此, 要想计算出,必须计算出 计算出 必须计算出由此类推,直到推到,返回后即可依次计算出 X X X X X X X X根据上面的分析我们知道,阶乘计算的递归算法可归纳如下: 第七章第七章 函函
6、 数数P111 int f(x) int x ; int y, z ; z =f(y) ; return(2*z) ; 递归函数的调用可分为递归函数的调用可分为int f1(x)int x ; int y, z ; z =f2(y) ; return(2*z) ; int f2(t)int t ; int a, c ; c =f1(a) ; return(3+c) ; main() printf(“%d”, age(5); age(n) int n; int c; if(n=1) c=10; else c = age(n-1)+2; return(c) ; main() int x=4 ; f
7、loat sum; sum=; printf(“%dn”,sum); float (int n) float f ; if(n= =1) f=1; else f=n*n+fac(n-1); return(f ); int w=3; (97.9)main() int w=10; printf(“%dn”, *w); fun(int k) if (k=0) return(w); return()* ); main() printf(“%dn”, ); fun(int x) int p; if (x=0)|(x=1) return(3); p=x-fun(x-2); return(p); mult(
8、x,y) int x,y; 1、下列程序的运行结果是、下列程序的运行结果是 2、函数采用的是下列哪种参数传递方式。、函数采用的是下列哪种参数传递方式。 mult(int n) f(int b ,int n) A) 比较串比较串s 和和 t 的长度的长度 B) 比较串比较串s 和和 t 的大小的大小 C) 比较串比较串s 和和 t 是否相等是否相等 D) 将串将串t 赋给串赋给串 s f(int a) 7.6 变量的变量的与与 是指在程序运行过程中其值可以发生是指在程序运行过程中其值可以发生变化的量。通常是用来表示在程序中对数据存储空间变化的量。通常是用来表示在程序中对数据存储空间 的一种抽象的
9、描述。的一种抽象的描述。 当我们在学习当我们在学习C语言中的变量时,必须要掌握语言中的变量时,必须要掌握 变变量的有关属性:量的有关属性: 1、若在同一个源文件中,如有全局变量与局部、若在同一个源文件中,如有全局变量与局部 变量同名时,则在局部变量的作用范围内,变量同名时,则在局部变量的作用范围内, 全局变量不起作用。全局变量不起作用。 2、设置全局变量的作用是、设置全局变量的作用是: 增加函数间数据联系的渠道。增加函数间数据联系的渠道。 由于同一个文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其它函数,相当于各个函数间有直接的传递通道。 在C语言中,
10、每一个变量和函数有两个属性:和数据的。 数据类型,如整型、实型等; 存储类别,指的是数据在计算机中的存储方式, 也可以说数据的 。 函数中的局部变量通常默认为动态分配存储空间的,即存储在动态存储区中。对它们分配和释放空间都是由编译系统自动处理的,因此这类局部变量也称为。 有时希望函数中的局部变量的值在函数调用结束后而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。 int int =0; int =3; b=b+1;c=c+1; return(a+b+c); fun( int a,int b) int m, i=2; i+=m+1; m=i
11、+a+b; return(m); main() int k=4,m=1,p; p=fun(k,m); prinf(“%d,”,p); p=fun(k,m); prinf(“%d,”,p); fun() static int a3=0,1,2; int i ; for(i =0; i 3; i +) ai +=ai ; for(i =0; i 3; i +) printf(“%d,”,ai ) ; return; 全局变量是在函数的外部定义的,编译时分配在内存的静态存储区。全局变量可以为程序中各函数所引用。 全局变量的调用。 我们知道一个C 语言程序可以有一个或多个源程序文件组成。如果程序是由多
12、个源文件组成时,为了保障某个全局变量能提供多个源文件中的函数调用,则可采全局变量的扩展调用。 ; ; ; int aa; aa=3; cc=9; x=5; printf(“1=%d,%d,%dn”, ) ; printf(“6=%d,%d,%dn”, ) ; a1.c; static int num=10; char cc; cc=100; x=x+1; printf(“2=%d,%d,%dn”, ) ; a2.c ; ; ; printf(“3=%d,%d,%dn”, ) ; ; printf(“4=%d,%d,%dn”, ) ; printf(“5=%d,%dn”, ) ; a3.c in
13、t fac(int n) int i, f=1; for(i =1; i =n; i +) f=f* i ; return( f ); 只有只有 和和 可以作为寄存器变量可以作为寄存器变量 。变量变量作为寄存器变量。作为寄存器变量。 不能把变量 既放在静态存储区中,又放在寄存器中,二者只能居其一。 对于一个变量只能定义为一个存储类别。对于占用字节数多的变量,如对于占用字节数多的变量,如: 型变量型变量 说明为寄存器型变量。说明为寄存器型变量。由于寄存器中的数据可以直接访问,因此比其它存储类别的变由于寄存器中的数据可以直接访问,因此比其它存储类别的变 量量。所以对于。所以对于的变量均可作为寄存器
14、变量。的变量均可作为寄存器变量。寄存器型变量都是在某个函数中定义的,所以一旦退出该函数后就会寄存器型变量都是在某个函数中定义的,所以一旦退出该函数后就会 被被 。 7.1 函数的概念函数的概念7.2 语函数的定义和返回值句语函数的定义和返回值句类型名类型名 函数名函数名(类型名类型名 形参形参1, 类型名类型名 形参形参2,) 说明语句说明语句; 执行语句执行语句; return(表达式表达式);return 表达式表达式 ; 1、常量、常量 2、变量、变量 3、表达式、表达式 4、指针值、指针值 7.3 函数的调用函数的调用 7.4 调用函数与被调用函数之间的参数传递调用函数与被调用函数之间的参数传递 7.6 变量的使用范围与存储类别变量的使用范围与存储类别 7.5 函数的递归调用函数的递归调用 1、表达式调用、表达式调用: 如,如,c=add(a,b) ; 2、调用语句调用、调用语句调用: 如,如,add(a,b)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026比亚迪财务面试题及答案
- 2026编制保安面试题及答案
- 2026辩证问题面试题及答案
- 2026滨海幼儿面试题目及答案
- 2026滨江中学面试题目及答案
- 2026博士英语面试题及答案
- 2026不变性面试题及答案
- 2026国家卫生健康委直属和联系单位第二批招聘37人模拟试卷(满分必刷)附答案详解
- 2026年智能音箱运动健康数据应用
- 2026外交学院管理助理、教学助理、科研助理招聘43人模拟试卷及参考答案详解【考试直接用】
- FOD内部管理办法
- 福建省福州三中2025年物理高一第二学期期末考试试题含解析
- 贝壳租房合同协议书
- 英语教师教学工作总结范文
- 膝痹病的护理
- 2022年大学生财经素养大赛参考题库(含答案)
- 《自然语言处理》期末考试试卷附答案
- 《新媒体营销》课件
- DB11 637-2015 房屋结构综合安全性鉴定标准
- T-CRHA 046-2024 标准手术体位安置技术规范
- (高清版)TDT 1037-2013 土地整治重大项目可行性研究报告编制规程
评论
0/150
提交评论