函数、函数与运算符重载教学案例

上传人:yuzo****123 文档编号:141166657 上传时间:2020-08-04 格式:PPT 页数:257 大小:1.49MB
返回 下载 相关 举报
函数、函数与运算符重载教学案例_第1页
第1页 / 共257页
函数、函数与运算符重载教学案例_第2页
第2页 / 共257页
函数、函数与运算符重载教学案例_第3页
第3页 / 共257页
函数、函数与运算符重载教学案例_第4页
第4页 / 共257页
函数、函数与运算符重载教学案例_第5页
第5页 / 共257页
点击查看更多>>
资源描述

《函数、函数与运算符重载教学案例》由会员分享,可在线阅读,更多相关《函数、函数与运算符重载教学案例(257页珍藏版)》请在金锄头文库上搜索。

1、高级语言程序设计C+,张海威 南开大学信息技术科学学院,第5章 函数与重载,函数的说明与使用,1,函数的嵌套与递归,2,函数与运算符重载,3,函数与C+程序结构,4,2,Database void main(void) float p, q, xr; coutP; coutq; coutThe Equation is:; coutx3+px+q=0endl; float a=sqrt (q/2)*(q/2) + (q/3) * (q/3) * (q/3); float R,S,A,B; const float eps = 1e-6;/设置精确度 R = -q/2+a; S = -q/2-a;,

2、函数的使用和说明,Database do root = croot; croot = (2*root + R/(root*root)/3; while(fabs(croot-root)eps); A = croot; croot = S; do root = croot; croot = (2*root + S/(root*root)/3; while(fabs(croot-root)eps); B = croot; xr = A + B; coutendlThe real root of the equation isxr; ,函数的使用和说明,程序分析 程序中包含两段类似的代码,完成相同的

3、功能:,Database do root = croot; croot = (2*root + R/(root*root)/3; while(fabs(croot-root)eps); A = croot;,croot = S; do root = croot; croot = (2*root + S/(root*root)/3; while(fabs(croot-root)eps); B = croot;,函数的使用和说明,函数的引入 程序中功能相同,结构相似的代码段可以用函数进行描述 程序的功能相对独立,用来解决某个问题 具有明显的入口和出口 入口:参数 出口:返回值,Database c

4、onst float eps=1e-6; croot=x; do root=croot; croot=(2*root+x/(root*root)/3; while(fabs(crootroot)eps);return croot; ,函数的使用和说明,函数的作用 实现程序功能的模块化 实现程序结构的简化 实现程序代码的重用 函数的应用场景 包含多处功能相同的代码 处理数据的类型、处理过程相同或相似 代码段具有代表性或特殊含义,Database void printString();/函数原型 int main() printString();/调用函数printString return 0;

5、 void pirntString()/函数定义 cout“Hello!”endl; return; /函数返回 ,函数的说明与使用,函数的使用步骤 先说明,后调用 程序中必须包含函数的说明及定义 函数的说明方式 函数原型 函数定义可以出现在程序的任何合适的地方 函数定义 函数定义必须出现在调用函数之前,Database 函数定义的一般形式 ( ) 通常用来实现某种特定的功能 不需要进行数据的传递 处理的数据通常与主调函数无关,Database i10;i+) cout“*”; coutendl; ,函数的说明与使用,有参函数(带有参数的用户自定义函数) 进行调用时,必须提供所需个数的且具有相

6、匹配数据类型的实际参数 函数原型的一般形式 (); 定义的一般形式 () 通过调用处提供的不同实参值来计算出其对应的函数值、或实现某种与传递过来的那些不同值有关的某种功能。,Database ik;i+) cout“*”; coutendl; ,函数 的使用,调用,说明与定义,参数,重载,返回,内联函数,23,Database 例如 int add(int a, int b); inline void swap(float ,Database void型参数 void printroot(void); ,* float cuberoot(float); float cuberoot(float

7、 x);,Database void printStar(int);/函数原型 int main() printStar(10);/调用函数 void printStar(int k)/函数体,#include using namespace std; void printStar(int k)/函数定义 int main()printStar(10); /调用函数,函数的说明与使用,函数的说明和定义 两种说明方式的区别 函数原型的参数表中,参数名可以省略;函数定义的参数表中,必须给出参数名(省略参数名为无名参数) 函数原型的函数体,可以出现在函数调用之后;函数定义的函数体,必须出现在调用之前

8、 函数原型的参数表后面加分号“;”,函数定义的参数表后面是函数体,即花括号“” 函数定义不能出现在任何函数体中,函数原型可以出现在其它函数体中,Database 有参函数调用格式 ( ) 例如:printStar(26);,Database /函数返回值类型为空(void) return ;/与函数返回值的类型一致 return ();/与前一种写法等价,Database ,Database y=(x*x+x+1)/2-5.5; return y; /对非void类型的函数,必须有一个 /return语句,由它返回函数值 ,Database double f (double); int mai

9、n() double z,a; z=(f(2.5)+2*f(6)/f(4.3); /调用自定义函数f couta; coutf(a)=f(a)endl; /算出f(a)并输出 return 0; double f (double x)/函数f的定义,Database double f (double x)/函数f的定义 int main() double z,a; z=(f(2.5)+2*f(6)/f(4.3); /调用自定义函数f couta; coutf(a)=f(a)endl; /算出f(a)并输出 return 0; ,Database return句括号内表达式的值,即为整个函数的返

10、回值。 return句也可使用另一格式,即可以不括起表达式: return (x*x+x+1)/2-5.5; /OK!,Database 不可给函数名f赋值。 return (f); 返回值类型应该是double,而非指针类型(函数名相当于一个指针)。 f(x)=(x*x+x+1)/2-5.5; 赋值号左端非变量(也即f(x)非左值)。,函数的说明与使用,函数的参数 C+语言的函数分为无参函数和有参函数 函数的参数 无参数 一个参数 多个参数 函数参数表的写法 一般写法 省略参数名(无名参数) 参数赋初值,Database int f(int a,int b,int)return a*a+b;

11、 两个不同的函数同名,但由于第二个函数包含一无名参数,使得在调用时能够被区分,f(x,y)是第一个函数的调用,f(x,y,0)是第二个函数的调用,Database void func(int a=11, int b=22, int c=33) /为参数a、b、c设置了默认值11、22与33 couta=a, b=b, c=cendl; ,函数的说明与使用,Database /调用时缺省了3个实参,将使用 /定义处给定的那3个相对应的参数默认值 func(55); /调用时缺省了后2个实参,将使用 /定义处给定的那后2个对应参数默认值 func(77,99);/调用时缺省了最后1个实参,将使用

12、/定义处给定的那最后1个参数默认值 func(8,88,888); /调用时没缺省任一个实参, /系统将不使用定义处给定的任一个参数默认值 return 0; ,函数的说明与使用,运行结果: a=11, b=22, c=33 a=55, b=22, c=33 a=77, b=99, c=33 a=8, b=88, c=888,Database /OK! void func(int a=1, int b, int c=3); /ERROR! void func(int a=1, int b=2, int c); /ERROR! 对第一个函数说明,采用如下的调用语句: func(1, 22, 33

13、3); /OK! 调用时给出所有实参 func(); / ERROR! 参数a没有默认值 func(10,20); /OK! 参数c默认为3 func(5, ,9);/ERROR!调用处也只能缺省后面的连续若干个实参,函数的说明与使用,函数调用过程中参数的传递 一般传递过程(赋值传递) 发生函数调用,转到函数体执行 根据函数的形参,分配内存空间 将实参赋值给形参,即为形参分配的存储空间赋值,此时实参在函数体内失效,形参有效 函数执行完毕,返回到主调函数,形参所占的空间自动回收,形参失效,Database int searchArray(int 10,int); 函数定义 int searchA

14、rray(int a,int b)/写为a10也可以 return ab; ,Database int a20; 一维数组以及多维数组的第一维大小,形参、实参可以不对应 实参为a10,形参可以定义为x6,Database void strcat(char s,char ct) int i=0,j=0; while (si!=0) i+; while (ctj!=0) si+=ctj+; si=0; ,函数的说明与使用,函数的参数 【例5.5】主函数部分,Database char b20=是东南大学学生; strcat(a,b);/实参为数组名 coutaendl;/打印字符数组a retur

15、n 0; ,函数的说明与使用,函数的参数 【例5.6】多维数组做函数参数举例:设计函数,实现矩阵的转置和矩阵乘法,并在主函数中验证 用二维数组存储矩阵 由于数组作为参数,传递的是数组的首地址,因此,在函数中对作为形参的数组进行的操作,能够直接反映到实参数组中,Database void inverse(int 36, int 63);/转置矩阵 void multi(int 63,int 34,int 64);/矩阵乘法 void output(int 64); /矩阵输出 int main() int middle63, result64; int matrix136=8,10,12,23,

16、1,3,5,7,9,2,4,6, 34,45,56,2,4,6; int matrix234=3,2,1,0,-1,-2,9,8,7,6,5,4; inverse(matrix1,middle);/实参为数组名 multi(middle,matrix2,result); output(result); return 0; ,函数的说明与使用,【例5.6】转置和乘法函数定义,Database for (i=0;i3;i+) for (j=0;j6;j+) middleji=matrix1ij; return; void multi(int middle63,int matrix234,int result64) int i,j,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号