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

第二次 C++作业的更多相关文章

  1. 2016福州大学软件工程第二次团队作业——预则立&&他山之石成绩统计

    第二次团队作业--预则立&&他山之石成绩统计结果如下: T:团队成绩 P:个人贡献比 T+P:折算个人成绩,计算公式为T+T/15*团队人数*P 学号 组别 Team P T+P 03 ...

  2. 关于Axure RP软件的介绍——软件工程实践第二次个人作业

    关于Axure RP软件的介绍——软件工程实践第二次个人作业 Axure RP是一个非常专业的快速原型设计的一个工具,客户提出需求,然后根据需求定义和规格.设计功能和界面的专家能够快速创建应用软件或W ...

  3. C高级第二次PTA作业

    6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...

  4. SDN 第二次上机作业

    SDN第二次上机作业 1.控制器floodlight所示可视化图形拓扑的截图,及主机拓扑连通性检测截图 拓扑 连通性 2.利用字符界面下发流表,使得'h1'和'h2' ping 不通 流表截图 连通性 ...

  5. 2019 SDN第二次上机作业

    2019 SDN第二次上机作业 1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况 创 ...

  6. <你们都是魔鬼吗>第二次团队作业:团队项目选题

    第二次团队作业:团队项目选题 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 任务1: 团队初选项目可行性自评,使用 ...

  7. 第二次团队作业-需求分析(By七个小矮人)

    第二次团队作业-需求分析 一.格式描述 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ 这个作 ...

  8. OO第二单元——电梯作业总结

    前言 本单元作业主要以设计电梯来实现多线程编程.本章主要学习了如何使用多线程以及如何确保多线程安全,从电梯的调度策略中学会了如何简单地使用synchronized锁来控制线程安全. 首先,明确锁的两个 ...

  9. 第二次团队作业 -- 预则立&&他山之石

    我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬涛 一.团队任务计划 周数 ...

  10. 20155301-滕树晨 第二次随笔作业--从现有技能获取的经验应用于JAVA中

    第二次随笔--从现有技能获取的经验应用于JAVA中 你有什么技能比大多人(超过90%以上)更好? 这个想了半天,有一个是我乒乓球还是比较擅长的,在学校里可能比百分之90的人要强,在外面肯定是不如了.再 ...

随机推荐

  1. 关系数据库标准语言 SQL (ch.3)

    3.1 SQL 概述 3.1.2 特点 1 综合统一 非关系型语言 的数据语言都分为 DDL Scheme Data Definitin Language, 模式DDL SubScheme Data ...

  2. Django用户登陆以及跳转后台管理页面3

    Django用户登陆以及跳转后台管理页面1http://www.cnblogs.com/ujq3/p/7891774.html Django用户登陆以及跳转后台管理页面2http://www.cnbl ...

  3. 使用Webpack的代码分离实现Vue懒加载

    当一个Vue的项目体积变得十分庞大的时候,使用Webpack的代码分离功能将Vue Components,routes或Vuex的代码进行分离并按需加载,会极大的提高App的首屏加载速度. 在Vue的 ...

  4. 学习es6

    #第一节 初始化项目 npm init -y 安装babel-cli npm install -g babel-cli npm install --save-dev babel-preset-es20 ...

  5. Maple拥有优秀的符号计算和数值计算能力

    https://www.maplesoft.com/products/maple/ Maple高级应用和经典实例: https://wenku.baidu.com/view/f246962107221 ...

  6. SpringBoot 异步 定时任务 邮件

    springboot异步 一: 在 MyConfiguration.java 中开启注解 @Configuration//指明当前类是一个配置类:就是来替代之前的Spring配置文件@EnableAs ...

  7. 怎样做一个iOS App的启动分层引导动画?

    一. 为什么要写这篇文章? 这是一个很古老的话题,从两年前新浪微博开始使用多层动画制作iOS App的启动引导页让人眼前一亮(当然,微博是不是历史第一个这个问题值得商榷)之后,各种类型的引导页层出不穷 ...

  8. QT UI 线程为什么卡死?

    我的工程是由三个线程处理不同任务构成的,其中UI用于显示,还有数据处理和数据接收发送线程. 在运行的过程中发现由于数据处理线程不及时,超过了设定的100ms,导致UI卡死,几个周期后又恢复,接着又卡死 ...

  9. mysql锁机制之表锁(三)

    顾名思义,表锁就是一锁锁一整张表,在表被锁定期间,其他事务不能对该表进行操作,必须等当前表的锁被释放后才能进行操作.表锁响应的是非索引字段,即全表扫描,全表扫描时锁定整张表,sql语句可以通过执行计划 ...

  10. 为数据计算提供强力引擎,阿里云文件存储HDFS v1.0公测发布

    在2019年3月的北京云栖峰会上,阿里云正式推出全球首个云原生HDFS存储服务—文件存储HDFS,为数据分析业务在云上提供可线性扩展的吞吐能力和免运维的快速弹性伸缩能力,降低用户TCO.阿里云文件存储 ...