第二次C++作业
c++函数
一、为什么要用函数?
函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。使用函数有很多便利的地方。
1.使编程模块化,并且可以重复使用提高编程的效率。
2.有利于程序的调试、而且程序的可读性也很好、编程思路更清楚。
实例:
#include "pch.h"
#include <iostream>
using namespace std;
// 函数声明
int max(int num1, int num2);
int main ()
{
int a = 1;
int b = 2;
int ret;
// 调用函数来获取最大值
ret = max(a, b);
cout << "Max value is : " << ret << endl;
return 0;
}
// 函数返回两个数中较大的那个数
int max(int num1, int num2)
{
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
二、为什么使用重载函数?
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。使用重载函数减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。
例如:
//定义一个完成求和的函数
//函数声明
int add1(int a,int b);
float add2(float a,float b);
double add3(double a,double b);
这样定义的话,当我们需要调用求和函数时需要根据参数来选取函数调用,十分不方便,而使用重载函数则可以避免这种情况:
//函数声明
int add(int a,int b);
float add(float a,float b);
double add(double a,double b);
//这样就可以不分辨参数类型直接调用add这个函数
三、什么是值传递?
把函数中的参数叫做“形式参数(parameter)”,而把调用这个函数时传入的实际的参数叫做“实际参数(argument)”。那么在调用函数时实参传递给形参时,形参只是得到实参的值,它和实参是两个不同的对象,不会互相影响。
实例:
#include "pch.h"
#include <iostream>
using namespace std;
void swap(int x, int y) {
int temp = y;
y = x;
x = temp;
}
int main()
{
int x = 1;
int y = 3;
swap(x, y);
cout << x << ":" << y << endl;
return 0;
}
运行结果:
此时我们发现x和y的值并没有交换,这说明值传递并不影响实参的值。
四、什么是地址传递?
在调用函数时,是把实参变量的内存地址传递给被调用过程的形参,也就是说形参与实参使用相同地址的内存单元。因此当在被调用过程中改变形参的值,就等于改变了实参的值。在交换函数中,可以用地址传递来改变两个数的值。
实例:
#include "pch.h"
#include <iostream>
using namespace std;
void swap(int *x, int *y) {
int temp = *y;
*y = *x;
*x = temp;
}
int main()
{
int x = 1;
int y = 3;
swap(&x, &y);
cout << x << ":" << y << endl;
return 0;
}
运行结果:
五、递归函数
定义:函数可以直接或间接地调用自身,称为递归调用。
以计算n的阶乘为例:
n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
#include "pch.h"
#include <iostream>
using namespace std;
double factorial(unsigned int i)
{
if (i <= 1)
{
return 1;
}
return i * factorial(i - 1);
}
int main()
{
int i = 15;
printf("%d 的阶乘为 %f\n", i, factorial(i));
return 0;
}
运行结果: