return语句
作用
有返回值的函数:是提供整个函数的返回值,并结束当前函数返回到调用它的地方。
无返回值的函数:检查到一个错误时提前结束当前函数的执行并返回。
int equal(int a,int b)
{
if(a==b)
return 1;
else
return 0;
}
理解
函数返回一个值相当于定义一个和返回值类型相同的临时变量并用return后面的表达式来初始化。
注意
如果返回变量时【return a】,这里返回的是变量的值而非变量本身。
习题
1、编写一个布尔函数int is_leap_year(int year),判断参数year是不是闰年。如果某年份能被4整除,但不能被100整除,那么这一年就是闰年,此外,能被400整除的年份也是闰年。
bool is_lesp_year(int year)
{
if((year%4==0)&&(year%100!=0))
return true
else if(year%400==0)
return true;
else
return false;
}
2、编写一个函数double myround(double x),输入一个小数,将它四舍五入。例如myround(-
3.51)的值是-4.0,myround(4.49)的值是4.0。可以调用math.h中的库函数ceil和floor实现这个函
数。
double myround(double x)
{
if(x-floor(x)>=0.5)
return ceil(x);
else
return floor(x);
}
增量式开发
增量即在软件开发过程中,先开发主要功能模块,再开发次要功能模块,逐步完善,最终开发出符合需求的软件产品。
优点
在实现的过程中可以不断测试主函数,及时发现错误并改正。
递归
如果定义一个概念需要用到这个概念本身,我们称它的定义是递归的。
自己直接或间接调用自己的函数称为递归函
数。
典型例子:n的阶乘是这样定义的:n的阶乘等于n乘以n-1的阶乘,递归实现:
int factorial(int n)
{
if (n == 0)
return 1;
else
{
int recurse = factorial(n-1);
int result = n * recurse;
return result;
}
}
调用递归函数时存储空间:数据结构称为堆栈或栈,随着函数调用和返回而不断变化的这一端称为栈顶,每个函数调用的参数和局部变量的存储空间称为一个栈帧。操作系统为程序的运行预留了一块栈空间,函数调用时就在这个栈空间里分配栈帧,函数返回时就释放栈帧。
注意:
- 在写递归函数时注意返回的条件是否会成立,否则这个函数就会永远调用下去,直到操作系统为程序预留的栈空间耗尽程序崩溃为止,这称为无穷递归
- 递归次数取决于递归树,递归树取决于轴枢的选择。树越平衡,递归次数越少。
- 对分区的长短处理顺序,影响的是递归时对栈的使用内存,而不是递归次数。
习题
1、编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),使
用Euclid算法:
1.如果a除以b能整除,则最大公约数是b。
2.否则,最大公约数等于b和a%b的最大公约数。
int GCD(int a,int b)
{
if(a%b==0)
return b;
else
return GCD(b,a%b);
}
2、编写递归函数求Fibonacci数列的第n项,这个数列是这样定义的:
fib(0)=1
fib(1)=1
fib(n)=fib(n-1)+fib(n-2)
int fib(int n)
{
if(n==0||n==1)
return 1;
else.
return fib(n-1)+fib(n-2);
}