第5章 函数及其应用
5.1 函数种类
5.1.1 命令函数,例如:getchar(),putchar()等。
5.1.2标准C++库函数,fabs(), pow(), rand(),sin(x), sqrt(), fexp()等,要使用头文件。
5.1.3自定义函数
5.2 自定义函数的概念及使用方法
例1:求两个数中的最大数
#include <iostream.h>
int imax (int a, int b)
{
return (a>b ? a:b); }
void main()
{int a=6,b=9;
cout<<"max="<<imax(a,b)<<endl;
}
例2:求x的n次方
#include "iostream.h"
main()
{ float mpow(float a,int n);
cout<<"pow="<<mpow(3.,3)<<endl;
}
float mpow(float a,int n)
concurrenthashmap cas{int i;
float k=1;
for(i=1;i<=n;i++)
k=k*a;
return (k); }
5.3 自定义函数的三种形式
5.3.1 无参函数,例如main(),getchar()等。
主函数与子函数之间不传输数据
例:输出字符四方形
************
************
************
weight about************
void print()
{int i;
for(i=1;i<5;i++)
cout<<(“************\n”;
}
5.3.2. 空函数
例: null()
{ }
5.3.3. 有参函数
如例1,例2
说明:
1. C++语言程序由一个主函数和若干个子函数(模块)组成。
1. 子函数也有类型和函数值。
2. 子函数程序体可以作为单独的文件存放,如果单独存放,应在主函数中作为头文件进行说明。
3. electronic的词性转换函数有无返回值,应使用return语句,注意使用()和;。
4. 子函数中有两个变量,一个是传递变量,此变量称做形参、一个是子函数内部使用的变量。传递变量的类型说明要放在{}外边或放在函数名字右边的()内。如果放在函数名字右边的()内,每一个实参要分别说明。
5. 使用函数时,自变量位置的表达式称做实参,实参可以是变量、常量或表达式。
6. 实参和形参的个数、类型位置要一致。
7. 用return 返回的值只有一个。
8. 一个函数程序,可以出现多个return 语句。
9. 当函数不返回值时,return 可以省略。
10. 函数的类型一定与return 返回的值的类型一致。
11. 当函数不返回值时,应在函数名字前加void,又叫无类型。
12. 使用函数有三种使用方法:
(1) 作为语句。putchar();
(2) 作为表达式。A=max(x,y)+zpow(x,n)
(3) 作为实参。A=max(max(a,b),c)
14 函数程序中不允许在定义函数。
15.函数可以单独编译可保存,均放在项目中。
5.4 函数间的数据传递
实参的值传递给形参,这叫实哑结合,而且只能将实参传给形参,这叫值传递,又叫只读,又叫单向传递,单向传递时,形参的值改变,不影响实参的值。.
5.4.1 函数的参数和返回值
5.4.2 函数原型
子函数程序体可以放在主函数后边,也可以放在主函数前边。如果放在后边,应在主函数中进行说明,说明时可以出现变量名,或用另外的名。整型函数和字符函数可以不说明。注意句未用“;”。
例:交换两个变量的值(在函数中完成、分别在子函数和主函数中输出,观察结果)
5.4.3 引用传递
双向传递,又叫地址传递
实现方法:在函数说明和函数定义时,类型说明后,变量名前加&
例:通过使用引用传递,计算圆周长和圆的面积(此方法可以从函数中带回多个计算结果)
#include "iomanip.h"
#include "iostream.h"
main()
{ float res(float &a,float &b,float r);
float r, a, b;
cin>>r;
res(a, b, r);
cout<<"r="<<r<<setw(10)<<"a="<<a<<setw(10)<<"b="<<b<<endl;
}
float res(float &a,float &b,float r)
{a=3.14159*r*r; b=2*3.14159*r;
return 0;
}
例:编写函数程序
1. 求n的阶乘 f(n)
2. 求三个数的最大数(可以求多个数的最大数)
3. 求两个正整数的最大公约数(可以求多个数的最大公约数) f (m,n)
4. 求n+(n+1)+(n+2)+……(n+k)
5. 用子函数完成x2,x3,xn
5.5 C++库函数
在一个文件中被调用的函数称为库(内部)函数。
函数名 函数原型 要用到的头文件
abs() int abs(int n) cstdlib.h
fabs() double abs(double x) cmath.h
cos() double cos(double x) cmath.h
exp() double exp(double x) cmath.h
log() double log(double x) cmath.h
pow() double pow(double x, double y) cmath.h
c语言中trunc是什么意思sqrt() double sqrt(double x) cmath.h
sin() double sin(double x) cmath.h
tan() double tan(double x) cmath.h
kbhit() int kbhit() conio.h
exit() void exit(int n) stdlib.h
rand() double rand(double x) stdlib.h
5.6 作用域和存储类
5.6.1 作用域
5.6.1.1 块作用域
块内说明的变量只能在本块有效。见下例。
5.6.1.2 文件作用域
文件作用域就是全局变量。
例:读程序,观察全局变量和局部变量的关系
#include <iostream.h>
int i; //全局变量,文件作用域
void main()
{
i=5; //文件作用域的i赋初值
while是什么结构语句 { //子块1
int i; //局部变量,块作用域
i=7;
cout<<"i="<<i<<endl; //输出7
}
cout<<"i="<<i<<endl; //输出5
}
5.6.1.3 函数原型作用域
函数的作用域只限定在函数原型的函数中。
5.6.1. 4 函数作用域
在函数内均有效, 不受块作用域的限制, 只有标号属于函数作用域(在goto语句中使用)。
5.6.2 存储类
5.6.2.1 局部变量及其概念
1. 形参是局部变量。
2. 在一个复合语句中定义的变量。
3. 在一个函数中定义的变量。
5.6.2.2 全局(外部)变量及其概念
1. 函数外部定义的变量。
2. putchar函数用extern 说明的变量。
5.6.2.3 动态(自动)变量
1. 程序运行期间,分配内存单元,运行结束,内存单元就释放。
2. 形参、局部变量都是动态变量。
3. 动态变量用auto说明或省略。
5.6.2 .4 静态变量
1. 调用函数结束,变量值保留,下次调用值仍存在。
2. 静态变量用static 说明。
3. 数组只有定义成静态时,才能初始化。
4. 静态变量自动赋0值。
5. 何时需要定义静态数组:保留函数的变量值和数组初始化。
例: 读程序,理解静态变量
#include <iostream.h>
#include <conio.h>
main()
{ int count(int);
do {
count(0);
}while(!kbhit());
cout<<”Function COUNT() have been called”<<count(1)<<”times\n”l
return 0;
}
int count(int i)
{ static int c=0;
if(i)
return c;
else
return ++c;
return 0;
}
说明:未从键盘上按下键时,反复循环调函数count(), C一直自加,从键盘上一旦按下键时,结束循环,输出C值。
5.6.2.5寄存器变量
作用:存取速度快。
特点:只允许使用三个寄存器变量,且必须是形参和局部变量才能使用。
用法:用 register 说明。
5.7 内联函数
大量、多次调用函数,要占计算机很多时间,为了用空间换时间,才用内联函数。
只要在定义函数,或者对函数原型说明时,在行首加上: inline 即可。
例:求圆面积
#include<iostream.h>
inline double CalArea(double radius) //内联函数,计算圆的面积
{
return 3.14*radius*radius;
}
int main()
{
double r=3.0; //r是圆的半径
double area;
area=CalArea(r);
//调用内联函数求圆的面积,编译时此处被替换为CalArea函数体语句
cout<<area<<endl;
return 0;
}
5.8 带有缺省参数的函数
函数说明时,先对形参初始化,调用函数时,若给实参,就使用实参,否则使用说明时给出的初始值。
例:求四方体体积
#include <iostream.h>
#include <iomanip.h>
int get_volume(int length, int width = 2, int height = 3);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论