函数

函数

一、为什么要用函数?

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;
}

在这里插入图片描述

原文地址:https://www.cnblogs.com/TracerLyh/p/11523606.html