第二次作业
教案
一、为什么要用函数
1、函数主要是面向对象,为每一项代码功能,实现清晰的操作
2、实现代码复用,功能的修改
例:
#include<iostream>
using namespace std;
int add(int n,int m)
{
int reason;
reason = n + m;
return reason;
}
int main()
{
int n,m;
cout <<" Please enter your number "<< endl;
cin >> n>>m;
cout << "The reason is " << add(n, m)<< endl;
}
通过调用函数add进行加法操作,若想让程序改为减法功能,只用修改add函数。
二、为什么要用函数重载
1、函数重载不需要因为函数的细微功能而建立太多函数。
2、多个函数用同一个名字,调用的时候,根据参数类型可以自动调用对应的函数。从而减少了代码工作量。
例:
#include <iostream>
using namespace std;
void say_hello(void)
{
cout << "this is hello" << endl;
}
void say_hello(int a = 100)
{
cout << "this is hotdog" << endl;
}
void say_hello(double a)
{
cout << "this is hotpig:" << a << endl;
}
//参数个数不同的重载
void say_hello(int a, int b, int c)
{
cout << "a+b+c = " << a + b + c << endl;
}
int main(void)
{
say_hello(100);
say_hello(11.11);
say_hello(1, 2, 3);
}
通过相同的函数名称,调用不同参数的值,可以减轻程序员的工作量。
三、什么是值传递
1、值传递是单项的,参数的值只能传入,不能传出,当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
2、设计实验:传值通过一个函数,对其数据进行修改再返回,与直接输出形成对比。
例:
#include <iostream>
using namespace std;
int Fun1(int a)
{
a = a + 1;
return a;
}
int main()
{
int a = 1;
cout << Fun1(a) << endl;
cout << a << endl;
return 0;
}
由上述所述,通过函数的值返回值为2,未通过函数的值返回值为1。
四、什么是地址传递
1、地址传递与值传递不同,地址传参传递的是存放这个变量内存的地址。
2、设计实验:与上题类似,但将传值改为传地址。
int Fun1(int* a)
{
*a = *a + 1;
return *a;
}
int main()
{
int a = 1;
cout<<Fun1(&a)<<endl;
cout<<a<<endl;
return 0;
}
执行出来的结果都为2,由此可以看来地址传参可以改变原来参数的值。
五、如何编写递归函数
1、递归函数是一种反复调用自身的函数,是把问题转化为规模缩小了的同类子问题,然后递归调用函数来表示问题的解,必须拥有终止结果,效率低。
2、例子:菲波拉契数列
#include <iostream>
#include<iomanip>
using namespace std;
int Fib(int x);
int main()
{
int n;
int x;
cout << "enter the number you want:";
cin >> n;
x = Fib(n);
cout << "Fib(" << n << ")=" << x << endl;
}
int Fib(int x)
{
if (x == 1 || x == 2)
return 1;
else
return Fib(x - 1) + Fib(x - 2);
}
若输出x为5,反复调用Fib函数,得出斐波拉契数列为5。