函数
一、为什么要用函数?
1、有利于代码重用
当一段代码的功能需要反复使用时,将这个代码块分装成一个函数是个不错的选择,避免在每次使用的时候复制粘贴那一串代码,而且那样容易导致出现错误。
2、提高开发效率。
每个函数对应着自己的功能,当我们需要使用对应的功能的时候,直接调用对应的函数就可以了, 不必再写一段代码去实现那个功能,将程序模块化,提高开发效率。
3、增强程序可读性。
一般函数名对应着函数的功能,在程序中,一个被调用的函数比一长串代码更赏心悦目和容易理解。
4、便于分工合作。
当多个人共同开发的时候,使用函数便于工作的衔接。
实验:
写一个函数,将字符串中的大写英文字母全部变成小写英文字母。
#define _CRT_SECURE_NOWARNINGS
#include<iostream>
#include<string>
using namespace std;
void StringH_L(string &a)
{
for (int i = 0; i < a.length(); ++i)
{
if (a[i] >= 65 && a[i] <= 90)
a[i] = a[i] + 32;
}
}
int main()
{
string word1;
cout << "please input the string:";
cin >> word1;
StringH_L(word1);
cout << "The processed string:";
cout << word1<<endl;
system("pause");
return 0;
}
二、为什么要用函数重载
当对不同类型的数据进行相同的操作时,如果去定义不同名称的函数,在调用时就会显得笨重。而如果用函数重载的话就会显得方便许多。
实验:
编写两个名为Circle_1的重载函数,分别求半径为整数的圆的周长和半径为浮点数的圆的周长。(圆周率PI=3.14159)
#define _CRT_SECURE_NOWARNINGS
#include<iostream>
#include<string>
using namespace std;
#define PI 3.14159
double Circle_1(int r)
{
return 2 * PI*r;
}
double Circle_1(float r)
{
return 2 * PI*r;
}
int main()
{
int r=8;
float R=3.5;
cout << Circle_1(r) << endl;
cout << Circle_1(R) << endl;
system("pause");
return 0;
}
三、什么是值传递
值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程时参数值的单项传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。
实验:
写一个函数,将函数前一个参数的值赋给后一个参数。
#define _CRT_SECURE_NOWARNINGS
#include<iostream>
#include<string>
using namespace std;
#define PI 3.14159
void change_1(int a, int b)
{
a = b;
}
int main()
{
int x = 7;
int y = 10;
change_1(x, y);
cout << "x=" << x<<endl;
cout << "y=" << y << endl;
system("pause");
return 0;
}
四.什么是地址传递
地址传递传递的是变量在内存中的地址,在函数中相当于直接对实参进行操作。
实验:
交换两个整数的值。
#define _CRT_SECURE_NOWARNINGS
#include<iostream>
#include<string>
using namespace std;
#define PI 3.14159
void exchange(int *a, int *b)
{
int i;
i=*a;
*a = *b;
*b = i;
}
int main()
{
int x = 7;
int y = 10;
int *a=&x;
int *b=&y;
exchange(a,b);
cout << "x=" << x<<endl;
cout << "y=" << y << endl;
system("pause");
return 0;
}
五、递归函数
一个函数直接或间接地调用自身,称为函数的递归调用。函数的递归调用比较像俄罗斯套娃。 在设计递归函数之前我们得明确递归函数的入口和出口,以及函数为实现某种目的的主要步骤。如果我们要计算一共有多少个套娃的话,设计一个函数,名为num参数为一套套娃,最大的那个套娃就是这个函数的入口,函数的主要步骤就是把最外层的套娃拿掉,然后return num(剩余的套娃)+1,入口和主要步骤都有了,还需要设计出口,就这个套娃函数来说,出口应该是当套娃里面没有套娃时,return 1,并且套娃的出口判断语句应该在出口语句之前。
例题:利用递归求正整数的阶乘。
#define _CRT_SECURE_NOWARNINGS
#include<iostream>
#include<string>
using namespace std;
double Fac_1(int i)
{
if (i == 1 || i == 0)
return 1;
else
return i * Fac_1(i - 1);
}
int main()
{
int i;
cout << "please input an integer:";
cin >> i;
cout<<Fac_1(i)<<endl;
system("pause");
return 0;
}