//p41练习2.1
//用户输入位置值,输出第一个到第pos位置的值
#include "stdafx.h"
using namespace std;
// fibon_elem()的前置声明(forward declaration)
// 让编译器知道函数的存在
//声明中可以不写出参数名称,只写出参数类型
bool fibon_elem(int,int &);
int main()
{
int pos;
//可以一直输入位置值,每次询问用户是否要继续尝试
//用户希望停止为止
bool user_rsy = true;
while(user_rsy)
{
cout << "please enter a position:";
cin >> pos;//输入位置pos
int elem;
if( fibon_elem( pos,elem )) //fibon_elem(pos,elem)返回一个bool值 true 或者 false
cout << "element # " << pos
<< " is " << elem << endl;
else cout << "sorry, could not caculate element #"
<< pos << endl;
cout << "Would you like to try again?(Y/N)";
char rsy;
cin >> rsy;
if ((rsy == 'N')||(rsy == 'n'))
user_rsy = false;
}
}
//P38程序
//fibon_elem是一个函数
//输入数列位置,输出这个位置的数字
//elem可以看成是计算出的下一元素值
//如果写成参数是位置,返回值是元素值,当输入的值不合理时,返回的值很难操作
//所以改写成两个参数,返回布尔型
//调用函数的时候可以输出参数
#include "stdafx.h"
bool fibon_elem(int pos, int &elem) //返回布尔型 //为什么用& reference
{
//检测位置值是否合理
if (pos <= 0 || pos >1024 )//如果不合理
{ elem = 0; return false;}
//如果合理 elem = 1
elem = 1;
int n_1 = 1,n_2 = 1;//位置值为1和2时,elem的值为1
//当输入了pos的值,3 <= pos 下面循环开始执行
//如果输入pos = 2,则下面循环不执行直接到return true;
for (int ix = 3;ix <=pos; ++ix)
{
elem = n_1 + n_2;
n_1 = n_2;n_2 = elem;
}
return true;
}