【代码已上传至自己github,供参考: github】
从本文开始,进入第二章。在第一章中。我们将整个程序写在
main()
函数里,这种做法仅仅局限在不大的程序,在实际项目中,这是不切实际的。
我们将函数独立出来有如下几个优点:
1、通过调用函数、可以节省重复编写代码时间,是程序更容易读懂。
2、我们可以在不同的程序中调用这些函数。
3、在实际项目中,可以更容易的将工作分配给协作开发团队。
1、函数定义
函数必须包括如下四个部分:
1、返回类型:后面的案例以及之前的案例中,指点元素类型为int
,所以返回类型必然是int
类型;如果函数没有返回值,则返回类型为void
。
2、函数名:我们在定义函数名时,尽可能易于理解,这样有助于我们理解函数操作的实际含义,也有助于代码共享、协作开发时的阅读。
3、参数列表:函数参数一般扮演占位符的角色,用户在每次调用时,将要传入的值放入其中,以便函数调用。参数代表的值随每次调用操作而有所不同,有些函数中,则无需参数,具体情况具体分析。
4、 函数体:函数体在参数列表之后,用大括号{}
括起,主要功能代码在函数体内。
注意:函数必须先声明,然后才能被调用。函数声明的目的是让编译器得以检查后出现的使用方式是否正确(是否有足够参数、参数类型是否正确等等)。声明函数时不需要提供函数体,但必须指明返回类型、函数名、参数列表。例如:
int fibon_elem(int pos);//int为返回类型,fibon_elem为函数名,pos为参数(其中int为参数类型)
2、案例
通过一个案例来理解函数的操作,本案例函数主要是实现Fibonacci数列中由用户指定某个位置元素是多少,例如用户可以询问“Fibonacci数列的8个元素是多少?”;程序可以输出:21.
#include <iostream>
#include <cstdlib>
using namespace std;
//函数声明
bool fibon_elem(int pos, int &elem); //&为引用类型的elem
bool print_fibon(int pos);//打印函数
//打印函数
bool print_fibon(int pos) {
//由于数据类型范围,比如无符号int,所以输入固定位置范围
if (pos <= 0 || pos > 1024) {
cerr << "invalid position: " << pos << "--can not handle request!\n" << endl;
return false;
}
cout << "The Fibonacci Squence for " << pos << " position: \n";
//在第一行1、2个数都设为1
switch (pos)
{
default:
case 2:
cout << "1 ";
//注意,此处没有break
case 1:
cout << "1 ";
break;
}
int elem;
int n1 = 1;
int n2 = 1;
for (int ix = 3; ix <= pos; ix++)
{
elem = n1 + n2;
n1 = n2;
n2 = elem;
cout << elem << (!(ix % 10) ? "\n" : " ") ;
}
cout << endl;
return true;
}
//函数
bool fibon_elem(int pos, int &elem) {
//同上
if (pos <= 0 || pos > 1024) {
elem = 0;
return false;
}
elem=1 ;
int n1 = 1;
int n2 = 1;
for (int ix = 3; ix <= pos; ix++)
{
elem = n1 + n2;
n1 = n2;
n2 = elem;
}
return true;
}
//主函数
int main() {
int pos;
int elem;
//while实现程序循环询问用户,不至于回答一次就结束,后面设置了退出程序条件
cout << "please input the pos:" ;
while(cin >> pos){
//若没有问题,调用函数
if (fibon_elem(pos, elem))
{
cout << "element # " << pos << " is element " << elem <<endl;
//打印数据
print_fibon(pos);
}
else
cout << "Sorry,could not calculate the element #" << pos << endl;
cout << "please enter anchor position:(enter[-1]-->exit) ";
//如果用户输入-1,退出程序
if (pos==-1)
{
exit(-1);//使用该函数,必须声明cstdlib头文件
}
}
return 0;
}