版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6章章 函数函数1. 概述概述2. 函数的定义函数的定义3. 函数的调用函数的调用6.1 概述概述# include void main() void printstar(); /*对对printstar函数声明函数声明*/ void print_message(); /*对对print_message函数声明函数声明*/ i=printstar(); *调用调用printstar函数函数* print_message(); /*调用调用print_message函数函数*/ printstar(); *调用调用printstar函数函数*/ 先看一个函数调用的简单例子先看一个函数调用的简
2、单例子void printstar() *定义定义printstar函数函数* printf(* * * * * * * * * * * * * * * *n);void print_message() *定义定义print_message函数函数* printf(How do you do!n); 运转情况如下:运转情况如下:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *How do you do!How do you do!* * * * * * * * * * * * * * * * * * * * * *
3、* * * * * * * * * *几点阐明:几点阐明: 一个程序由一个或多个程序模块组成,每一个一个程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对于较大的程序,程序模块作为一个源程序文件。对于较大的程序,通常将程序内容分别放在假设干个源文件中,再通常将程序内容分别放在假设干个源文件中,再由假设干源程序文件组成一个由假设干源程序文件组成一个C C程序。这样便于程序。这样便于分别编写、分别编译,提高伐试效率。一个源程分别编写、分别编译,提高伐试效率。一个源程序文件可以为多个序文件可以为多个C C程序公用。程序公用。 一个源程序文件由一个或多个函数以及其他有关一个源程序文件由
4、一个或多个函数以及其他有关内容如命令行、数据定义等组成。一个源程内容如命令行、数据定义等组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进展编译的,而不是以函数为单位序文件为单位进展编译的,而不是以函数为单位进展编译的。进展编译的。 程序的执行是从程序的执行是从main函数开场的,假设在函数开场的,假设在main函数中调用其他函数,在调用后流程前函数中调用其他函数,在调用后流程前往到往到main函数,在函数,在main函数中终了整个程序函数中终了整个程序的运转。的运转。 一切函数都是平行的,即在定义函数时是分别一切函数都是平行的,即
5、在定义函数时是分别进展的,是相互独立的。一个函数并不从属于进展的,是相互独立的。一个函数并不从属于另一函数,即函数不能嵌套定义。函数间可以另一函数,即函数不能嵌套定义。函数间可以相互调用,但不能调用相互调用,但不能调用main函数。函数。main函数函数是系统调用的。是系统调用的。从用户运用的角度看,函数有两种:从用户运用的角度看,函数有两种: 规范函数,即库函数。这是由系统提供的,定规范函数,即库函数。这是由系统提供的,定义在不同的头文件中,用户不用本人定义这些义在不同的头文件中,用户不用本人定义这些函数,可以直接运用它们。用户运用时,必需函数,可以直接运用它们。用户运用时,必需用用#inc
6、lude把相应的头文件包含到把相应的头文件包含到程序中来。程序中来。用户本人定义的函数。用以处理用户的专门需用户本人定义的函数。用以处理用户的专门需求。求。从函数的方式看,函数分两类:从函数的方式看,函数分两类: 无参函数。无参函数普通用来执行指定的一组无参函数。无参函数普通用来执行指定的一组操作。在调用无参函数时,主调函数不向被调操作。在调用无参函数时,主调函数不向被调用函数传送数据。用函数传送数据。有参函数。主调函数在调用被调用函数时,经有参函数。主调函数在调用被调用函数时,经过参数向被调用函数传送数据。过参数向被调用函数传送数据。 6.2 函数的定义函数的定义 方式方式1 函数前往值类型
7、名函数前往值类型名 函数名函数名(参数类型阐明及参数参数类型阐明及参数列表列表) 部分变量阐明部分变量阐明; 语句序列语句序列; 方式方式2 函数前往值类型名函数前往值类型名 函数名函数名(参数列表参数列表) 参数类型阐明参数类型阐明 部分变量阐明部分变量阐明; 语句序列语句序列; 如如: int max(a,b) int a,b;如如: int max(int a,int b) 例例 定义符号函数定义符号函数sign。 int sign(int x)/*函数首部函数首部*/int y;/*函数体部分变量函数体部分变量*/ y=x0?1:(x=0?0:-1); return y;/*前往函数值
8、前往函数值*/ 留意:留意:C言语函数分为两大部分言语函数分为两大部分: 函数的阐明部分函数的阐明部分函数体部分函数体部分函数各部分作用函数各部分作用1.函数的阐明部分函数的阐明部分 函数阐明部分阐明函数的类型函数阐明部分阐明函数的类型, 函数名函数名, 参数表及参数表及参数类型。参数类型。(1)函数的类型阐明函数的类型阐明函数的类型即函数的前往值类型。假设函数不提函数的类型即函数的前往值类型。假设函数不提供前往值,那么可定义其类型为供前往值,那么可定义其类型为: void。 例如例如: void putdata(int a)省略函数类型名时,省略函数类型名时,C言语默许其为言语默许其为int
9、型。型。(2) 函数名函数名 函数名又称函数标识符。命名遵照函数名又称函数标识符。命名遵照C言语标识符言语标识符的规定;函数名要反映函数完成的功能。的规定;函数名要反映函数完成的功能。(3)参数表参数表参数表写在函数名后的参数表写在函数名后的( )内,由一个或多内,由一个或多个变量标识符及类型标识符组成。个变量标识符及类型标识符组成。参数表中的变量称为方式参数参数表中的变量称为方式参数, 简称形参。简称形参。假设函数没有形参,那么称为无参函数,假设函数没有形参,那么称为无参函数,其后其后“( )不能省略。不能省略。参数必需指定类型。形参的类型阐明:参数必需指定类型。形参的类型阐明:int ma
10、x(int a, int b)2. 函数体函数体函数体以函数体以“开场,以开场,以“终了,包括变量定终了,包括变量定义和执行语句序列。函数所完成的任务由函数义和执行语句序列。函数所完成的任务由函数体中一段程序实现。体中一段程序实现。函数的前往值用前往语句函数的前往值用前往语句return前往,方式前往,方式: return(表达式表达式);或或 return 表达式;表达式;或或 return ;假设函数的类型与假设函数的类型与return语句的表达式的类型不语句的表达式的类型不一致时一致时, 那么以函数的类型为准。前往时自动那么以函数的类型为准。前往时自动进展数据转换。进展数据转换。例例 定
11、义函数定义函数power(x,n), 求求x的的n次方。次方。函数定义如下函数定义如下:float power( float x, int n) int i; float t=1; for(i=1;ib)?a:b; y=yc?y:c; printf(max=%dn,y); void main()int x,y,z,m; scanf(%d,%d,%d,&x,&y,&z); max(x,y,z); /*采用函数语句方式调用函数采用函数语句方式调用函数max*/int max(int a,int b) int y; y=(ab)?a:b; return y;void main
12、() int x,y,z,m; scanf(%d,%d,%d,&x,&y,&z); m=max(x,y); m=max(m,z); /*表达式调用方式表达式调用方式 */printf(“max=%dn,m); m=max(x,y); printf(max=%dn,max(m,z); /*函数参数调用方式函数参数调用方式*/6.3.2 函数声明函数声明 函数定义在主调函数之后,需求进展主调函数中函数定义在主调函数之后,需求进展主调函数中参与函数声明语句。参与函数声明语句。 类型名类型名 函数名函数名(类型类型1 变量变量1,类型类型2 变量变量2,类型类型n 变量变量n)
13、; 阐明:阐明: 函数声明应与该函数定义的函数类型与称号、形函数声明应与该函数定义的函数类型与称号、形参的个数、类型、次序相一致。参的个数、类型、次序相一致。 函数声明中的形参名可省略,其方式为函数声明中的形参名可省略,其方式为:类型名类型名 函数名类型函数名类型1,类型,类型2,类型,类型n; 类型名类型名 函数名函数名(); 当函数定义在主调函数之前,即先定义当函数定义在主调函数之前,即先定义, 后调用。后调用。那么调用时函数声明可以省略。那么调用时函数声明可以省略。 例例 编写计算编写计算x的的n次乘方的程序。次乘方的程序。#include stdio.hvoid main( ) flo
14、at x, y; int n; float power (float x, int n); scanf(%f,%d, &x, &n); y = power(x, n); printf(“%8.2f,y); float power( float x, int n) int i; float t=1; for(i=1; iy) t = x; else t = y; return t; 2) 关于方式参数和实践参数阐明如下关于方式参数和实践参数阐明如下:方式参数在函数被调用时才被分配内存。当函数方式参数在函数被调用时才被分配内存。当函数执行终了前往时执行终了前往时, 方式参数占用的内
15、存空间便被方式参数占用的内存空间便被释放。释放。实参可以是变量、常量和表达式。实参可以是变量、常量和表达式。如如: y = power(x,4); y = power(x, i*2); 但实参必需有确定的值。但实参必需有确定的值。3) 形参和实参的类型必需相容。形参和实参的类型必需相容。4) 形参和实参之间的关系是形参和实参之间的关系是: 单向的值的传送单向的值的传送101055axby1) 形参形参y之间值的传送如下图。之间值的传送如下图。6.3.4 函数的嵌套调用函数的嵌套调用调用一个函数的过程中又调用了另一个函数,这种调用一个函数的过程中又调用了另一个函数,这种调用称为函数的嵌套调用。调
16、用称为函数的嵌套调用。函数函数1 1 调用函数调用函数2 2 函数函数2 2 调用函数调用函数3 3 函数函数3 3 (1)(9)(8)(2)(3)(5)(4)(7)(6)6.3.5 递归调用递归调用 函数调用函数本身,称为函数的递归调用。递函数调用函数本身,称为函数的递归调用。递归调用方式如下:归调用方式如下:2) 间接递归间接递归 void a( ) . b ( ); . void b( ) . a ( ); . 直接递归直接递归void a( )void a( ) . . a ( ); a ( ); . . 用递归算法计算用递归算法计算n! 讨论:讨论:采用递归的方法计算。采用递归的方法计算。n!的递归定义方式的递归定义方式的的: 编程编程:if (初始条件初始条件)表达式表达式; else 递推表达式递推表达式; 1 n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沙漠-极地双模基建施工技术手册
- 2026年专科院校社团物资保管管理员辅导员招聘考试笔试试题(含答案)
- 2026年中学政史教师招聘考试笔试试题(含答案)
- 业务授权委托书三篇
- 2026年秋季高中开学第一课:生态环保行动
- 2026年秋季音乐学专业开学第一课 行业前沿与趋势洞察课件
- 2026年秋季高中英语开学第一课 学科核心素养解读课件
- 2026年秋季小学开学第一课 新学期收心教育课件
- 2026护理法律法规试题及答案
- 卫生间防水施工方案-技术方案
- DB32-T 4878-2024 居住区供配电设施建设标准
- 二型糖尿病人药物治疗
- 2025年注册安全工程师考试建筑施工(初级)安全生产实务试题与参考答案
- 临床科室危急值登记本
- DL∕T 5210.6-2019 电力建设施工质量验收规程 第6部分:调整试验
- JBT 1255-2014 滚动轴承 高碳铬轴承钢零件热处理技术条件
- 初中生未来规划主题班会
- 副主任护师专业技术工作总结
- 《预算绩效管理》课件
- GMP制药专业英语词汇
- 道德与法治初中新课程标准测试题(含答案)
评论
0/150
提交评论