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. Eviews9.0---软件安装

    EViews是Econometrics Views的缩写,直译为计量经济学观察,通常称为计量经济学软件包.它的本意是对社会经济关系与经济活动的数量规律,采用计量经济学方法与技术进行“观察”.计量经济学 ...

  2. makefile 语法笔记 3

    这里说明了 在一些情况下 这也是可以使用通配符的 objects =*.o 这种情况是不会展开的 makefile 中的变量是C++/C 中的宏 如果希望展开,可以使用 $(wildcard *.o) ...

  3. day37 10-SH整合的案例练习

    <set name="orders" cascade="delete"> 如果没有在Customer.hbm.xml中配置级联删除,删除客户的时候默 ...

  4. LUOGU P2587 [ZJOI2008]泡泡堂

    传送门 解题思路 刚开始先写了个田忌赛马的贪心,就是要是打不过就拿最弱的送死,30分...后来瞄了眼题解,发现这样是错的,比如说这样的数据 : 3 3 2 3 1 如果用田忌赛马的话,让2-3 3-1 ...

  5. Sass @at-root (1)

    在SassConf大会上,给我们传递了Sass3.3的新特性.这些新特性有很多意义,特别是@at-root指令,这让你的代码会得更佳清洁. 今天我们主要一起来了解Sass中的@at-root特性的使用 ...

  6. 【python小随笔】celery周期任务(简单原理)

    1:目录结构 |--celery_task |--celery.py # 执行任务的main函数 |--task_one # 第一个任务 |--task_two # 第2个任务 . . . . |-- ...

  7. homeworkvue

    两个半圆,点一下转90°,两个颜色 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  8. Leetcode682.Baseball Game棒球比赛

    你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 1.整数(一轮的得分):直接表示您在本轮中获得的积分数. 2. "+"(一轮的得分):表示本轮获得 ...

  9. 阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破

    1. 什么是 HTTPDNS ? 传统的 DNS(Domain Name System)使开发者常面临着域名劫持.调度不精准的问题. HTTPDNS 使用 HTTP 协议替换常用的 UDP 协议,完成 ...

  10. Ubuntu无法连接无线网

    shell里输入: su ifconfig wlan0 up 不行的话 rfkill block all rfkill unblock all ifconfig wlan0 up