




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第5讲 函数 函数的定义及调用2主要内容n函数函数n无参无返回值函数无参无返回值函数n有参无返回值函数有参无返回值函数n有参有返回值函数有参有返回值函数n函数间数据传递函数间数据传递整数类型整数类型整数变量的定义整数变量的定义整数的运算整数的运算整数的输入和输出整数的输入和输出整数在函数间传递整数在函数间传递nP84P95n第4章函数用户自定义函数34.2.1 函数定义函数定义 n函数是指完成一个特定工作的独立程序模块。函数是指完成一个特定工作的独立程序模块。库函数:由库函数:由C语言系统提供定义。如语言系统提供定义。如scanf()等函数等函数自定义函数:用户根据需要定义。如自定义函数:用
2、户根据需要定义。如cylinder()函数函数main()是一个主函数,是一个主函数,C程序由一个程序由一个main()或多个函数构成或多个函数构成n程序中一旦调用了某个函数,该函数就会完成特定功程序中一旦调用了某个函数,该函数就会完成特定功能,然后返回到调用它的地方。除主函数外一般函数能,然后返回到调用它的地方。除主函数外一般函数都不能单独运行。都不能单独运行。函数经过运算,得到一个明确结果,并需要回送该结果函数经过运算,得到一个明确结果,并需要回送该结果有返回值函数有返回值函数。例,函数。例,函数cylinder()返回圆柱的体积。返回圆柱的体积。函数完成一系列操作步骤,不需要回送任何运算
3、结果函数完成一系列操作步骤,不需要回送任何运算结果无无返回值函数返回值函数:1.无参无参无返回值函数无返回值函数2.有有参参无返回值函数无返回值函数P25一般有参一般有参4用户自定义函数用户自定义函数n函数定义:编制独立功能的程序函数定义:编制独立功能的程序n函数声明:主调函数调用前声明函数声明:主调函数调用前声明n函数调用:主调函数调用被调用函数函数调用:主调函数调用被调用函数n函数执行:运行被调用函数函数执行:运行被调用函数注:注:不能独立运行不能独立运行45 5写自己的函数用户自定义函数写自己的函数用户自定义函数 void triangle (void) printf( *n); pri
4、ntf( *n); printf(*n); n无返回值函数无返回值函数void函数的作用仅仅是执行函数的作用仅仅是执行一系列的指令一系列的指令n打印 61.无参无参无返回值无返回值函数定义函数定义 p87一般形式一般形式void 函数名函数名(void) 函数体函数体6void 函数名函数名() 函数体函数体void triangle (void) printf( *n); printf( *n); printf(*n); void triangle () printf( *n); printf( *n); printf(*n); 或或P47无参无返回值的函数的声明无参无返回值的函数的声明 p
5、87一般形式:一般形式:void 函数名函数名(void );void triangle (void) ;n主调函数主调函数n告诉编译系统用户自定义函数的存在告诉编译系统用户自定义函数的存在n编译系统在检查被调函数时要知道调用信息包括:编译系统在检查被调函数时要知道调用信息包括:函数名,参数,返回类型。函数名,参数,返回类型。n仅仅声明了仅仅声明了“函数名函数名”7P48无参无返回值的函数的调用无参无返回值的函数的调用n一般形式:函数名一般形式:函数名();n上例:上例:triangle();n写一个主函数,调用写一个主函数,调用“triangle ”函数,打印函数,打印图形。图形。#incl
6、ude void main(void) void triangle();/*函数声明函数声明*/ triangle();void triangle () printf( *n); printf( *n); printf(*n); 8P49/* a program to output a triangle*/ #include void triangle(void); main() printf(About to print a trianglen); triangle(); printf(That was it!n); void triangle(void) printf( *n); prin
7、tf( *n); printf(*n); 9例:例:sample01_04.c函数声明(主函数前)函数声明(主函数前)p84(2)函数调用函数调用函数定义函数定义调用自定义函数,调用自定义函数,()中可不包括任何内中可不包括任何内容,但容,但()一定要写。一定要写。可放在可放在main函数之前,也可放在函数之前,也可放在main函数的后面。但不能放在函数的后面。但不能放在main函数的函函数的函数体中,函数和函数之间地位是平等的,数体中,函数和函数之间地位是平等的,没有嵌套关系。只有嵌套调用。没有嵌套关系。只有嵌套调用。告诉编译器,存在这样一个用告诉编译器,存在这样一个用户自定义的函数,及它的
8、调用户自定义的函数,及它的调用方法:名称、参数、返回值。方法:名称、参数、返回值。主调函数主调函数被调函数被调函数预处理预处理1010执行流程执行流程n程序的执行顺序程序的执行顺序从从main函数开始执行,函数开始执行,执行完执行完main函数即结函数即结束执行。束执行。遇到调用函数,转向执遇到调用函数,转向执行被调函数,执行完被行被调函数,执行完被调函数后,返回调用函调函数后,返回调用函数的调用处,继续向下数的调用处,继续向下执行。执行。n程序的书写顺序程序的书写顺序与执行顺序有关顺与执行顺序有关顺序执行。序执行。分支或循环会改变顺序分支或循环会改变顺序n函数的书写顺序函数的书写顺序与执行顺
9、序无关与执行顺序无关函数定义若写在函数调函数定义若写在函数调用之前,用之前,函数声明函数声明可省可省略,但不主张。略,但不主张。#include void main(void) void triangle(); triangle();void triangle () printf( *n); printf( *n); printf(*n); #include void triangle () printf( *n); printf( *n); printf(*n); void main(void) triangle();1111完成画简图(完成画简图(女孩女孩)的程序)的程序n打印图形打印图形
10、女孩女孩房子房子男孩男孩1212sample01_完成画完成画基本组件基本组件的函数的函数画一个圆画一个圆画一个横线画一个横线画一个平行线画一个平行线画一个交叉线画一个交叉线n完成画完成画三角形三角形的函数的函数画一个交叉线画一个交叉线画一个横线画一个横线n在在main函数中调用子函数中调用子函数完成画小函数完成画小女孩女孩画一个圆画一个圆画三角形画三角形画一个交叉画一个交叉线1313完成画基本组件的函数完成画基本组件的函数/*Draw a circle*/void draw_circle(void) printf( * n); printf( * *n); printf( * * n);nD
11、raw 绘画绘画 nCircle 圆圆 /*Draw intersecting lines*/void draw_intersect(void) /* Use 2 s to print 1 */ printf( / n); printf( / n); printf( / n);nintersecting lines相交线相交线 1414完成画基本组件的函数完成画基本组件的函数/*Draws a base line*/void draw_base(void) printf( -n);nbase line基(横)线基(横)线/*Draw a parallel*/void draw_parallel
12、(void) printf(| |n); printf(| |n); nParallel 平行线平行线 1515完成画三角形的函数完成画三角形的函数/*Draws a triangle*/void draw_triangle(void) draw_intersect(); /*画相交线 */ draw_base(); /*画横线 */16画小女孩画小女孩#include /* function prototypes */void draw_circle(void);/圆void draw_intersect(void);/相交线 void draw_base(void);/横线 void dr
13、aw_triangle(void);/三角形int main(void) /* Draw a circle */ draw_circle(); /* Draw a triangle */ draw_triangle(); /* Draw intersecting lines */ draw_intersect(); return 0;Function 函数函数 Prototype 原型原型 1717执行示例执行示例main(画女孩)画圆画三角形画交叉线画交叉线画横线1818思考思考n main函数中三条语句函数中三条语句功能还不明显,可增功能还不明显,可增加一个函数加一个函数draw_girl
14、 画小女孩画小女孩n请修改程序请修改程序画女孩画圆画三角形画交叉线画交叉线画横线main1919画小女孩函数画小女孩函数/* Draws a girl */void draw_girl(void) /* Draw a circle. */ draw_circle(); /* Draw a triangle. */ draw_triangle(); /* Draw intersecting lines. */ draw_intersect();2020完成画小女孩程序完成画小女孩程序#include /* function prototypes */void draw_circle(void);
15、void draw_intersect(void); void draw_base(void); void draw_triangle(void); void draw_girl(void );int main(void) draw_girl(); return 0;2121改错题 error1_6.cvoid main() printstar; sayHello(void); printstar;void printStar(void)printf(“*”);void sayHello(void)printf(“hello world!”);P2#include void main() vo
16、id printStar(void); void sayHello(void); printStar(); sayHello(); printStar();void printStar(void)printf(*);void sayHello(void)printf(hello world!);222.有参无返回值函数定义P87void 函数名(形参表) /* 函数首部 */ 函数实现过程 /* 函数体 */ return; /*可以省略return */注:这类函数通常用于屏幕输出等注:这类函数通常用于屏幕输出等表示不返回结果表示不返回结果不能省略不能省略否则,函数类型被默认定义为否则,函数
17、类型被默认定义为int23参数参数n参数的作用参数的作用实现值的传递实现值的传递主调函数向被调函数传递值主调函数向被调函数传递值实际参数实际参数(实参),被调函数处理所需要的数据。(实参),被调函数处理所需要的数据。n函数调用函数调用被调函数向主调函数传递值被调函数向主调函数传递值形式参数形式参数(形参),被调函数向主调函数传递被调(形参),被调函数向主调函数传递被调函数运行结果的数据。函数运行结果的数据。n函数定义函数定义243.有参有返回值函数定义 程序解析计算圆柱体积 【例】输入圆柱体的高h和半径r,求圆柱体积,volume=*r2*h。要求定义并调用函数cylinder (r, h )
18、计算圆柱体的体积。 cylinder圆柱体 volume体积 25/* 计算圆柱体积 */n#include nint main( void )nn double height, radius, volume;ndouble cylinder (double r, double h); /* 函数声明*/n /*函数类型 函数名 类型 名称 类型 名称*/n /* 实参表 */nprintf (Enter radius and height: );nscanf (%lf%lf, &radius, &height);n /* 调用函数,返回值赋给volume */nvolume
19、= cylinder (radius, height );nprintf (Volume = %.3fn, volume);nreturn 0;1.【例】源程序26Cylinder函数/*函数定义:求圆柱体积 */double cylinder (double r, double h) /*函数类型 函数名 类型 名称 类型 名称*/* 形参表 */ double result;result =3.1415926 * r * r * h; /* 计算体积 */return result; /* 返回结果 */Enter radius and height: 3.0 10Volume = 282
20、.743注:主函数完成输入输出注:主函数完成输入输出271返回运算结果的函数定义函数类型 函数名(形参表)/* 函数首部 */ 函数实现过程 /* 函数体 */ return 表达式;将函数运算的结果回送给主调函数将函数运算的结果回送给主调函数注:注:只能返回一个值只能返回一个值函数返回值的类型函数返回值的类型注:没有分号注:没有分号double cylinder (double r, double h) double result; result = 3.1415926 * r * r * h; return result;28函数定义形参类型1 参数1 ,类型2 参数2 ,类型n 参数n参
21、数之间用逗号分隔,每个参数前面的类型都必须分别声明函数类型函数类型 函数名(函数名(形参表形参表) 函数实现过程函数实现过程 return 表达式;表达式;不能写成不能写成 double r, hdouble cylinder (double r, double h) double result; result =3.1415926 * r * r * h; return result;P229课堂练习:定义判断奇偶数的函数课堂练习:定义判断奇偶数的函数even (n)int even (int n)/* 函数首部 */if(n%2 = 0) /* 判别奇偶数 */return 1;/* 偶数
22、返回1 */elsereturn 0;/* 奇数返回0 */分析:分析:功能:判断奇偶数功能:判断奇偶数形式参数:整数形式参数:整数n返回值:当返回值:当n为偶数时返回为偶数时返回1,否则返回,否则返回0。30n函数类型函数类型 函数名函数名( (参数表参数表););void triangle (void);void pyramid (int n);double cylinder (double r, double h);n函数必须先定义后调用。函数必须先定义后调用。n如果自定义函数在主调函数的后面,就需要在函数调用如果自定义函数在主调函数的后面,就需要在函数调用前,加上前,加上函数原型声明函
23、数原型声明。n函数声明:说明函数的类型和参数的情况,以保证程序函数声明:说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。书写位置:编译时能判断对该函数的调用是否正确。书写位置:写在写在“main”main”里,函数体开始位置。里,函数体开始位置。写在写在“main”main”前。前。在主调函数前在主调函数前函数(原型)声明注:只写函数定义中的第注:只写函数定义中的第1 1行(函数首部),并以分号结束。行(函数首部),并以分号结束。无参无返回值函数声明有参无返回值函数声明有参有返回值31函数调用P89n函数定义后,可以在其它函数中调用该函数;或自函数定义后,可以在其它函
24、数中调用该函数;或自己调用自己嵌套调用。己调用自己嵌套调用。n调用调用C标准库函数时,在程序的最前面用标准库函数时,在程序的最前面用#include命令包含相应的头文件。如:命令包含相应的头文件。如:#include n调用自定义函数时,程序中必须有与调用函数相对调用自定义函数时,程序中必须有与调用函数相对应的应的函数声明函数声明。double cylinder (double r, double h);volume = cylinder (radius, height ); 函数调用321.函数调用的形式和过程函数调用的形式和过程n使用(带)返回值:使用(带)返回值:volume = cyl
25、inder (radius, height );printf(“%f n” , cylinder (radius, height );n完成操作(无返回值):完成操作(无返回值):pyramid(5); /有参有参triangle (); /无参无参常用于常用于voidvoid类型函数的调用类型函数的调用常用于有返回结果的函数的调用常用于有返回结果的函数的调用常量、变量、表达式常量、变量、表达式函数名函数名(实参表实参表)33函数调用的过程n计算机在执行程序时,从计算机在执行程序时,从主函数主函数main开始执行,如开始执行,如果遇到某个函数调用,暂果遇到某个函数调用,暂停执行主函数,转而执行
26、停执行主函数,转而执行相应的被调函数,该函数相应的被调函数,该函数执行完后,将返回主函数执行完后,将返回主函数,然后再从原先暂停的位,然后再从原先暂停的位置继续执行。置继续执行。n函数遇函数遇return或最后的大或最后的大括号,返回主函数。括号,返回主函数。n示意图34#include int main( void ) double height, radius, volume;double cylinder (double r, double h); printf (Enter radius and height: );scanf (%lf%lf, &radius, &he
27、ight);volume = cylinder (radius, height );printf (Volume = %.3fn, volume);return 0;double cylinder (double r, double h) double result;result =3.1415926 * r * r * h; return result; 调用函数调用函数实参实参形参形参执行函数中的语句执行函数中的语句返回调用它的地方返回调用它的地方函数声明函数声明;结束结束函数定义空格结束函数定义空格结束分析函数调用的过程352.参数传递P91n函数函数定义定义时的参数时的参数形式参数形式
28、参数(简称(简称形参形参)double cylinder (double r, double h);n函数函数调用调用时的参数时的参数实际参数实际参数(简称(简称实参实参)volume = cylinder (radius, height);为为形参形参分配存储单元分配存储单元n实参实参形参形参的的单向传递,单向传递,实参实参把值复制给把值复制给形参形参实参实参:常量、变量或表达式:常量、变量或表达式形参形参:变量,用于接受实参传递过来的值:变量,用于接受实参传递过来的值形参形参和和实参实参一一对应:数量、类型和顺序均一致一一对应:数量、类型和顺序均一致n调用结束后调用结束后释放释放形参形参存储单元;保留存储单元;保留实参实参存储单元(值)存储单元(值)36
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 俩小儿的课件
- 镇网络阵地管理办法
- 郊区社区戒毒管理办法
- 经纪云门店管理办法
- 新质生产力基本内涵
- 税务八小时外管理办法
- 网络举报工作管理办法
- 湖南民间寺庙管理办法
- 企业工会代表安全培训课件
- 新质生产力社区教育
- 2025新疆天泽和达水务科技有限公司部分岗位社会招聘28人笔试模拟试题及答案解析
- U8二次开发参考手册
- DLT5210.1-2021电力建设施工质量验收及评价规程全套验评表格
- 园林机械完整版
- 几何模型“将军饮马”模型(将军饮马、将军遛马、将军造桥)(轴对称模型) 中考数学总复习必会几何模型剖析(全国通用)
- JJG 146-2011量块
- 小学数学思想方法(课件)
- DBJ50-T-389-2021 高性能混凝土应用技术标准
- 智能消防应急照明与疏散指示系统方案
- 铁路路基重力式挡土墙施工方案
- 底拖法在管道施工中的应用
评论
0/150
提交评论