版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.,1,第5讲 函数 函数的定义及调用,.,2,主要内容,函数 无参无返回值函数 有参无返回值函数 有参有返回值函数 函数间数据传递 整数类型 整数变量的定义 整数的运算 整数的输入和输出 整数在函数间传递,P84P95 第4章函数,用户自定义函数,.,4.2.1 函数定义,函数是指完成一个特定工作的独立程序模块。 库函数:由C语言系统提供定义。如scanf()等函数 自定义函数:用户根据需要定义。如cylinder()函数 main()是一个主函数,C程序由一个main()或多个函数构成 程序中一旦调用了某个函数,该函数就会完成特定功能,然后返回到调用它的地方。除主函数外一般函数都不能单独运
2、行。 函数经过运算,得到一个明确结果,并需要回送该结果有返回值函数。例,函数cylinder()返回圆柱的体积。 函数完成一系列操作步骤,不需要回送任何运算结果无返回值函数: 1.无参无返回值函数 2.有参无返回值函数,P25,一般有参,.,用户自定义函数,函数定义:编制独立功能的程序 函数声明:主调函数调用前声明 函数调用:主调函数调用被调用函数 函数执行:运行被调用函数 注: 不能独立运行,4,.,5,写自己的函数用户自定义函数,void triangle (void) printf( *n); printf( *n); printf(*n); ,无返回值函数void 函数的作用仅仅是执行
3、一系列的指令,打印,.,1.无参无返回值函数定义 p87一般形式,void 函数名(void) 函数体 ,6,void 函数名() 函数体 ,void triangle (void) printf( *n); printf( *n); printf(*n); ,void triangle () printf( *n); printf( *n); printf(*n); ,或,P4,.,无参无返回值的函数的声明 p87,一般形式:void 函数名(void ); void triangle (void) ; 主调函数 告诉编译系统用户自定义函数的存在 编译系统在检查被调函数时要知道调用信息包括:
4、函数名,参数,返回类型。 仅仅声明了“函数名”,7,P4,.,无参无返回值的函数的调用,一般形式:函数名(); 上例:triangle(); 写一个主函数,调用“triangle ”函数,打印图形。,#include void main(void) void triangle();/*函数声明*/ triangle(); void triangle () printf( *n); printf( *n); printf(*n); ,8,P4,.,/* a program to output a triangle*/ #include void triangle(void); main() pr
5、intf(About to print a trianglen); triangle(); printf(That was it!n); void triangle(void) printf( *n); printf( *n); printf(*n); ,9,例:sample01_04.c,函数声明(主函数前)p84(2),函数调用,函数定义,调用自定义函数,()中可不包括任何内容,但()一定要写。,可放在main函数之前,也可放在main函数的后面。但不能放在main函数的函数体中,函数和函数之间地位是平等的,没有嵌套关系。只有嵌套调用。,告诉编译器,存在这样一个用户自定义的函数,及它的调用
6、方法:名称、参数、返回值。,主调函数,被调函数,预处理,.,10,执行流程,程序的执行顺序 从main函数开始执行,执行完main函数即结束执行。 遇到调用函数,转向执行被调函数,执行完被调函数后,返回调用函数的调用处,继续向下执行。,程序的书写顺序 与执行顺序有关顺序执行。 分支或循环会改变顺序 函数的书写顺序 与执行顺序无关 函数定义若写在函数调用之前,函数声明可省略,但不主张。,#include void main(void) void triangle(); triangle(); void triangle () printf( *n); printf( *n); printf(*n
7、); ,#include void triangle () printf( *n); printf( *n); printf(*n); void main(void) triangle(); ,.,11,完成画简图(女孩)的程序,打印图形 女孩 房子 男孩,.,12,sample01_03.c,完成画基本组件的函数 画一个圆 画一个横线 画一个平行线 画一个交叉线 完成画三角形的函数 画一个交叉线 画一个横线,在main函数中调用子函数完成画小女孩 画一个圆 画三角形 画一个交叉线,.,13,完成画基本组件的函数,/*Draw a circle*/ void draw_circle(void)
8、 printf( * n); printf( * *n); printf( * * n); Draw 绘画 Circle 圆,/*Draw intersecting lines*/ void draw_intersect(void) /* Use 2 s to print 1 */ printf( / n); printf( / n); printf( / n); intersecting lines相交线,.,14,完成画基本组件的函数,/*Draws a base line*/ void draw_base(void) printf( -n); base line基(横)线,/*Draw
9、a parallel*/ void draw_parallel(void) printf(| |n); printf(| |n); Parallel 平行线,.,15,完成画三角形的函数,/*Draws a triangle*/ void draw_triangle(void) draw_intersect(); /*画相交线 */ draw_base(); /*画横线 */ ,.,画小女孩,#include /* function prototypes */ void draw_circle(void);/圆 void draw_intersect(void);/相交线 void draw_
10、base(void);/横线 void draw_triangle(void);/三角形,int main(void) /* Draw a circle */ draw_circle(); /* Draw a triangle */ draw_triangle(); /* Draw intersecting lines */ draw_intersect(); return 0; ,Function 函数 Prototype 原型,.,17,执行示例,.,18,思考,main函数中三条语句功能还不明显,可增加一个函数draw_girl 画小女孩 请修改程序,.,19,画小女孩函数,/* Dra
11、ws a girl */ void draw_girl(void) /* Draw a circle. */ draw_circle(); /* Draw a triangle. */ draw_triangle(); /* Draw intersecting lines. */ draw_intersect(); ,.,20,完成画小女孩程序,#include /* function prototypes */ void draw_circle(void); void draw_intersect(void); void draw_base(void); void draw_triangle
12、(void); void draw_girl(void );,int main(void) draw_girl(); return 0; ,.,21,改错题 error1_6.c,void main() printstar; sayHello(void); printstar; void printStar(void) printf(“*”); void sayHello(void) printf(“hello world!”); ,P2,#include void main() void printStar(void); void sayHello(void); printStar(); s
13、ayHello(); printStar(); void printStar(void) printf(*); void sayHello(void) printf(hello world!); ,.,2.有参无返回值函数定义P87,void 函数名(形参表) /* 函数首部 */ 函数实现过程 /* 函数体 */ return; /*可以省略return */ ,注:这类函数通常用于屏幕输出等,表示不返回结果,不能省略 否则,函数类型被默认定义为int,.,参数,参数的作用实现值的传递 主调函数向被调函数传递值实际参数(实参),被调函数处理所需要的数据。 函数调用 被调函数向主调函数传递值形
14、式参数(形参),被调函数向主调函数传递被调函数运行结果的数据。 函数定义,.,3.有参有返回值函数定义 程序解析计算圆柱体积,【例】输入圆柱体的高h和半径r,求圆柱体积,volume=*r2*h。 要求定义并调用函数cylinder (r, h )计算圆柱体的体积。,cylinder 圆柱体,volume 体积,.,/* 计算圆柱体积 */ #include int main( void ) double height, radius, volume; double cylinder (double r, double h); /* 函数声明*/ /*函数类型 函数名 类型 名称 类型 名称*
15、/ /* 实参表 */ printf (Enter radius and height: ); scanf (%lf%lf, ,【例】源程序,.,Cylinder函数,/*函数定义:求圆柱体积 */ double cylinder (double r, double h) /*函数类型 函数名 类型 名称 类型 名称*/ /* 形参表 */ double result; result =3.1415926 * r * r * h; /* 计算体积 */ return result; /* 返回结果 */ ,Enter radius and height: 3.0 10 Volume = 282
16、.743,注:主函数完成输入输出,.,1返回运算结果的函数定义,函数类型 函数名(形参表)/* 函数首部 */ 函数实现过程 /* 函数体 */ return 表达式; ,将函数运算的结果回送给主调函数,注: 只能返回一个值,函数返回值的类型,注:没有分号,double cylinder (double r, double h) double result; result = 3.1415926 * r * r * h; return result; ,.,函数定义形参,类型1 参数1 ,类型2 参数2 ,类型n 参数n 参数之间用逗号分隔,每个参数前面的类型都必须分别声明,函数类型 函数名(
17、形参表) 函数实现过程 return 表达式; ,不能写成 double r, h,double cylinder (double r, double h) double result; result =3.1415926 * r * r * h; return result; ,P2,.,课堂练习:定义判断奇偶数的函数even (n),int even (int n)/* 函数首部 */ if(n%2 = 0) /* 判别奇偶数 */ return 1;/* 偶数返回1 */ else return 0;/* 奇数返回0 */ ,分析: 功能:判断奇偶数 形式参数:整数n 返回值:当n为偶数
18、时返回1,否则返回0。,.,函数类型 函数名(参数表); void triangle (void); void pyramid (int n); double cylinder (double r, double h); 函数必须先定义后调用。 如果自定义函数在主调函数的后面,就需要在函数调用前,加上函数原型声明。 函数声明:说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。书写位置: 写在“main”里,函数体开始位置。 写在“main”前。在主调函数前,函数(原型)声明,注:只写函数定义中的第1行(函数首部),并以分号结束。,无参无返回值函数声明,有参无返回值函数声
19、明,有参有返回值,.,函数调用P89,函数定义后,可以在其它函数中调用该函数;或自己调用自己嵌套调用。 调用C标准库函数时,在程序的最前面用#include命令包含相应的头文件。如: #include 调用自定义函数时,程序中必须有与调用函数相对应的函数声明。 double cylinder (double r, double h); volume = cylinder (radius, height ); 函数调用,.,1.函数调用的形式和过程,使用(带)返回值: volume = cylinder (radius, height ); printf(“%f n” , cylinder (r
20、adius, height ); 完成操作(无返回值): pyramid(5); /有参 triangle (); /无参,常用于void类型函数的调用,常用于有返回结果的函数的调用,常量、变量、表达式,函数名(实参表),.,函数调用的过程,计算机在执行程序时,从主函数main开始执行,如果遇到某个函数调用,暂停执行主函数,转而执行相应的被调函数,该函数执行完后,将返回主函数,然后再从原先暂停的位置继续执行。 函数遇return或最后的大括号,返回主函数。,示意图,.,#include int main( void ) double height, radius, volume; double
21、 cylinder (double r, double h); printf (Enter radius and height: ); scanf (%lf%lf, ,调用函数,实参形参,执行函数中的语句,返回调用它的地方,函数声明;结束,函数定义空格结束,分析函数调用的过程,.,2.参数传递P91,函数定义时的参数形式参数(简称形参) double cylinder (double r, double h); 函数调用时的参数实际参数(简称实参) volume = cylinder (radius, height); 为形参分配存储单元 实参形参的单向传递,实参把值复制给形参 实参:常量、变量或表达式 形参:变量,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年辽宁建筑职业学院单招职业适应性测试模拟试题及答案解析
- 2026年承德护理职业学院单招职业适应性考试模拟试题及答案解析
- 2026年江苏城市职业学院单招职业适应性考试模拟试题及答案解析
- 2026年青岛航空科技职业学院单招职业适应性测试模拟试题及答案解析
- 基础生命支持(BLS)培训
- 2026年广西培贤国际职业学院单招职业适应性考试模拟试题及答案解析
- 精神疾病康复护理要点
- 2026年汉中职业技术学院单招职业适应性考试模拟试题及答案解析
- 2026年石家庄医学高等专科学校单招职业适应性考试模拟试题及答案解析
- 2026年新疆能源职业技术学院单招职业适应性考试模拟试题及答案解析
- 儿科护理课件模板
- 2024年江苏省盐城市护理三基业务知识考试复习试卷及答案
- 协助老人更换衣服课件
- 公路施工与养护培训课件
- 晋中学院高等数学试卷
- 招标应急处理措施方案(3篇)
- 肉鸡养殖场规章管理制度
- 2025年离婚抖音作品离婚协议书
- 小说的文学常识课件
- 物流设施运行与维护专业教学标准(中等职业教育)2025修订
- CJ/T 454-2014城镇供水水量计量仪表的配备和管理通则
评论
0/150
提交评论