C 语言 课件 第3章函数.ppt
《C 语言 课件 第3章函数.ppt》由会员分享,可在线阅读,更多相关《C 语言 课件 第3章函数.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本章简介本章简介第第3 3章章 函数函数3.1 3.1 函数的定义与使用(掌握)函数的定义与使用(掌握)3.2 3.2 内联函数(掌握)内联函数(掌握)3.3 3.3 带默认形参值的函数(掌握)带默认形参值的函数(掌握)3.4 3.4 函数重载(掌握)函数重载(掌握)3.5 3.5 使用使用c+c+系统函数(掌握)系统函数(掌握)3.6 3.6 小结小结n n 函数是面向对象程序设计中的基本抽象单函数是面向对象程序设计中的基本抽象单元;元;n n 是对功能的抽象;是对功能的抽象;函数函数2 计算机基础教研室计算机基础教研室C+系统函数系统函数nC+C+的系统库中提供了几百个函数可供程序的系统库
2、中提供了几百个函数可供程序员使用。员使用。例如:求平方根函数(例如:求平方根函数(sprt)、)、求绝对值函求绝对值函数(数(abs)等。等。n使用系统函数时要包含相应的头文件使用系统函数时要包含相应的头文件。例如:例如:cmath使 用 C+系 统 函 数3 计算机基础教研室计算机基础教研室 使用的系统函数使用的系统函数函 数 的 定 义 与 使 用 C+C+标准函数库提供一随机数生成器标准函数库提供一随机数生成器randrand,返回,返回0 0RAND_MAXRAND_MAX之间均匀分布的伪随机整数。之间均匀分布的伪随机整数。RAND_MAXRAND_MAX必须至少为必须至少为32767
3、32767。rand()rand()函数不接受参数,函数不接受参数,默认以默认以1 1为种子(即起始值)。为种子(即起始值)。rand()rand()产生的随机数在每次运行的时候都是与上产生的随机数在每次运行的时候都是与上一次相同的,若要产生每次不同的随机数,可以使一次相同的,若要产生每次不同的随机数,可以使用用srandsrand(seed)(seed)函数进行随机化,随着函数进行随机化,随着seedseed的不同,的不同,就能够产生不同的随机数。就能够产生不同的随机数。4 计算机基础教研室计算机基础教研室系统函数应用举例系统函数应用举例n题目:题目:从键盘输入一个角度值,求出该角度的正弦值
4、、从键盘输入一个角度值,求出该角度的正弦值、余弦值和正切值。余弦值和正切值。n分析:分析:系统函数中提供了求正弦值、余弦值和正切值系统函数中提供了求正弦值、余弦值和正切值的函数:的函数:sin()、cos()、tan(),函数的说明在头函数的说明在头文件文件cmath中。中。使 用 C+系 统 函 数5 计算机基础教研室计算机基础教研室#include#includeusing namespace std;const double pi(3.14159265);void main()double a,b;cina;b=a*pi/180;coutsin(a)=sin(b)endl;coutcos
5、(a)=cos(b)endl;couttan(a)=tan(b)(“活动子集活动子集”栏栏)Visual C+Documentation -Visual C+Documentation -Using Visual C+-Visual C+Programmers Guide -Run-Time Library Reference -Run Time Routines by Category -Run Time Routines by Category 使 用 C+系 统 函 数7 计算机基础教研室计算机基础教研室n函数声明的语法形式函数声明的语法形式类型标识符类型标识符 函数名(形式参数表)函数
6、名(形式参数表)语句序列语句序列若无参数,写若无参数,写void是被初始化的内部是被初始化的内部变量,寿命和可见变量,寿命和可见性仅限于函数内部性仅限于函数内部若无返回值,写若无返回值,写voidl l 形式参数表形式参数表 name1,name2,.,namenl 函数的返回值函数的返回值n由由 return 语句给出,例如:语句给出,例如:return 0;n无返回值的函数(无返回值的函数(void类型),不必写类型),不必写return语句。语句。函 数 的 定 义 与 使 用函数的定义函数的定义8 计算机基础教研室计算机基础教研室n调用前先声明函数原型:调用前先声明函数原型:在调用函数
7、中,或程序文件中所有函数之外,在调用函数中,或程序文件中所有函数之外,按如下形式说明:按如下形式说明:类型标识符类型标识符 被调用函数名(含类型说明的形参表)被调用函数名(含类型说明的形参表);n调用形式调用形式 函数名(实参列表)函数名(实参列表)n嵌套调用嵌套调用函数可以嵌套调用,但不允许嵌套定义。函数可以嵌套调用,但不允许嵌套定义。n递归调用递归调用函数直接或间接调用自身。函数直接或间接调用自身。函 数 的 定 义 与 使 用函数的调用函数的调用9 计算机基础教研室计算机基础教研室编写一个求编写一个求x的的n次方的函数次方的函数#include using namespace std;D
8、ouble power(double x,int n);void main(void)cout 5 to the power 2 is power(5,2)endl;Double power(double x,int n)double val=1.0;while(n)val=val*x;n-;return(val);函 数 的 定 义 与 使 用10 计算机基础教研室计算机基础教研室数制转换数制转换题目:题目:输入一个输入一个8位二进制数,将其转换为十进制位二进制数,将其转换为十进制数输出。数输出。例如:例如:(1101)2=1(23)+1(22)+0(21)+1(20)=(13)10 所以,
9、所以,如果输入如果输入1101,则应输出,则应输出13函 数 的 定 义 与 使 用11 计算机基础教研室计算机基础教研室#include using namespace std;double power(double x,int n);void main(void)int i;int value=0;char ch;cout=0;i-)cin ch;if(ch=1)value+=int(power(2,i);cout Decimal value is valueendl;double power(double x,int n)double val=1.0;while(n-)val*=x;re
10、turn(val);运行结果:运行结果:Enter an 8 bit binary number Enter an 8 bit binary number 0110100101101001Decimal value is 105Decimal value is 105函 数 的 定 义 与 使 用12 计算机基础教研室计算机基础教研室其中其中arctan用如下形式的级数计算:用如下形式的级数计算:直直到到级级数数某某项项绝绝对对值值不不大大于于10-15为为止止;和和x均均为为double型。型。函 数 的 定 义 与 使 用-=2391arctan451arctan16p编写程序求编写程序求
11、的值的值13 计算机基础教研室计算机基础教研室#includeusing namespace std;void main()double a,b;double arctan(double x);/函数原型声明函数原型声明 a=16.0*arctan(1/5.0);b=4.0*arctan(1/239.0);/注意:因为整数相除结注意:因为整数相除结果取整,果取整,/如果参数写如果参数写1/5,1/239,结果就都是,结果就都是0 coutPI=a-b1e-15)f=e/i;r=(i%4=1)?r+f:r-f ;e=e*sqr;i+=2;return r;函 数 的 定 义 与 使 用14 计算
12、机基础教研室计算机基础教研室n寻找并输出寻找并输出11-99911-999之间的数之间的数m m,它满足它满足m m、m2m2和和m3m3均为回文数。均为回文数。回文:各位数字左右对称的整数。回文:各位数字左右对称的整数。例如:例如:11满足上述条件满足上述条件 112=121,113=1331。n分析:分析:10取余的方法,从最低位开始,依次取出该数取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。原数是否相等,若相等,则原数为回文。函 数 的 定 义 与 使 用寻找回文数寻找回文数15
13、计算机基础教研室计算机基础教研室#include using namespace std;void main()bool symm(long n);long m;for(m=11;m1000;m+)if(symm(m)&symm(m*m)&symm(m*m*m)coutm=mm*m=m*m m*m*m=m*m*mendl;函 数 的 定 义 与 使 用16 计算机基础教研室计算机基础教研室bool symm(long n)long i,m;i=n;m=0;while(i)m=m*10+i%10;i=i/10 ;return(m=n);运行结果:运行结果:m=11 m*m=121 m*m*m=1
14、331m=11 m*m=121 m*m*m=1331m=101 m*m=10201 m*m*m=1030301m=101 m*m=10201 m*m*m=1030301m=111 m*m=12321 m*m*m=1367631m=111 m*m=12321 m*m*m=1367631函 数 的 定 义 与 使 用17 计算机基础教研室计算机基础教研室计算如下公式,并输出结果:计算如下公式,并输出结果:其中其中r、s的值由键盘输入。的值由键盘输入。SIN x的近似值按如下公的近似值按如下公式计算,计算精度为式计算,计算精度为10-6:函 数 的 定 义 与 使 用计算计算sin(x)的值的值18
15、 计算机基础教研室计算机基础教研室#include#includeusing namespace std;void main()double k,r,s;double tsin(double x);coutr;couts;if(r*r=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s);else k=tsin(r*s)/2;coutk=p);return g;运行结果:运行结果:r=5r=5s=8s=81.377811.37781函 数 的 定 义 与 使 用20 计算机基础教研室计算机基础教研室游游戏戏规规则则是是:每每个个骰骰子子有有六六面面,点点数数分分
16、别别为为1、2、3、4、5、6。游游戏戏者者在在程程序序开开始始时时输输入入一一个个无无符符号号整数,作为产生随机数的种子。整数,作为产生随机数的种子。每每轮轮投投两两次次骰骰子子,第第一一轮轮如如果果和和数数为为7或或11则则为为胜胜,游游戏戏结结束束;和和数数为为2、3或或12则则为为负负,游游戏戏结结束束;和和数数为为其其它它值值则则将将此此值值作作为为自自己己的的点点数数,继继续续第第二二轮轮、第第三三轮轮.直直到到某某轮轮的的和和数数等等于于点点数数则则取取胜胜,若若在此前出现和数为在此前出现和数为7则为负。则为负。由由rolldice函函数数负负责责模模拟拟投投骰骰子子、计计算算和
17、和数数并并输输出和数。出和数。函 数 的 定 义 与 使 用投骰子的随机游戏投骰子的随机游戏21 计算机基础教研室计算机基础教研室int rolldice(void)/投骰子、计算和数、输出和数投骰子、计算和数、输出和数 int die1,die2,worksum;die1=1+rand()%6;die2=1+rand()%6;worksum=die1+die2;coutplayer rolled die1+die2=worksumendl;return worksum;22函 数 的 定 义 与 使 用22 计算机基础教研室计算机基础教研室#include#include using nam
18、espace std;int rolldice(void);void main()int gamestatus,sum,mypoint;unsigned seed;coutseed;/输入随机数种子输入随机数种子 srand(seed);/将种子传递给将种子传递给rand()sum=rolldice();/第一轮投骰子、计算和数第一轮投骰子、计算和数函 数 的 定 义 与 使 用23 计算机基础教研室计算机基础教研室 switch(sum)case 7:/如果和数为如果和数为7或或11则为胜则为胜,状态为状态为1 case 11:gamestatus=1;break;case 2:/和数为和数
19、为2、3或或12则为负则为负,状态为状态为2 case 3:case 12:gamestatus=2;break;default:/其它情况其它情况,游戏尚无结果游戏尚无结果,状态为状态为0,记下点数记下点数,为下为下一轮做准备一轮做准备 gamestatus=0;mypoint=sum ;coutpoint is mypointendl;break;函 数 的 定 义 与 使 用24 计算机基础教研室计算机基础教研室 while(gamestatus=0)/只要状态仍为只要状态仍为 0,就继续进行下一轮就继续进行下一轮 sum=rolldice();if(sum=mypoint)/某轮的和数
20、等于点数则取胜某轮的和数等于点数则取胜,状态置为状态置为1 gamestatus=1 ;else if(sum=7)/出现和数为出现和数为7则为负则为负,状态置为状态置为2 gamestatus=2;/当状态不为当状态不为0时上面的循环结束时上面的循环结束,以下程序段输出游戏结以下程序段输出游戏结果果 if(gamestatus=1)coutplayer winsn;else coutplayer losesn;运行结果:运行结果:Please enter an unsigned integer:23Please enter an unsigned integer:23player rolle
21、d 6+3=9player rolled 6+3=9point is 9point is 9player rolled 5+4=9player rolled 5+4=9player winsplayer wins函 数 的 定 义 与 使 用25 计算机基础教研室计算机基础教研室函数调用的执行过程函数调用的执行过程main()调调fun()结束结束fun()返回返回保存:保存:返回地址返回地址当前现场当前现场恢复:恢复:主调程序现场主调程序现场返回地址返回地址函 数 的 定 义 与 使 用26 计算机基础教研室计算机基础教研室嵌套调用嵌套调用main调调fun1()结束结束fun1()调调fu
22、n2()返回返回fun2()返回返回函 数 的 定 义 与 使 用27 计算机基础教研室计算机基础教研室 输入两个整数,求平方和输入两个整数,求平方和#include using namespace std;void main(void)int a,b;int fun1(int x,int y);cinab;couta、b的平方和的平方和fun1(a,b)endl;函 数 的 定 义 与 使 用28 计算机基础教研室计算机基础教研室int fun1(int x,int y)int fun2(int m);return(fun2(x)+fun2(y);int fun2(int m)return(
23、m*m);运行结果:运行结果:3 43 4a a、b b的平方和:的平方和:2525函 数 的 定 义 与 使 用29 计算机基础教研室计算机基础教研室递归调用递归调用n 函数直接或间接地调用自身,称为递归调函数直接或间接地调用自身,称为递归调用。用。n 递归过程的两个阶段:递归过程的两个阶段:递推:递推:4!=43!3!=32!2!=21!1!=10!0!=1回归:回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1函 数 的 定 义 与 使 用30 计算机基础教研室计算机基础教研室求求n!分析:计算分析:计算n!的公式如下:的公式如下:这是一个递归形式的公式,应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 第3章函数 函数
限制150内