c++第二次作业
关于函数
1.为什么要用函数
函数是对一些数据指令的封装,用函数可以减少重复的代码量,提高代码的质量。有利于代码重用,提高开发效率,增强程序的可靠性,也便于分工合作和修改维护。举一个例子吧,如果你是一名理发店里的洗头员工,你给第一位客人洗头的时候,要去放毛巾的地方拿毛巾,去放洗头护发素的地方拿洗头护发素,第二位客人来的时候,你重复上面的行为,如果客人很多,难道要一趟一趟的跑吗,这个时候,如果你把洗头护发素第一次拿过来了,就把它放在那里等着下次再用,就可以不用跑那么多趟了。函数的功能与此相似,节省重复的步骤。
2.为什么要用重载函数
什么是重载函数
两个以上的函数,具有相同的函数名,但是形参个数或类型不同,编译器根据实参的个数或类型进行最佳匹配,自动确定调用哪一个函数,这就是函数的重载。
当有多个功能相似的函数都出现在一个main函数里面被调用时,如果函数名各不相同,找到对应的要调用的那个函数相对比较难,需要一个一个的看函数内容。重载函数可以解决这个问题。
/*这里如果要对两个数进行求和,在找函数时就显得有点麻烦,尤其是函数个数较多时*/
int add1(int x, int y)
int add2(float x, float y)
int add3(double x, double y)
#include<iostream>
using namespace std;
int add(int x, int y)
{
return( x + y);
}
float add(float x, float y)
{
return x + y;
}
double add(double x, double y)
{
return x + y;
}
int main()
{
int x, y;
cin >> x >> y;
float a,b;
cin >> a >> b;
double m, n;
cin >> m >> n;
cout<<"整型数的和为"<<add(x, y)<<endl;
cout<<"浮点数之和为"<<add(m, n) << endl;
cout<<"double型的和为"<<add(a, b) << endl;
return 0;
}
3.什么是值传递
值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参,这个过程是参数值的单向传递过程,一旦形参获得了值便于实参脱离关系,此后无论形参发生什么改变,实参不会受影响。
假设我们要交换两个数的值,应该怎么做呢
#include<iostream>
using namespace std;
void swap_1(int x,int y)
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<"没有交换时a,b为 "<<a<<";"<<b<<endl;
swap_1(a,b);//值不交换
cout<<"调用函数1后a,b为 "<<a<<";"<<b<<endl;
return 0;
}
//结果展示
5 8
没有交换时a,b为 5;8
调用函数1后a,b为 5;8
4.什么是地址传递
#include<iostream>
using namespace std;
void swap_2(int &x,int &y)
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<"没有交换时a,b为 "<<a<<";"<<b<<endl;
swap_2(a,b);//值交换
cout<<"调用函数2后a,b为 "<<a<<";"<<b<<endl;
return 0;
}
//结果展示
5 8
没有交换时a,b为 5;8
调用函数2后a,b为 8;5
5.如何编写递归函数
以经典的汉诺塔为例,想要把最大的盘子放在最下面,首先要把上面的其余盘子放在B上去,而又要将B的最大的盘子移过去,就又要把B的其余盘子放在A上,以此类推
#include<iostream>
using namespace std;
void move(char src,char dest)
{
cout<<src<<"-->"<<dest<<endl;
}
void hanoi(int n,char src,char medium,char dest)
{
if(n==1)
move(src,dest);
else
{
hanoi(n-1,src,dest,medium);
move(src,dest);
hanoi(n-1,medium,src,dest);
}
}
int main()
{
int m;
cout<<"输入碟子数目"<<endl;
cin>>m;
cout<<"the steps to moving "<<m<<"diskes:"<<endl;
hanoi(m,'A','B','C');
return 0;
}
//结果展示
输入碟子数目
3
the steps to moving 3diskes:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C