你要改什么?
程序运行没有编译问题,逻辑问题只有一个大写那里用的函数不对,这里应该用
void toUpper(){strupr(name);}
strupr函数,而不是strdup函数。
另外,这个程序使用了非标准C函数库,只能在VC或其它微软环境下运行。
解答如下:
注:解答中使用的形如a->a=5的语句,翻译为:指针a指向整型变量a,整型变量a=5
文字版如下:
#include<stdioh>
void fun(int a, int b, int c)
{
//此处形参a,b,c就相当于指针p1,p2,p3
int t;//⑤定义了一个指针变量t
t = a; a = b; b = t;//⑥另说
t = b; b = c; c = t;//⑦另说
printf("%d%d%d\n", a, b, c);//⑧分别输出指针a,b,c所对应的值:7,3,3
//⑨fun执行结束,转到main函数
}
int main()
{
//①程序从main函数开始执行
int a = 5, b = 7, c = 3;//②定义了三个整型变量a,b,c并分别赋值5,7,3
int p1 = &a, p2 = &b, p3 = &c;//③定义了三个指针p1,p2,p3分别指向变量a,b,c
fun(p1, p2, p3);//④将p1,p2,p3作为实参传入函数fun,转到fun执行
printf("%d%d%d", a, b, c);//⑩输出a,b,c的值,3,7,3
}
/
⑤a->a=5 b->b=7 c->c=3 t
⑥t->a=5 a->b=7 b->a=5 c->c=3此时t=5,a=7,b=5,c=3
⑦t=b执行后t=5,b=c执行完后b=3(注意此时指针b是指向整型变量a的,b=3时就将整型变量a的值更改为了3,即a=3)
执行c=t后c=3(由⑥可知t和b同时指向a,而a已经变为了3,所以t也为3)
至此:a=7,b=3,c=3,而整型变量a=3,b=7,c=3
/
#include <asserth>
template <class Type> class DblStack { //双栈的类定义
private:
int top[2], bot[2]; //双栈的栈顶指针和栈底指针
Type elements; //栈数组
int m; //栈最大可容纳元素个数
public:
DblStack ( int sz =10 ); //初始化双栈, 总体积m的默认值为10
~DblStack ( ) { delete [ ] elements; } //析构函数
void DblPush ( const Type& x, int i ); //把x插入到栈i的栈顶
int DblPop ( int i ); //退掉位于栈i栈顶的元素
Type DblGetTop ( int i ); //返回栈i栈顶元素的值
int IsEmpty ( int i ) const { return top[i] == bot[i]; } //判栈i空否, 空则返回1, 否则返回0
int IsFull ( ) const { return top[0]+1 == top[1]; } //判栈满否, 满则返回1, 否则返回0
void MakeEmpty ( int i ); //清空栈i的内容
}
template <class Type> DblStack<Type> :: DblStack ( int sz ) : m(sz), top[0] (-1), bot[0](-1), top[1](sz), bot[1](sz) {
//建立一个最大尺寸为sz的空栈, 若分配不成功则错误处理。
elements = new Type[m]; //创建栈的数组空间
assert ( elements != NULL ); //断言: 动态存储分配成功与否
}
template <class Type> void DblStack<Type> :: DblPush ( const Type& x, int i ) {
//如果IsFull ( ),则报错;否则把x插入到栈i的栈顶
assert ( !IsFull ( ) ); //断言: 栈满则出错处理,停止执行
if ( i == 0 ) elements[ ++top[0] ] = x; //栈0情形:栈顶指针先加1, 然后按此地址进栈
else elements[--top[1] ] = x; //栈1情形:栈顶指针先减1, 然后按此地址进栈
}
template <class Type> int DblStack<Type> :: DblPop ( int i ) {
//如果IsEmpty ( i ),则不执行退栈,返回0;否则退掉位于栈i栈顶的元素,返回1
if ( IsEmpty ( i ) ) return 0; //判栈空否, 若栈空则函数返回0
if ( i == 0 ) top[0]--; //栈0情形:栈顶指针减1
else top[1]++; //栈1情形:栈顶指针加1
return 1;
}
template <class Type> Type DblStack<Type> :: DblGetTop ( int i ) {
//若栈不空则函数返回该栈栈顶元素的地址。
if ( IsEmpty ( int i ) ) return NULL; //判栈i空否, 若栈空则函数返回空指针
return& elements[ top[i] ]; //返回栈顶元素的值
}
template <class Type> void MakeEmpty ( int i ) {
if ( i == 0 ) top[0] = bot[0] = -1;
else top[1] = bot[1] = m;
}
我照着资料一个一个打出来的。
以上就是关于你好,可不可帮我看一下这道程序,怎么改说一下理由,谢谢!全部的内容,包括:你好,可不可帮我看一下这道程序,怎么改说一下理由,谢谢!、请问谁能帮忙讲解一下这道程序吗!萌新想起来有点绕!谢谢!、求高手解答下这道程序结构的题——谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)