代码改变世界

c++第二次作业

2019-09-16 21:29  myself914  阅读(205)  评论(0编辑  收藏  举报

一、函数的作用:
1、
一个较为复杂的系统往往需要划分为若干子系统,然后对这些子系统分别进行开发和调试。高级语言中的子程序就是用来实现这种模块划分的。c++语言中的子程序体现为函数。函数编写好后,可以被重复使用,使用时可以只关心函数的功能和使用方法而不必关心函数功能的具体实现。这样有利于代码重用,可以提高开发效率,增强程序的可靠性,也便于分工合作和修改维护。
2、实例:迭代

#include<iostream>
using namespace std;
long Fact(int n)
{
    int i;
    long result=1;
    for(i=2;i<=n;i++)
    {
        result*=i;
    }
    return result;
}
int main()
{
    int m;
    long ret;
    cout<<"请输入m:"<<endl;
    cin>>m;
    ret=Fact(m);
    cout<<"结果为:"<<ret<<endl;
    return 0;
}

用函数提高了效率也减少了代码量。
二、函数的重载:
1、
两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数,这就是函数的重载。如果没有重载,那么对不同类型的数据进行相同的操作也需要定义名称完全不同的函数,会极大加大代码量。
2、实例:比如用了函数重载的加法运算

#include<iostream>

using namespace std;
int add(int x,int y)
{
    return (x+y);
}
float add(float x,float y)
{
    return (x+y);
}
int add(int x,int y,int z)
{
    return (x+y+z);
}
int main()
{
    int a,b,c,d,e;
    float x,y,z;
    cout<<"输入两个int型"<<endl;
    cin>>a>>b;
    d=add(a,b);
    cout<<"和为:"<<d<<endl;
    cout<<"输入三个int型"<<endl;
    cin>>a>>b>>c;
    e=add(a,b,c);
    cout<<"和为:"<<e<<endl;
    cout<<"输入两个float型"<<endl;
    cin>>x>>y;
    z=add(x,y);
    cout<<"和为:"<<z<<endl;
    return 0;
}

3、总结:
函数重载可以帮助我们避免使用不同的函数名来表示一个功能,一个两个的时候也许可以区分,可是当有很多时,在引用时就特别麻烦,而且出错率高。
三、值传递
1、
值传递是指函数发生调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。
2、实例:

#include<iostream>
using namespace std;
void swap(int x,int y)
{
    int t;
    t=x;
    x=y;
    y=t;
}
int main()
{
    int a=8,b=16;
    cout<<"a="<<a<<"  b="<<b<<endl;
    swap(a,b);
    cout<<"a="<<a<<"  b="<<b<<endl;
    return 0;
}




实参与形参的地址不同

3、总结:
在上面的例子中即使在交换函数中形参进行了交换,但是实参的值并未受到影响,可见这一过程是参数值的单向传递过程,一旦形参获得了值便于实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。
四、地址传递:
1、
即引用传递:引用是一种特殊类型的变量,可以被认为是另一个变量的别名,,通过引用名与通过被引用的变量名访问变量是一样的。用引用作为形参,在函数调用时发生的参数传递,称为引用传递。
2、实例:

include

using namespace std;
void swap(int &x,int &y)
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a=8,b=16;
cout<<"a="<<a<<" b="<<b<<endl;
swap(a,b);
cout<<"a="<<a<<" b="<<b<<endl;
return 0;
}



实参与形参的地址相同

3、总结:
地址传递相当于传递了变量的访问权限,形参与实参有同样的地址,所以当形参交换后,实参的值也同样的交换。
五、递归函数

1、
一个递归函数必须包含两个部分:1、由其自身定义的与原始问题类似的更小规模的子问题,它使递归过程持续进行,称为一般情况;2、递归调用的最简形式,一个能用来结束递归调用的条件,通常称为基线情况。
2、例子:
Fibonacci数列

#include "stdafx.h"
#include<iostream>
using namespace std;
long Fib(int n)
{
    if(n==0) return 0;
    else if(n==1) return 1;
    else return (Fib(n-1)+Fib(n-2));
}
int main()
{
    int n,x;
    cout<<"Input n"<<endl;
    cin>>n;
    x=Fib(n);
    cout<<"Fib="<<x<<endl;
    return 0;
}

3、总结:
编写递归函数要先分析其基线情况和一般情况,然后再用程序表示出来,比如Fibonacci数列,基线情况就是当n=0,fib(n)=0;当n=1,fib(n)=1; 一般情况就是当n>1,fib(n)=fib(n-1)+fib(n-2)。