下面程序定义栈类模板StackTemplate,创建栈对象存储斐波那契数列的前10项数值,并以后进先出的方式取出元素并输出,输出结果为:55 34 21 13 8 5 3 2 1 1。其中void push(const T& i)函数为添加元素、T pop()函数为取出栈顶元素,int fibonacci(int n)函数为计算斐波那契数列的第n项值。在计算斐波那契数列值、添加元素和取出元素的过程中要进行上溢(OverFlow)或者下溢(UnderFlow)的异常处理。请补充空白处的代码(每空1分)。
#include <iostream>
using namespace std;
enum ERROR{UnderFlow,OverFlow};
template<typename T>
class StackTemplate {
enum { ssize = 100 };
T stack[ssize];
int top;
public:
StackTemplate() : top(0) {}
void push(const T& i) {
if (top >= ssize)
throw OverFlow
;
stack[top++] = i;
}
T pop() {
if (
top <= 0
)
throw UnderFlow;
return
stack[--top]
;
}
int size() const{
return top;
}
};
int fibonacci(int n);
int main() {
try{
{
StackTemplate<int>
is;
for(int i = 0; i < 10; i++)
is.push(fibonacci(i));
for(int k = 0; k < 10; k++)
cout << is.pop() << "\t";
}
catch( ERROR e ) {
switch(
ERROR e
) {
case OverFlow: exit;
case UnderFlow: exit;
}
}
catch(...) {
}
return 0;
}
int fibonacci(int n) {
const int sz = 100;
int sz = 100;
int i;
static int f[sz];
if (n >= sz)
exit
;
f[0] = f[1] = 1;
for(i = 0; i < sz; i++)
if(f[i] == 0) break;
while(i <= n) {
f[i]
= f[i-1] + f[i-2];
i++;
}
return
f[n]
;
}