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

最新文章

  1. 建立php开发环境(XAMPP + Xdebug+Zend Studio)
  2. synchronized锁自旋
  3. linux常用命令:2权限管理命令
  4. VC++2005下的ADO SQL语句(like,count,distinct)和操作(转)
  5. MyBatis学习系列二——增删改查
  6. android slidingview
  7. 50句高级SQL语句
  8. 最新OpenCV2.4.6与VS2010开发环境搭建
  9. C语言socket编程----实现UDP通信
  10. SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式
  11. Python创建微信机器人
  12. 六大设计原则(二)LSP里氏替换原则
  13. shullfe机制详解
  14. POI中excle样式怎么写
  15. vscode和gitee的使用
  16. Python importlib 动态加载模块
  17. 制作chrome插件/扩展程序,禁止谷歌浏览器访问某些网站
  18. 机器学习进阶-直方图与傅里叶变化-直方图均衡化 1.cv2.equalizeHist(进行直方图均衡化) 2. cv2.createCLAHA(用于生成自适应均衡化图像)
  19. MVC实现更新数据库的数据
  20. 【BZOJ3609】人人尽说江南好(博弈论)

热门文章

  1. linux引导和登录/注销配置文件
  2. Win7x64易语言调试进程无法退出
  3. 【P3056】【USACO12NOV】笨牛Clumsy Cows
  4. shell 中数组学习
  5. 使MySQL支持emoji
  6. 关于JSP的淘汰问题(转)
  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION)
  8. 如何在Liferay 7中创建一个简单的JSF Portlet
  9. 网络流24题 骑士共存(DCOJ8023)
  10. 【错误收集】SVN冲突解决 标签: 错误收集 2016-03-13 08:44 624人阅读 评论(24) 收藏