C++全套学习课件-格式第05章函数

上传人:E**** 文档编号:90582703 上传时间:2019-06-13 格式:PPT 页数:88 大小:718KB
返回 下载 相关 举报
C++全套学习课件-格式第05章函数_第1页
第1页 / 共88页
C++全套学习课件-格式第05章函数_第2页
第2页 / 共88页
C++全套学习课件-格式第05章函数_第3页
第3页 / 共88页
C++全套学习课件-格式第05章函数_第4页
第4页 / 共88页
C++全套学习课件-格式第05章函数_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《C++全套学习课件-格式第05章函数》由会员分享,可在线阅读,更多相关《C++全套学习课件-格式第05章函数(88页珍藏版)》请在金锄头文库上搜索。

1、目 录,第1章 C+概述 第2章 数据类型、运算符和表达式 第3章 简单的输入/输出 第4章 C+的流程控制 第5章 函数 第6章 编译预处理 第7章 数组 第8章 结构体、共同体和枚举类型 第9章 指针和引用 第10章 类和对象 第11章 类和对象的其他特性 第12章 继承和派生 第13章 多态性 第14章 输入/输出流 第15章 模板,第一部分 面向过程的程序设计,第二部分 面向对象的程序设计,第5章 函数,本章要点,了解标准(预定义)函数,并学会怎样在程序中使用它们 如何定义函数 领会函数调用的内部实现机制 区分函数声明和定义 理解值参数和引用参数的区别 了解引用参数和带有返回值的函数

2、了解带有默认参数的函数 理解并运用递归、内联、重载函数 理解标识符的作用域 了解局部变量、静态变量和全局变量的区别,主要内容,概述 库函数的使用 函数的定义与调用 函数的原型说明 函数的嵌套调用和递归调用 内联函数 函数重载 作用域和存储类别,一个简单的函数调用例 P77,#include /li0501.cpp void printstar( ) cout“*“n; void print_message( ) cout“ Welcome to C+“n; void main( ) printstar( ); print_message( ); printstar( ); ,C+ 程序的构成,

3、由函数构成。 函数:一个独立完成某个功能的语句块,函数与函数之间通过(输入)参数和返回值(输出)来联系。 执行流程:从main( )函数开始,顺序执行。遇函数调用语句,转入被调函数,执行完毕,返回主调函数。,一个程序中函数调用的示意图,函数分类,从用户角度来看 系统库函数 ( 如:sqrt( )、fabs( ) )标准函数 函数 自定义函数 ( 如:printstar( )、 maxx( ) ) 从函数的形式来看 无参函数 ( 如:printstar( ) ) 函数 有参函数 ( 如:maxx(x, y) ),库函数的使用,调用C+语言标准库函数时要求用include命令 例如: #inclu

4、de “math.h“ 或 #include ,include命令必须以#开头,系统提供的头文件以.h作为文件的后缀,函数的定义,分为两种: 无参函数的定义 有参函数的定义,无参函数的定义形式,类型标识符 函数名( void ) /函数的首部 . /函数体 ,例: void printstar(void) cout “*n“ ; ,有参函数的定义形式,类型标识符 函数名( 形参列表) /函数的首部 . /函数体 . ,例: int min( int x, int y ) int z; z = (xy) ? x : y ; return(z); ,表示函数的 返回值类型,函数的返回值,格式:re

5、turn 表达式 ; 或 return (表达式); 或 return ;,例: return(z); 等价于 return z; return(xy?x:y) ;,函数的调用,函数语句 例:printstar( ); (前例) 函数表达式 例:c=min(a, b);,int min(int x, int y ) int z; z = (xy) ? x : y ; return(z); main( ) d=min(a, b); ,形参和实参,形参:即形式参数 定义时函数名后面的变量名 实参:即实际参数 调用函数时函数名后面括号中的表达式,实参形参 传值调用,形参,实参,传值调用示意,一般来说

6、,形参和实参个数、类型应一致。 形参、实参占用不同的内存单元。,实参,形参,相当于 在函数调用时,做如下赋值: x=a y=b,传值调用,传值调用的例子 P80例5.4,#include /li0504.cpp 理解传值调用 void swap(int x,int y) int t; t=x; x=y; y=t; cout“x=“x“,“y=“yendl; void main( ) int a(4),b(5); /等价于int a=4,b=5; swap(a,b); cout“a=“a“,“b=“bendl; ,两数交换,演示,形参变化不会影响实参示图,4,5,main,swap,swap,单

7、向传递。实参和形参分别占用不同的存储单元。,main,形参的改变不会影响实参。,函数调用时,函数调用完,函数的引用调用 P81,函数需要改变传递给它的实参的值时使用,#include /li0504_1.cpp void swap( int ,引用运算符&用来 说明一个引用,函数参数的求值顺序,#include /li0505.cpp 函数参数的求值顺序 int fun(int a, int b) return b; void main( ) int x(5),y(6); int z=fun( x- -,x+y ); coutzendl; ,z的值是多少,自左向右求值:10 自右向左求值:11

8、,VC6.0中的求值顺序是 自右向左,设置函数参数的默认值,#include /li0506.cpp设置函数参数的默认值 void fun(int x=1,int y=2,int z=3) cout“x=“x“,“y=“y“,“z=“zendl; void main( ) fun( ); fun(5); fun(5,6); fun(5,6,7); ,设置函数参数的默认值注意,默认值集中在参数的右边 int fun1(int a, int b=1, int c=2); 合法 int fun1(int a=1, int b, int c=2); 不合法,函数原型说明语句格式,格式1: () 格式2

9、: (),验证歌德巴赫猜想 P84 li0508.cpp,问题:一个大偶数可分解成两个素数之和。,分析: 找出一个数是素数后,如果大偶数减去该素数后的数也是素数,验证该结论。,验证歌德巴赫猜想,#include #include int prime(int a) /返回类型缺省,默认返回int型 int z,i,k; z=0; k=(int)sqrt(a); /不强制类型转换也行 for (i=2;i=k+1) z=1; /是素数,返回 1 return(z); / 不是素数,返回 0 ,#include “iostream.h“ #include “math.h” / 改写 prime( )

10、 函数 int prime( int a ) / 判断 x 是否是素数 int k, i; k=sqrt(a); for( i=2; i=k; i+) if( a%i=0) return(0); / 不是素数,返回 0 return(1); / 是素数,返回 1 ,验证歌德巴赫猜想,一个大偶数可分解成两个素数之和。,验证歌德巴赫猜想,将 96100之间的大偶数分解成两个素数之和。,void main( ) int a,b,m,n=0; for (m=96;m=100;m=m+2) for (a=2;a=m/2;a+) if (prime(a) b=m-a; if (prime(b) coutm

11、“=“a“+“bn; break; ,最大公约数和最小公倍数,int gys(int m, int n) int u, v, t; u=mn?m:n; v=mn?m:n; while(u%v!=0) t=u%v; u=v; v=t; return(v); int gbs(int m, int n, int v) return( m*n/v ); ,例:21,35,最大公约数和最小公倍数,void main( ) int m, n, ys; cin m n ; ys= gys(m, n); cout “公约数:“ ys n; cout “公倍数:“ gbs(m, n, ys ) n; ,void

12、 main( ) int m, n; cin m n ; cout “公约数:“ gys(m, n) n; cout “公倍数:“ gbs(m, n, gys(m, n)n; ,用辗转相除法,最大公约数和最小公倍数,例: m n 21, 35 21, 14 7, 14 7, 7,用大数减小数的方法,while(m!=n) if(mn) m-=n; else n-=m; m是最大公约数,函数的嵌套调用,int b( ) int a( ) y=b( ) void main( ) x=a( ) ,C+语言的函数定义是相互平行和独立的 不能嵌套定义,但可嵌套调用,main函数,调用a函数,结束,a函数

13、,调用b函数,b函数,用几个函数来实现各部分的功能,用f(x)来求x的函数:x4+4x3-3x2+5x+6=0。 用函数xpoint(x1, x2)来求f(x1)和f(x2)的连线与X轴的交点x的坐标。 用函数root(x1, x2)来求(x1, x2)区间的实根。显然执行root函数过程中要用到函数,用弦截法求方程的根,#include #include double f(double x); double xpoint(double x1,double x2); double root(double x1,double x2); void main( ) /主函数 double x1,x2

14、,x,f1,f2; do coutx1x2; f1=f(x1); f2=f(x2); while( (f1*f2)=0 ); x=root(x1,x2); cout“a root of equation is “xendl;,定义函数,求f(x)x4+4x3-3x2+5x+6,double f(double x) double y; y=(x+4.0)*x-3.0)*x+5.0)*x+6.0; return(y); ,定义xpoint函数,求出弦与X轴交点,double xpoint(double x1,double x2) double y; y=(x1*f(x2)-x2*f(x1)/(f(

15、x2)-f(x1); return(y); ,定义root函数,求近似根,double root(double x1,double x2) double x,y,y1; y1=f(x1); do x=xpoint(x1,x2); y=f(x); if ( y*y10 ) y1=y; x1=x; else x2=x; while( fabs(y)=1e-6); return(x); ,例5.11函数嵌套调用过程,main函数,输出根x 结束,root函数,调用xpoint函数,xpoint函数,调用f函数,调用root函数,f 函数,函数的递归调用,直接调用,间接调用,f( ) x=f( ) ,f1( ) x=f2( ) int f2( ) y=f1( ) ,递归调用:一个函数直接或间接地调用自身。,函数的递归调用图示,f函数,调用f函数,f1函数,调用f2,f2函数,调用f1函数,直接调用,间接调用,参数有变化,参数有变化,何时采用递归方法?,可把要解决的问题转

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

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

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