第二次 C++作业
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++作业的更多相关文章
- 2016福州大学软件工程第二次团队作业——预则立&&他山之石成绩统计
第二次团队作业--预则立&&他山之石成绩统计结果如下: T:团队成绩 P:个人贡献比 T+P:折算个人成绩,计算公式为T+T/15*团队人数*P 学号 组别 Team P T+P 03 ...
- 关于Axure RP软件的介绍——软件工程实践第二次个人作业
关于Axure RP软件的介绍——软件工程实践第二次个人作业 Axure RP是一个非常专业的快速原型设计的一个工具,客户提出需求,然后根据需求定义和规格.设计功能和界面的专家能够快速创建应用软件或W ...
- C高级第二次PTA作业
6-7 删除字符串中数字字符 1.设计思路: (1)算法: 第一步:定义一个字符数组item,输入一个字符串赋给字符数组item.调用函数delnum, 第二步:在函数delnum中定义循环变量i=0 ...
- SDN 第二次上机作业
SDN第二次上机作业 1.控制器floodlight所示可视化图形拓扑的截图,及主机拓扑连通性检测截图 拓扑 连通性 2.利用字符界面下发流表,使得'h1'和'h2' ping 不通 流表截图 连通性 ...
- 2019 SDN第二次上机作业
2019 SDN第二次上机作业 1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况 创 ...
- <你们都是魔鬼吗>第二次团队作业:团队项目选题
第二次团队作业:团队项目选题 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 任务1: 团队初选项目可行性自评,使用 ...
- 第二次团队作业-需求分析(By七个小矮人)
第二次团队作业-需求分析 一.格式描述 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ 这个作 ...
- OO第二单元——电梯作业总结
前言 本单元作业主要以设计电梯来实现多线程编程.本章主要学习了如何使用多线程以及如何确保多线程安全,从电梯的调度策略中学会了如何简单地使用synchronized锁来控制线程安全. 首先,明确锁的两个 ...
- 第二次团队作业 -- 预则立&&他山之石
我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬涛 一.团队任务计划 周数 ...
- 20155301-滕树晨 第二次随笔作业--从现有技能获取的经验应用于JAVA中
第二次随笔--从现有技能获取的经验应用于JAVA中 你有什么技能比大多人(超过90%以上)更好? 这个想了半天,有一个是我乒乓球还是比较擅长的,在学校里可能比百分之90的人要强,在外面肯定是不如了.再 ...
随机推荐
- ucore os 前初始化
BIOS 初始化完成说起 连接的时候指定了 -Ttext 0x7c00 也指定了 -e start 所以booasm.S 中的start 就呗钦定为程序入口了. 开始就是 屏蔽中断 初始化段寄存器 使 ...
- linux压缩打包
linux下的压缩命令有tar.gzip.gunzip.bzip2.bunzip2. compress.uncompress.zip.unzip.rar.unrar等等,压缩后的扩展名有.tar..g ...
- Android的ADB学习笔记
1.ADB的常用命令 Pull命令:adb -e|-d pull {文件的路径} {获取文件路径} 2. 文件操作的基本命令 ls -al:显示当下目录下用户对文件的操作权限. = la -al ...
- 【python之路16】作业
#!usr/bin/env python # -*- coding:utf-8 -*- # 数据库中原有 old_dict = { "#1": {'hostname': 'c1', ...
- 编码之Base64编码
Base64编码 是一种基于 64 个可打印字符来表示二进制数据的方法.目前 Base64 已经成为网络上常见的传输 8 位二进制字节代码的编码方式之一. 为什么会有 Base64 编码呢?因为有些网 ...
- 每日算法之三十四:Multiply Strings
大数相乘,分别都是用字符串表示的两个大数.求相乘之后的结果表示. 首先我们应该考虑一下測试用例会有哪些,先准备測试用例对防御性编程会有比較大的帮助.可以考虑一些极端情况.有以下几种用例: 1)&quo ...
- 为Array对象添加一个去除重复项的方法
输入例子 [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq() 输出例子 [false, true, unde ...
- Spring_Aop_(二)
切面的优先级 @Order(1)注解 指定切面的优先级,值越小优先级越高 @Order(1) @Aspect @Component public class VlidationAspect { @Be ...
- Apache Camel 与 Spring Boot 集成,通过FTP定时采集、处理文件 (转)
1.概要: 本项目主要是通过在Spring平台上配置Camel.FTP,实现定时从FTP服务器下载文件到本地.解析文件.存入数据库等功能. 2.搭建空项目: Spring Boot有几种自动生成空项目 ...
- Directx11教程37 纹理映射(7)
原文:Directx11教程37 纹理映射(7) 本章是在教程35.36的基础上来实现一个光照纹理结合的程序,就是把场景中旋转的cube加上纹理. lighttex.vs中顶点的结构现在 ...