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. cmake how to create vs file filters

    用cmakelists构建出来的工程,没有文件filters,可采用如下方法解决 set(SOURCE_LIST "lotteryTicket.cpp" "stdafx. ...

  2. JavaScript Libraries In A TypeScript Application, Revisited

    If you haven’t already gotten involved with it, you’ll probably know that TypeScript is becoming inc ...

  3. jsp页面_按回车键触发事件

    一般在列表页面中,都会带有查询按钮,当输入完查询条件后,如果需要通过鼠标点击"查询"按钮才发起查询,那么就感觉不够方便,那么我们就可以修改为按下回车键的时候发起查询. <sc ...

  4. Nacos Committers 团队首亮相,发布 0.9.0 版本

    223 天,发布 14 个版本,19 位 Committers,39 位 Contributors. 在宣布开源后的第 223 天,Nacos 发布了其第14个版本 - 0.9.0,该版本提升了 Na ...

  5. ML面试1000题系列(51-60)

    本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 51.简单说下sigmoid激活函数 常用的非线 ...

  6. PHP的注释规范

    <?php //注释规范 /** *函数的功能 *@param 参数类型 参数名1 参数解析 *@param 参数类型 参数名2 参数解析 *@return 返回值类型 返回值解析 *@auth ...

  7. hdu 1671&& poj 3630 (trie 树应用)

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25280   Accepted: 7678 Descr ...

  8. MySQL学习-- UNION与UNION ALL

    UNION用于把来自许多SELECT语句的结果组合到一个结果集合中,也叫联合查询. ? 1 2 3 4 5 SELECT ... UNION [ALL | DISTINCT] SELECT ... [ ...

  9. pl/sql 语句块循环语句

    ---基本循环declarev1 number(2) :=1;begin loop dbms_output.put_line(v1); v1:=v1+1; exit when v1>10; -- ...

  10. 地不安装Oracle,plsql远程连接数据库

    由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Or ...