




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、5.2 自定义函数的概念及使用方法例1:求两个数中的最大数#include int imax (int m, int n)return (mn ? m:n); void main() int a=6,b=9; coutimax(a,b); 第1页/共47页例2:求x的n次方#include iostream.hvoid main() float mpow(float ,int); coutpow=mpow(3.,3)endl; float mpow(float a,int n)int i; float k=1; for(i=1;i=n;i+) k=k*a; return (k); 第2页/共4
2、7页5.3 5.3 自定义函数的三种形式5.3.1 无参函数,例如main(),getchar()等。 主函数与子函数之间不传输数据。例:输出字符四方形 * * * *void print()int i; for(i=1;i5;i+) coutr; res(a, b, r); coutr=rsetw(10)a=asetw(10)b=bendl;第9页/共47页float res(float &a,float &b,float r)a=3.14159*r*r; b=2*3.14159*r; return 0; 例:编写函数(过程、子程序)程序1.求n的阶乘 f(n)2.求三个数的
3、最大数(可以求多个数的最大数)3.求两个正整数的最大公约数(可以求多个数的最大公约数) f (m,n)4.求n+(n+1)+(n+2)+(n+k)5.用子函数完成x2,x3,xn第10页/共47页5.5 C+5.5 C+库函数库函数 被直接调用的函数称为库(内部)函数。函数名 函数原型 要用到的头文件abs() int abs(int n) stdlib.hfabs() double abs(double x) math.hcos() double cos(double x) math.hexp() double exp(double x) math.hlog() double log(dou
4、ble x) math.hpow() double pow(double x, double y) math.hsqrt() double sqrt(double x) math.hsin() double sin(double x) math.htan() double tan(double x) math.hkbhit() int kbhit() conio.hexit() void exit(int n) stdlib.hrand() double rand(double x) stdlib.h第11页/共47页5.6 作用域和存储类作用域和存储类5.6.1 作用域1. 块作用域 块内说
5、明的变量只能在本块有效。2. 文件作用域 文件作用域就是全局作用域。第12页/共47页例:读程序,观察全局变量和局部变量的关系#include int i; /全局变量,文件作用域void main() i=5; /文件作用域的i赋初值 /子块1 int i; /局部变量,块作用域 i=7; couti=iendl; /输出7 couti=iendl;/输出5 第13页/共47页3. 函数原型作用域 函数的作用域只限定在函数原型的函数中。4. 函数作用域 在函数内均有效, 不受块作用域的限制, 只有标号属于函数作用域(在goto语句中使用)。5.6.2 存储类 1. 局部变量及其概念l形参是局
6、部变量。l在一个复合语句中定义的变量。l在一个函数中定义的变量。第14页/共47页2. 全局(外部)变量及其概念l函数外部定义的变量。l用extern 说明的变量。3. 动态(自动)变量l程序运行期间,分配内存单元,运行结束,内存单元就释放。l形参、局部变量都是动态变量。l动态变量用auto说明或省略。第15页/共47页4. 静态变量l调用函数结束,变量值保留,下次调用值仍存在。l静态变量用static 说明。l数组只有定义成静态时,才能初始化。l静态变量自动赋0值。l何时需要定义静态数组:保留函数的变量值和数组初始化。第16页/共47页例: 读程序,理解静态变量#include #inclu
7、de void main() int count(int); do count(0); while(!kbhit(); cout”Function COUNT() have been called”count(1)”timesn” 第17页/共47页int count(int i) static int c=0; if(i) return c; else return +c; return 0;说明:未从键盘上按下键时,反复循环调函数count(), C一直自加,从键盘上一旦按下键时,结束循环,输出C值。第18页/共47页5. 寄存器变量作用:存取速度快。特点:只允许使用三个寄存器变量,且必须
8、是形参和局部变量才能使用。用法:用 register 说明。第19页/共47页5.7 5.7 内联函数内联函数 大量、多次调用函数,要占计算机很多时间,为了用空间换时间,才用内联函数。只要在定义函数,或者对函数原型说明时,在行首加上inline 即可。例:求圆面积#includeinline double calArea(double radius) return 3.14*radius*radius;第20页/共47页void main() double r=3.0; /r是圆的半径double area;area=calArea(r); /调用内联函数,编译时此处被替换为calArea函数
9、体语句coutareaendl;return 0; 第21页/共47页5.8 带有缺省参数的函数带有缺省参数的函数 函数说明时,先对形参初始化,调用函数时,若给实参,就使用实参,否则使用说明时给出的初始值。例:求四方体体积#include #include int get_volume(int length, int width = 2, int height = 3);第22页/共47页void main()int x = 10, y = 12, z = 15;cout Some box data is ;cout get_volume(x, y, z) endl;cout Some box
10、 data is ;cout get_volume(x, y) endl;cout Some box data is ;cout get_volume(x) endl;第23页/共47页cout Some box data is ;cout get_volume(x, 7) endl;cout Some box data is ;cout get_volume(5, 5, 5) endl;return 0;int get_volume(int length, int width, int height) coutsetw(5)lengthsetw(5)widthsetw(5)height ;r
11、eturn (length * width * height); 第24页/共47页说明:l默认参数的说明一定要放在函数使用之前。l对形参的初始化可以是任意表达式。l如部分形参初始化,必须自右向左。l如果函数说明出现在不同程序块, 允许提供和使用不同的默认值。第25页/共47页5.9 5.9 参数数目可变函数参数数目可变函数 根据需要,函数的参数可多可少,函数参数多少可变的函数称参数数目可变函数。例:从n个数中找出最大数#include #include 第26页/共47页int main()int a,b,c,d,e;int max(int,int.); cinabcde; coutThe
12、bigger between a and b is max(2,a,b)endl; coutThe bigger in the five number is max(5,a,b,c,d,e)endl;return 0;第27页/共47页int max(int num,int integer.) va_list ap; int m=integer; va_start(ap,integer); for(int i=1;im) m=t; coutiendl; va_end(ap); return m; 第28页/共47页说明:l必须使用头文件stdarg.h。l定义函数和函数原型的书写要求。l要用到
13、三个专用函数和一个类型定义关键字: va_start, va_arg, va_end和va_list 。l请将此题改为求实型数最大值。 5.10 5.10 函数重载(函数重载(overloadoverload)一个函数可以当几个函数使用。根据形参的类型,调用不同的函数。函数定义不能少。第29页/共47页例: 用一个函数add( ) 实现两个整型数相加和两个实型数相加#includevoid main(void) int m, n;double x, y;int add(int m, int n);double add(double x, double y);coutmn;第30页/共47页co
14、utinteger “m+n=add(m,n)endl;coutxy;coutreal number x+y= add(x,y)endl;int add(int m, int n) return m+n; double add(double x, double y) return x+y; 第31页/共47页5.11 5.11 外部函数外部函数能被其他文件调用的函数称为外部函数。外部函数要用extern 说明。5.12 5.12 函数递归函数递归函数递归的两个基本条件1. 边界条件2. 递归表达式3. 函数自身调用自身第32页/共47页举例:计算 n! (c=f(n-1)*n)#include
15、 long fac(int n) long f;if (n=1) c=1;else c=fac(n-1)*n;return(f);第33页/共47页void main()long fac(int n);int n;long y;coutn;y=fac(n);coutn!=yendl;第34页/共47页1. 计算 1+2+3+ +1002. 计算 0,1,1,2,3,5,8,. 第前20项(return (f(n-1)+f(n-2);)5.13 5.13 编译予处理编译予处理概念:在对程序编译之前就进行替换处理,称予处理(有三种: 嵌入指令(文件包含)、宏定义、和条件编译)。用途:1. 有利于程
16、序的移植与兼容.2. 增加程序的兼容性.3. 减少程序的运行时间4. 减少程序的长度第35页/共47页5.13.1 嵌入指令#include 方法:建立多个*.cpp文件,按执行顺序放在#include 中。5.13.2 宏定义方法与用途1. 不带参数的宏定义(用一个标识符代表一个字符串或一个常量,不做语法检查。)#define PI 3.14159 (宏定义的标识符常使用大写字母,以有别于变量)第36页/共47页#define N 100 (N可以用作数组的下标)#define R 3#define A PI*R*R#define C CONPUTER#define pr cin#defin
17、e N “n” 例: prxN第37页/共47页2. 带参数的宏定义(用一个标识符代表一个函数,不做语法检查。)#define PI 3.14159#define circle (A,L,R) A=PI*R*R;L=2*PI*PI #define MAX(x,y) (x)(y) ? (x) ? (y)#define mul(x1,x2) x1*x2 / 注意(x1)*(x2)例:定义一个求两个数之积的宏名mul, 且求:2+3,6+2和3.1,3的积#define mul(x1,x2) x1*x2main() coutmul(2+3,6+2)mul(3.1, 2);第38页/共47页说明: 1
18、. 根据计算的结果决定其类型。2. 实参是表达式时, 形参要用( )。3. 一个#define 只能定义一个宏名。4. 带参宏近似带参函数的定义及用法。5. 带参宏的宏中可以有进出两种参数。6. 宏名可以作为定义数组时的下标(static int aN )7. 如果要修改宏名的内容,只能用define。8. 可以使用#undef 解除宏定义。第39页/共47页例: 定义一个宏, 求x 的绝对值#define abs(x) (x0 ? x : -x) 使用时: int a=-3; coutabs(a); 例: 定义一个宏, 判断x 是否是偶数(偶数取 1)#define num(x) (x%2 ? 0 : 1)第40页/共47页5.13.3 条件编译指令格式1: #if #else #endif第41页/共47页格式2 (连续判断)#if #elif #else#endif第42页/共47页 例:读程序,理解条件编译#include #define NUM 100main()#if num=100 cout”hello”e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 6 徽 章(教学设计)苏教版二年级下册综合实践活动
- 大型公共建筑合同投标保函范本
- 分期房产合同范本
- 13《 画杨桃》教学设计2023-2024学年统编版语文二年级下册
- 同城小店转让合同范本
- 企业模具合同范本
- 5这些事我来做 第一课时(教学设计)-部编版道德与法治四年级上册
- 耐火原料采购合同范本
- 8《网络新世界》(第一课时)教学设计-2024-2025学年道德与法治四年级上册统编版
- 劳务合同范本 货运
- 小学道德与法治课堂生活化教学的策略讲座稿
- 大学生返家乡志愿服务证明
- (新版)网络攻防知识考试题库(含答案)
- 建筑工程资料档案盒侧面标签
- 工程设计变更工程量计算表
- 动力工程及工程热物理专业英语课件
- 幼儿系列故事绘本课件达芬奇想飞-
- 出纳收入支出日记账Excel模板
- 给水排水用格栅除污机通用技术条件
- 一年级下册综合实践活动课件-身边的水果和蔬菜全国通用16张
- 市政工程主要施工机械设备
评论
0/150
提交评论