C高级语言程序设计第5章.ppt
《C高级语言程序设计第5章.ppt》由会员分享,可在线阅读,更多相关《C高级语言程序设计第5章.ppt(161页珍藏版)》请在三一办公上搜索。
1、C+高级语言程序设计,第5章 函数北京邮电大学信息与通信工程学院,程序设计中,把具有一定功能的程序模块用函数或类来实现。,2023/11/7,北京邮电大学信息与通信工程学院,-2-,第5章 函数,内容函数定义、声明、函数的调用、函数参数传递机制函数的特殊形式,包括递归函数、内联函数、带默认参数值的函数标识符的作用域和可见性变量的存储类型和生存期,2023/11/7,北京邮电大学信息与通信工程学院,-3-,5.1 函数概述,结构化程序设计,将整个程序自顶向下分为若干个程序模块,每个模块用来实现一个特定的功能。C+中的模块以函数和类的形式实现。函数是具有一定功能又经常使用的相对独立代码段。无论是面
2、向过程的程序设计还是面向对象的程序设计,函数都是一种实现算法的重要形式。,2023/11/7,北京邮电大学信息与通信工程学院,-4-,5.1 函数概述,函数接口(规定接口形式)函数名(命名规则与变量相同,见名知意)函数类型(返回值类型)形式参数表函数体(实现算法三种基本结构组合而成)常用的函数C+的库函数自定义的函数,2023/11/7,北京邮电大学信息与通信工程学院,-5-,5.1.1 自定义函数概述,编程者在处理具体问题时,将程序中多处使用的、实现一定功能的特定代码段定义成函数。这样的函数称为自定义函数。在同一个程序中,一个函数只能定义一次。一般是通过函数调用来使用函数。函数调用需要指定函
3、数名并且提供被调用函数所需的信息(即函数参数)。,2023/11/7,北京邮电大学信息与通信工程学院,-6-,5.1.1 自定义函数概述,例如要打印某一年某一月的月历,2023/11/7,北京邮电大学信息与通信工程学院,-7-,5.1.2 库函数概述,C+标准库提供了丰富的函数集合,可以进行常用的数学计算、字符串操作、字符操作、输入/输出、错误检查和许多其他操作。要熟悉C+标准库提供的类和函数集合,不要事事从头做起,要尽可能利用C+标准库提供的函数,以便减少程序开发的时间。这是程序设计的技巧之一。,2023/11/7,北京邮电大学信息与通信工程学院,-8-,5.1.2 库函数概述,数学库函数实
4、现常见的数学计算使用时,在程序中嵌入cmath头文件,按对应库函数的接口形式写调用语句。调用数学函数:函数名(参数1,参数n)例如:double x;x=sqrt(900.0);coutx;数学函数库中的多数函数都返回double类型结果。,2023/11/7,北京邮电大学信息与通信工程学院,-9-,2023/11/7,北京邮电大学信息与通信工程学院,-10-,常用数学库函数,2023/11/7,北京邮电大学信息与通信工程学院,-11-,#include#include using namespace std;int main()cout a b c;if(a!=0),调用函数 或主调函数,被
5、调函数,库函数,2023/11/7,北京邮电大学信息与通信工程学院,-12-,#include using namespace std;float CircleArea(float r);int main()/manage circle computation cout MyRadius;float Area=CircleArea(MyRadius);cout Circle has area Area;return 0;/CircleArea():compute area of radius r circlefloat CircleArea(float r)const float Pi=3.1
6、415;return Pi*r*r;,自定义函数,5.2 函数定义及使用,2023/11/7,北京邮电大学信息与通信工程学院,-13-,一个C+控制台程序可以由一个主函数(main()函数)和若干子函数构成。主函数main()是程序执行的开始点,由主函数调用子函数,子函数还可以再调用其他子函数。调用其他函数的函数被称为主调函数。被其他函数调用的函数称为被调函数。一个函数既可以是主调函数,又可以是被调函数(main()除外)。,5.2.1 函数的定义,每一个函数都是一个具有一定功能的语句模块,函数定义的语法形式:返回值类型 函数名(形式参数表)函数体(变量声明和执行语句),2023/11/7,北
7、京邮电大学信息与通信工程学院,-14-,约定接口形式,函数体完成功能,int maximum(int x,int y)int maxv;maxv=x=y?x:y;return maxv;,2023/11/7,北京邮电大学信息与通信工程学院,-15-,float CircleArea(float r)const float Pi=3.1415;return Pi*r*r;,5.2.1 函数的定义,函数体,返回值语句,局部变量定义,形式参数,函数类型,函数名,5.2.1 函数的定义,函数名是函数体代码段的外部标识符函数定义之后,即可通过函数名调用函数。例:/Sum():compute sum of
8、 integers in a.bint Sum(int a,int b)int Total=0;for(int i=a;i=b;+i)Total+=i;return Total;,2023/11/7,北京邮电大学信息与通信工程学院,-16-,5.2.1 函数的定义,函数的形式参数表,简称形参表 形式:(类型1 形式参数1,类型n 形式参数n),2023/11/7,北京邮电大学信息与通信工程学院,-17-,/Sum():compute sum of integers in a.bint Sum(int a,int b)int Total=0;for(int i=a;i=b;+i)Total+=i
9、;return Total;,形式参数表示主调函数和被调函数之间需要交换的信息(1)传给被调函数的待处理的数据;(2)控制被调函数执行操作的信息;(3)被调函数执行的结果。形式参数表从参数的类型、个数、排列顺序上规定了主调函数和被调函数之间信息交换的形式。float func(int k,int b,float x)return k*x+b;,2023/11/7,北京邮电大学信息与通信工程学院,-18-,5.2.1 函数的定义,如果函数之间没有需要交换的信息,也可以没有形参,形参表内写void或空着。int Read()cout Response;return Response;,2023/1
10、1/7,北京邮电大学信息与通信工程学院,-19-,5.2.1 函数的定义,5.2.1 函数的定义,函数体是实现函数功能的代码部分变量声明完成函数功能的语句两部分从组成结构看,函数体是由程序的三种基本控制结构即顺序、选择、循环结构组合而成的。,2023/11/7,北京邮电大学信息与通信工程学院,-20-,int Sum(int a,int b)int Total=0;for(int i=a;i=b;+i)Total+=i;return Total;,2023/11/7,北京邮电大学信息与通信工程学院,-21-,函数是由函数名、函数类型、形参表和函数体四部分组成的,使用时通过函数名和参数表调用函数
11、.,例:编写一个函数cube,计算整数的立方。调用函数cube计算从1到10相邻整数的立方差。,2023/11/7,北京邮电大学信息与通信工程学院,-22-,尽可能避免在循环体内调用函数!,/计算整数的立方#include using namespace std;int cube(int);/函数原型声明void main()int last,cb;last=1;cout the difference of cube:endl;for(int x=2;x=10;x+)cb=cube(x);cout cb-last;last=cb;cout endl;,/函数定义int cube(int y)r
12、eturn y*y*y;,2023/11/7,北京邮电大学信息与通信工程学院,-23-,/在三个浮点中找出最大值#include using namespace std;float maximum(float x,float y,float z);/函数原型声明void main()float a,b,c;cout a b c;/调用maximum函数,a,b,c为实际参数 cout Maximum is:maximum(a,b,c)endl;/函数调用,例:在三个浮点中确定最大值,使用自定义函数maximum完成。,2023/11/7,北京邮电大学信息与通信工程学院,-24-,/maximu
13、m函数定义/函数的形式参数x,y,zfloat maximum(float x,float y,float z)float max;max=x=y?x:y;max=max=z?max:z;return max;,5.2.1 函数的定义,注意如果没有函数原型声明,要先写函数定义,后调用函数。C+语言不允许函数嵌套定义,所有函数的定义都是自成一体,即函数体中只包含实现其自身功能的基本语句,不可包含其他函数的定义体。,2023/11/7,北京邮电大学信息与通信工程学院,-25-,5.2.2 函数原型,引用函数之前,要先指定函数的接口形式函数原型函数定义函数原型声明格式:函数类型 函数名(形式参数表)
14、;例:int Max(int a,int b);函数原型声明使编译器获得关于函数名称、函数类型、函数形参个数、形参类型和形参顺序的信息。函数调用时,编译器根据函数原型声明验证函数调用正确与否。,2023/11/7,北京邮电大学信息与通信工程学院,-26-,5.2.2 函数原型,程序中,如果调用自定义的函数,且函数定义在后,调用在先,则必须在调用函数之前有函数原型声明。void subfun1(int x,float a,float b);/原型声明main()int x=20;float a=1.0f,b=0.5f;subfun1();/函数调用 void subfun1(int x,floa
15、t a,float b)/函数定义,2023/11/7,北京邮电大学信息与通信工程学院,-27-,5.2.2 函数原型,如果是函数定义在先,调用在后,则不必进行函数原型声明。因为编译器已经从函数定义得到关于函数的信息。void subfun1(int x,float a,float b)/函数定义 main()subfun1(i,f1,f2);/函数调用,2023/11/7,北京邮电大学信息与通信工程学院,-28-,5.2.2 函数原型,源文件中,如果在所有函数定义体之外声明函数原型,则该函数可被位于其原型声明之后的所有函数调用。,2023/11/7,北京邮电大学信息与通信工程学院,-29-,
16、void subfun1();/原型声明main()subfun1();/函数调用 void subfun2()subfun1();/函数调用 void subfun1()/函数定义,main()void subfun1();/函数原型声明 subfun1();/函数调用 void subfun2()subfun1();/函数调用,void subfun1(),2023/11/7,北京邮电大学信息与通信工程学院,-30-,错误,编译器不识别sunfun1标识符。,5.2.2 函数原型,库函数的声明在相应库的头文件中,使用库函数时要包含对应的头文件。例:#include 调用数学库函数:sqrt
17、()sin()abs(),2023/11/7,北京邮电大学信息与通信工程学院,-31-,2023/11/7,北京邮电大学信息与通信工程学院,-32-,常用C+标准库头文件cassert包含增加诊断以帮助程序调试的宏和信息cctype 包含测试某些字符属性的函数原型和将小写字母变为 大写字母、将大写字母变为小写字母的函数原型cmath 包含数学库函数的函数原型cstdio 包含标准输入/输出库函数的函数原型及其使用的信息cstdlib 包含将数字变为文本、将文本变为数字、内存分配、随机数和各种其他工具函数的函数原型cstring 包含C语言方式的字符串处理函数原型ctime 包含操作时间和日期的
18、函数原型和类型iostream 包含标准输入/输出函数原型iomanip 包含能够格式化数据流的流操纵运算子的函数原型fstream 包含和磁盘文件读/写有关的函数原型,5.2.2 函数原型,例5-2 计算3个整数绝对值的平均值。,2023/11/7,北京邮电大学信息与通信工程学院,-33-,2023/11/7,北京邮电大学信息与通信工程学院,-34-,/例5-2 计算3个数绝对值的平均值#include#include using namespace std;int CalAbsMean(int a,int b,int c);/自定义函数的原型声明 void main()int a,b,c;
19、coutabc;cout绝对值的均值为:CalAbsMean(a,b,c)endl;int CalAbsMean(int a,int b,int c)int sum=abs(a)+abs(b)+abs(c);sum/=3;return sum;,运行结果:输入 a,b,c:-10 20-30 绝对值的均值为:20,5.2.3 return语句,return语句使程序执行流程从被调函数返回主调函数,有两种形式:(1)不返回值的形式 return;(2)返回值的形式 return 表达式;,2023/11/7,北京邮电大学信息与通信工程学院,-35-,int Sum(int a,int b)int
20、 Total=0;for(int i=a;i=b;+i)Total+=i;return Total;,void DisplayMessage()cout只显示确定信息的简单函数不带参数endl;return;,函数返回值类型规定了函数返回给主调函数的值的类型,也称为函数类型。当被调函数只需要把一个数值结果返回给主调函数时,使用return语句返回比较合适。由return语句返回的值的类型必须与函数返回值类型一致。若表达式的结果与函数类型不一致,不能通过编译,需要作强制类型转换,将表达式的类型强制成与函数类型。例如,如果mean是float型,而函数是int型,则return语句应为:retur
21、n(int)mean;,2023/11/7,北京邮电大学信息与通信工程学院,-36-,int Sum(int a,int b)int Total=0;for(int i=a;i=b;+i)Total+=i;return Total;,5.2.3 return语句,5.2.3 return语句,注意如果不需要向主调函数返回值,函数可以定义成无类型的,函数类型写成void,函数结束时也不必用return语句。例:void display()cout“no return”endl;,2023/11/7,北京邮电大学信息与通信工程学院,-37-,5.2.3 return语句,例5-3 根据输入的颜色符
22、号,显示不同的字符串表示的不同颜色。,2023/11/7,北京邮电大学信息与通信工程学院,-38-,2023/11/7,北京邮电大学信息与通信工程学院,-39-,/例5-3 根据输入的颜色符号,显示不同的字符串表示的不同颜色#include using namespace std;void DispColor(char color);void main()char color;coutcolor;DispColor(color);,2023/11/7,北京邮电大学信息与通信工程学院,-40-,/根据输入,显示颜色字符串 void DispColor(char color)switch(colo
23、r)case r:coutred.;break;case g:coutgreen.;break;case b:coutblue;break;default:break;return;,5.2.3 return语句,例5-4 从输入文件中读入学生人数和每人考试成绩,统计成绩的平均值。,2023/11/7,北京邮电大学信息与通信工程学院,-41-,2023/11/7,北京邮电大学信息与通信工程学院,-42-,/例5-4.从输入文件中读入学生人数和每人考试成绩,统计成绩均值。#include#include using namespace std;int CalMean(char chFileNam
24、e);/函数原型声明 void main()char chFileName80=;cout chFileName;/输入文件名 int mean=ChlMean(chFileName);/得到平均值 cout平均值=meanendl;,2023/11/7,北京邮电大学信息与通信工程学院,-43-,/计算均值,函数定义如下 int CalMean(char chFileName)int count;/数据个数 int score;/分数 int sum(0),mean;ifstream infile(chFileName);if(!infile)coutscore)/从文件读取成绩,并累计总成绩
25、;cout0)mean=sum/count;/计算平均值 else mean=0;return mean;/将平均值返回主调函数,运行结果:成绩个数:10 成绩:59 39 24 36 87 98 52 67 52 60 平均值=57,5.2.4 函数调用方式,函数语句函数语句形式:函数名(实参数表);TriAreabySide(a,b,c);函数表达式函数调用出现在表达式中,形式:函数名(实际参数表)x=max(a,b);y=sqrt(x);此时函数要使用return语句向主调函数返回一个确定的值,参与它所在的表达式的运算。float max(float a,float b)return a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计
链接地址:https://www.31ppt.com/p-6504406.html