DEV C++基础教程之函数.docx
- 文档编号:14100614
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:26
- 大小:448.27KB
DEV C++基础教程之函数.docx
《DEV C++基础教程之函数.docx》由会员分享,可在线阅读,更多相关《DEV C++基础教程之函数.docx(26页珍藏版)》请在冰点文库上搜索。
DEVC++基础教程之函数
DEV C++教程
第六章函数
第22课:
函数㈠
前面我们曾经学习了程序设计中的三种基本控制结构(顺序、分支、循环)。
用它们可以组成任何程序。
但在应用中,还经常用到子程序结构。
通常,在程序设计中,我们会发现一些程序段在程序的不同地方反复出现,此时可以将这些程序段作为相对独立的整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方,只要简单地写上其标识符即可。
这样的程序段,我们称之为子程序。
子程序的使用不仅缩短了程序,节省了内存空间及减少了程序的编译时间,而且有利于结构化程序设计。
因为一个复杂的问题总可将其分解成若干个子问题来解决,如果子问题依然很复杂,还可以将它继续分解,直到每个子问题都是一个具有独立任务的模块。
这样编制的程序结构清晰,逻辑关系明确,无论是编写、阅读、调试还是修改,都会带来极大的好处。
在一个程序中可以只有主程序而没有子程序(本章以前都是如此),但不能没有主程序,也就是说不能单独执行子程序。
在此之前,我们曾经介绍并使用了C++提供的各种标准函数,如abs(),sqrt()等等,这些系统提供的函数为我们编写程序提供了很大的方便。
比如:
求sin
(1)+sin
(2)+...+sin(100)的值。
但这些函数只是常用的基本函数,编程时经常需要自定义一些函数。
一、函数的概念
函数是一种对应关系的描述,即确定了函数自变量到函数值之间的对应关系。
与函数相关的概念如下。
⑴自变量:
函数计算时使用的数据,自变量的取值范围称为函数的定义域。
在程序设计中,函数的自变量称为参数,定义域由参数的类型决定。
⑵函数值:
函数的计算结果,它的取值范围称为值域。
在程序设计中函数值称为函数返回值,返回值的类型称为函数类型。
⑶表达式:
数学中函数的计算过程由表达式来说明,在程序设计中,一个函数的处理过程往往比一个表达式所描述的内容要复杂得多,需要一段程序来描述所有的操作,这就是C++语言一个函数的函数体。
二、函数的分类
分为系统函数和用户定义函数(也叫自定义函数)
1、系统函数
系统函数取出由C++语言系统提供的函数(也称库函数)。
这些函数可以从语言系统的手册上查阅其功能和使用方法,用户不需自己再进行定义说明,就直接调用。
例如我们已经学过的标准函数abs、sqrt、max、min等。
例1:
编写求n!
的函数。
参考程序:
#include
usingnamespacestd;
intfact(intn)//fact为函数名;括号里面的为形式参数,简称为形参。
{
inti,t=1;
if(n<0)
{
cout<<"Error!
"< return0; } for(i=2;i<=n;i++) t=t*i; returnt; } intmain() { intm,x; cout<<"Inputm: "; cin>>m; x=fact(m);//函数调用,返回值赋给变量x。 cout< ="< return0; } 三、函数的定义 1.函数定义的语法形式 数据类型函数名(形式参数表)//函数的首部 {//函数体; 说明部分; 语句部分; } 关于函数的定义有如下说明: 1、函数的数据类型是函数的返回值类型(若数据类型为void,则无返回值)。 2、函数名是标识符,一个程序中除了主函数名必须为main外,其余函数的名字按照标识符的取名规则可以任意选取,最好取有助于记忆的名字。 3、形式参数(简称形参)表可以是空的(即无参函数);也可以有多个形参,形参间用逗号隔开,不管有无参数,函数名后的圆括号都必须有。 形参必须有类型说明,形参可以是变量名、数组名或指针名,它的作用是实现主调函数与被调函数之间的关系,通常将函数所处理的数据、影响函数功能的因素或者函数处理的结果作为形参。 在被调用函数中的参数被称为形参。 4、函数中最外层一对花括号“{}”括起来的若干个说明语句和执行语句组成了一个函数的函数体。 由函数体内的语句决定该函数功能。 函数体实际上是一个复合语句,它可以没有任何类型说明,而只有语句,也可以两者都没有,即空函数。 5、函数不允许嵌套定义。 在一个函数内定义另一个函数是非法的。 但是允许嵌套使用。 6、函数在没有被调用的时候是静止的,此时的形参只是一个符号,它标志着在形参出现的位置应该有一个什么类型的数据。 函数在被调用时才执行,也就是在被调用时才由主调函数将实际参数(简称实参)值赋予形参。 这与数学中的函数概念相似,如数学函数: f(x)=x2+x+1 这样的函数只有当自变量被赋值以后,才能计算出函数的值。 三、函数的调用 函数的一般调用形式为: 函数名(实在参数1,实在参数2,…) 若实在参数的个数多于一个时,各实在参数之间用逗号隔开。 若函数无形参,调用形式为: 函数名() 函数名后的一对圆括号不可少。 例2: 任意输入10组三角形的三边,求其面积。 【问题分析】: 已知三角形的三条边求其面积,用海伦公式: 【算法设计】: 我们可以定义一个已知三角形三条边分别为a,b,c,求其面积的函数,设为area(a,b,c)。 程序如下: #include #include usingnamespacestd; doublearea(doublex,doubley,doublez) { doubles1,p; p=(x+y+z)/2; s1=sqrt(p*(p-x)*(p-y)*(p-z)); returns1; } intmain() { doublea,b,c; inti; for(i=1;i<=10;++i) { cout<<"inputa,b,c"< cin>>a>>b>>c; if((a+b<=c)||(a+c<=b)||(b+c<=a)) cout<<"dataerror! "< elsecout<<"s="< } return0; } 注意: 在函数说明中,如果形参的个数不止一个,那么在程序中调用函数的实参个数一定要与形参的个数一致;第一个实参对应第一个形参,第二个实参对应第二个实参,……,次序不能对调。 例3: 无参函数 编程序打印如下图: 、 ---------- |||| ---------- |||| ---------- |||| ---------- 【问题分析】: 共有四个横行,每行10个“-”;共有四个竖行,每行4个“|” 【算法设计】: 设计一个专门的函数只输出横线。 另外一个函数专门输出竖线。 参考程序: #include #include usingnamespacestd; voidhx() { inti; for(i=1;i<=10;i++) cout<<'-'; cout< } voidsx() { intj; cout<<'|'; for(j=1;j<4;j++) cout< cout< } intmain() { intk; for(k=1;k<4;k++) { hx(); sx(); } hx(); return0; } 练习: 求: 1! +2! +3! +……+10! 第23课: 函数㈡ 例1: 使用标识符sum_double求两个浮点数之和。 【问题分析】: 在C++的库函数中,很多由常用程序组成的函数可以直接调用,它们用的就是标识符。 【算法设计】: 函数sum_double(doublex,doubley)有两个参数,参数的类型为双精度实数。 调用函数时要传递两个双精度实数。 参考程序: #include usingnamespacestd; doublesum_double(doublex,doubley) { returnx+y; } intmain() { doublea,b,sum; cout<<"Inputa,b: "; cin>>a>>b; sum=sum_double(a,b); cout<<"sum="< return0; } 四、函数调用的传递方式 函数的调用分为传值调用和传地址调用两种,这两种调用的区别在于参数的传递机制不同。 1、传值调用 在被调用的函数中形参的改变不会影响到实在参数的值,换句话说,实参的值是被复制给了形参名字所标识的一个对象中,函数内部对形参的改变并不能影响到实在参数。 2、传地址调用 传地址调用时,实参用的是地址值,而形参则是我们之后要学到的指针变量。 在这章我们先掌握它的调用形式和作用。 在C++语言中,数据只能从实际参数单向传递给形式参数,称为“按值”传递。 例2: 以下两个程序,哪一个能交换两个数的值。 参考程序一: #include usingnamespacestd; voidswap(inta,intb) { inttmp=a;a=b;b=tmp; } intmain() { intc=1,d=2; swap(c,d); cout< return0; } 参考程序二: #include usingnamespacestd; voidswap(int&a,int&b) { inttmp=a;a=b;b=tmp; } intmain() { intc=1,d=2; swap(c,d); cout< return0; } 在参考程序一中,虽然在swap函数中交换了a,b两数的值,但是在main中却没有交换。 因为swap函数只是交换c,d两变量的值,主程序传递给函数c、d的是变量的值 在参考程序二中,因为swap函数的参数为传地址调用,所以,在函数swap中修改a,b的值相当于在主函数main中修改c,d的值。 所以参考程序一运行完成后结果为: 12;参考程序二运行完成后结果为: 21。 除了用地址表示符“&”表示传的是地址之外,也可以用指针表示。 参考程序三: #include usingnamespacestd; voidswap(int*a,int*b) { inttmp=*a; *a=*b; *b=tmp; } intmain() { intc=1,d=2; swap(c,d);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DEV C+基础教程之函数 C+ 基础教程 函数