第二次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;
}

运行结果:

posted @ 2019-09-14 21:20  罗斯柴尔德  阅读(252)  评论(0编辑  收藏  举报