函数小结

函数

1.为什么要用函数(设计实验教案说明)

一个典型的函数定义包括以下部分:返回类型,函数名字,由0个或多个形参组成的列表以及函数体;

  1. 使用函数可以对代码进行模块化封装
  2. 简化程序员的代码
  3. 可以不用顾及其它去优化一个函数的代码
#include<iostream>
using namespace std;

int pow(int x, int n) //x的n次幂
{
	int sum = 1;
	while(n--)
		sum *= x;
	return sum;
}

int main()
{
	int x, n;
	int a;
	cout << "Please input x:" ;
        cin >> x ;
	cout << "Please input a:" ;
        cin >> a;
	cout << "The power of x:" ;
        cin >> n;
	cout << "reasult of x^n+a :" << (pow(x, n)+a) << endl;
	return 0;
}

2.为什么要用函数重载(设计实验教案说明)

可以在一定程度上减轻程序员起名字和记名字的负担但有时候需要以不同函数名进行函数功能区分
重载函数应该在形参数量和形参类型(注意顶层const形参的特别)上有所不同
** main函数不能重载 **

...
void print(const char *cp);
void print(const int *beg, const int *end);
void print(const int ia[], size_t size); //size_t C/C++内置的常量类型
//下面两个函数请注意,它们是无法被区分的重载函数,故有错
void print(char ch);
void print(const char ch);
//const_cast和重载
const string &shorterString(const string &s1, const string &s2)
{
	return s1.size() <= s2.size() ? s1:s2;
}

string &shorterString(string &s1, string &s2)
{
	auto &r = shorterString(const_cast<const string &>(s1),
							const_cast<const string &>(s2)));
	return const_cast<string &>(r);
}

//函数体省略...
int main(){
	int j[] = {0, 1};
	int 
	print("Hello World"); //调用print(const char *)
	print(j, end(j)-begin(j)); //调用print(const int *, size_t)
	//end()与begin函数在#include<iterator>里面,作用于数组指针
	print(begin(j), end(j)); //调用print(const int *, const int *)
	return 0;
}

3.什么是值传递(设计实验和教案说明其过程,分析其特性)

在调用的函数中传递的实参只是把自己的副本传给了形参,并且函数一旦结束,形参的内存空间也随之消失

#include<iostream>
using namespace std;

void change(int a)
{
	a = 15;
}

int main()
{
	int a = 6;
	change(a);
	cout << a << endl; //结果依旧是6
	return 0;
}

4.什么是地址传递(设计实验和教案说明其过程,分析其特性)

地址我们知道就是对对象声明一个别名,所以本质上依旧还是同一个对象实参传给一个引用形参就是给实参换了一个名字,但还是用来的实参,即使函数结束,引用形参还是存在

#include<iostream>
using namespace std;

void change(int &a)
{
	a = 15;
}

int main()
{
	int a = 6;
	cout << change(a) << endl; //结果是15
	return 0;
}

5.设计实验和教案,分析如何编写递归函数

  1. 递归函数直接或间接调用自身
  2. 递归函数要有一个结束条件
  3. 递归函数要有递归部分
  4. 递归本质上就是递推和回归的过程
  5. 递归更符合人的思维逻辑但十分浪费计算机资源,应该在实际开发中避免
  6. 递归使用了栈
//hanoi的例子
#include<iostream>
using namespace std;

void move(char a, char c)
{
	cout << a << "-->" << c << endl;
}

void hanoi(int n, char A, char B, char C)
{
	if(n == 1)
	move(A, C);
	else
	{
		hanoi(n-1, A, C, B);
		move(A, C);
		hanoi(n-1, B, A, C);
	}
}

int main()
{
	int n;
	cout << "请输入A上面有多少块圆盘";
	cin >> n;
	hanoi(n, 'A', 'B', 'C');
	return 0;
}

posted @ 2019-09-15 16:07  Dedicate_labors  阅读(172)  评论(0编辑  收藏  举报
……