c++第二次作业

函数

1.为什么要用函数

在面向过程的的程序设计中,函数是模块划分的基本单位,是处理问题的过程的一种抽象。同样,在面向对象的程序设计中,函数是对功能的抽象。复杂的程序一般会分割为多个子系统,任何分别对个子系统进行开发和调试,而子系统的功能主要通过构造函数来实现,因此相对独立,经常使用的功能抽象为函数。
由于函数需要经常使用,在使用时可只需主要函数的功能和使用方法,可有利于代码重复利用,提高开发效率,增强程序的可靠性,方便分工合作,以及软件的后期维护

2.为什么要用函数重载

多个函数具有相同的名称,但形参的类型或数量不同,编译器会对比实参与形参是否匹配来选择最佳调用函数。实际应用中,在使用相似功能时,可以不管函数的具体功能,方便人工对函数调用时进行分辨。例如,求两个数相加。

#include <iostream>
using namespace std;
int add(int a,int b){
return a+b;
}
float add(float a,float b){
return a+b;
}
int main()
{
int x,y;
float i,j;
cout<<"输入需相加的两个整数:";
cin>>x>>y;
cout<<"x+y="<<add(x,y)<<endl;
cout<<"输入需相加的两个小数:";
cin>>i>>j;
cout<<"i+j="<<add(i,j)<<endl;
return 0;
}

运行如下:

3.什么是值传递与地址传递

值传递是指当发生函数调用时,给形参分配内存空间,,并用实参初始化形参,这一过程是单向的,即形参的值无法传达出去。
例.将两个数交换,并输出.

#include <iostream>
using namespace std;
void swap(int a ,int b){
int c=a;
a=b;
b=c;
}
int main(){
int x,y;
cout<<"输入需交换的两个数x y:";
cin>>x>>y;
cout<<"交换前的顺序"<<x<<":"<<y<<endl;
 swap(x,y);
cout<<"交换后的顺序"<<x<<":"<<y<<endl;
return 0;
}

运行如下:

可知,两个数并未交换,因为值传递为单向,形参值无法传出。
**但是可通过传地址解决。在例子中,可将交换函数中的参数改为(int *a ,int b),int c -> int c
运行如下:

4.如何编写递归函数

递归最主要的两个过程:

  • 1.将原问题分解为新的子问题,并不断持续,直到推到已知的条件。
  • 2.从已知条件出发,按第一步的逆过程,逐一求值,回归,直到回到原问题
    在应用中,最明显的的特征是会调用递归函数自身
    例.输入一个数作为fibonacci级数,并出求fibonacci数。
    已知:F1=F2=1;F(n)=F(n-1)+F(n-2),n>2。
#include <iostream>
using namespace std;
int f( int a){
if(a==1||a==2)
return1;
else
return f(a-1)+f(a-2);
return b;
}
int main()
{
int c;
cout<<"输入fibonacci级数:";
cin>>c;
cout<<"fibonacci数为:"<<f(c)<<endl;
return 0;
}

运行如下:

posted @ 2019-09-16 19:42  牙齿白的  阅读(183)  评论(0编辑  收藏  举报