zoukankan      html  css  js  c++  java
  • 函数

    函数

    一、为什么要用函数?

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

    在这里插入图片描述

  • 相关阅读:
    Linux常用命令
    Linux静态函数库与动态函数库
    解决MySQL5.7的表无法插入中文的问题
    MySQL与postgreSQL在left join查询时的区别
    《刻意练习》读书笔记
    在Golang中实现与Python装饰器类似功能的方法
    项目中使用进程内缓存的一些经验及注意事项
    Golang中使用recover捕获panic的操作及遇到的一个坑
    Python与Golang中给列表中字典按照某个key排序的实现
    浅谈Python与Golang中的“延迟绑定机制”
  • 原文地址:https://www.cnblogs.com/TracerLyh/p/11523606.html
Copyright © 2011-2022 走看看