你好,可不可帮我看一下这道程序,怎么改说一下理由,谢谢!

你好,可不可帮我看一下这道程序,怎么改说一下理由,谢谢!,第1张

你要改什么?

程序运行没有编译问题,逻辑问题只有一个大写那里用的函数不对,这里应该用

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;

}

我照着资料一个一个打出来的。

以上就是关于你好,可不可帮我看一下这道程序,怎么改说一下理由,谢谢!全部的内容,包括:你好,可不可帮我看一下这道程序,怎么改说一下理由,谢谢!、请问谁能帮忙讲解一下这道程序吗!萌新想起来有点绕!谢谢!、求高手解答下这道程序结构的题——谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9667312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存