第二次 C++作业

1.为什么要用函数?

函数是相对独立的,经常使用的功能抽象化表现形式,函数的优势在于,编写之后可以被重复使用,使用时可以只关心函数的功能和使用方法而不必关心函数的具体实现,这样可以有利于代码重用,可以提高开发效率、增强程序的可靠性,也便于分工合作和修改维护。

#include<iostream>
using namespace std;
int add(int a, int b)
{
	return a + b;
}
int main()
{
	int a;
	cin >> a;
	if (a > 5)
	{
		cout << add(2,3);
	}
	else 
	{
		cout<<  add(3,5);
	}	
	return 0;
}

这样可以非常快捷地调用,而不需要重复使用代码,减少了代码量。

2.为什么要用函数重载?

定义:两个或者以上的具有相同函数名,但是形参类型或者个数不同,编译器会根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。有了函数重载之后,我们在函数功能近似但函数参数不同的情况下,无须对函数命名不同的名字,编译器会自动匹配。

例如对x+y函数功能的实现:

#include<iostream>
using namespace std;
int add(int a, int b)
{
    return a + b;
}
double add(double a, double b)
{
    return a + b;
}
int main()
{
    int a, b;
    double c, d;
    cout << "输入两个int值" << endl;
    cin >> a >> b;
    cout << "输入两个double值" << endl;
    cin >> c >> d;
    cout << "int值的和为" << add(a, b)<<endl;
    cout << "double值的和为" << add(c, d) << endl;
    return 0;
}

3.什么是值传递?

在了解了函数的基础上,调用函数时需要传递参数,这就会涉及到值传递。值传递只给形参分配内存空间,直接将实参的值传递给形参,这一过程是参数的值单单向传递过程,需要指出一旦形参获得了值便于实参脱离关系,此后无论形参发生了怎样的改变,实参都不会受到影响。

#include<iostream>
using namespace std;
int swap(int a, int b)
{
	int t;
	t = a;
	a = b;
	b = t;
	return 0;
}
int main()
{
	int a,b;
	cout << "请输入两个值"<<endl;
	cin >> a >>b;
	swap(a, b);
	cout << "交换后的值为   " << a<<"  " <<  b<<endl;	
	return 0;
}

运行结果:
输入:3 5
输出:3 5
从结果可以看出,程序没有达到交换的目的。这是因为值传递其单向传递的性质,传递过程无法改变实参的值

4.什么是地址传递?

从上面的例子可以看出,值传递无法改变实参的值,那怎么可以改变实参的值呢?这就需要用到地址传递,地址传递可以通过传入的地址参数直接改变实参的值。下面用同样的例子来证明

#include<iostream>
using namespace std;
int swap(int *a, int *b)
{
	int t;
	t = *a;
	*a = *b;
	*b = t;
	return 0;
}
int main()
{
	int a,b;
	cout << "请输入两个值"<<endl;
	cin >> a >>b;
	swap(a, b);
	cout << "交换后的值为   " << a<<"  " <<  b<<endl;	
	return 0;
}

运行结果:
输入:3 5
输出:5 3

5.如何编写递归函数?

递归函数就是一种直接或间接调用函数本身的函数,可能理解直接起来有一点点复杂,但是只要按照步骤来编写,也不是一件太复杂的事情。

我们以Fibonacci函数为例进行演示说明,F(n)=F(n-1)+F(n-2),F1=F2=1

  • 第一步,分析函数的出口,即函数到什么时候会退出循环,停止调用自己。根据题目来看,当n=1或者n=2时,此时函数不会再进行递归调用,会直接返回值,所以这就是函数的出口。

if (n == 2||n==1)
	{
		return 1;
	}
  • 第二步,找到函数的主要的循环,这是求出值的重要部分,,这是引起递归的基本,一般可以在题目中找到。这样,递归函数就可以得出了。

#include<iostream>
using namespace std;
int Fibo(int n)
{
	if (n == 2||n==1)
	{
		return 1;
	}
	else
	{
		return Fibo(n - 1) + Fibo(n - 2);
	}
}
int main()
{
	int a;
	cout << "请输入数据"<<endl;
	cin >> a ;
	cout << "结果为: " << Fibo(a)<<endl;
	return 0;
}
posted @ 2019-09-14 17:04  会飞的DOG  阅读(140)  评论(0编辑  收藏  举报