高级程序员书上的394页[例8.3程序]中的“DEB”是起什么作用的?

ewang_365 2002-08-15 08:54:26
程序如下:请高手指教,谢谢!!


#include <stdio.h>
#define MAXN 1000
typedef struct node { /*栈元类型*/
int n;
double x,y;
}NODE;
NODE stack[MAXN];
int top,deb,depth;
int push(NODE stack[],int maxn,int *toppt,NODE x) /*进栈函数*/
{
if(*toppt>=maxn)
return 1; /*栈满,进栈失败返回1*/
stack[* toppt]=x; /*完成进栈运算*/
++*toppt;
if(*toppt>depth) depth=*toppt;
return 0; /*进栈成功,返回0*/
}

/*[函数] 顺序存储栈的出栈函数*/
int pop(NODE stack[],int *toppt,NODE *cp) /*出栈函数*/
{
if(*toppt==0) return 1; /*栈空,出栈失败返回1*/
--*toppt;
*cp=stack[*toppt]; /*完成出栈运算*/
return 0; /*出栈成功,返回0*/
}

double A(NODE node)
{
int k;double B;
NODE tnode;
top=0;depth=0;
push(stack,MAXN,&top,node); /*将node进栈*/
do { /*循环计算至栈空*/
tnode=stack[top-1]; /*读栈顶结点的值存入tnode*/
while(tnode.n!=0&&tnode.y!=0) { /*递推,将计算参数进栈*/
/*修改栈顶结点的参数,并求得新结点进栈*/
stack[top-1].n--;
stack[top-1].y=stack[top-1].x;
stack[top-1].x=-1.0; /*表示x值不定*/
tnode.y-=1.0;
if(push(stack,MAXN,&top,tnode))
return -1.0; /*将tnode进栈*/
}
if(deb) {
for(k=0<top-10?top-10:0;k<top;k++)
printf("N=%4d,x=%8f,y=%8f\n",stack[k].n,stack[k].x,stack[k].y);
scanf("%*c");
}
/*退栈,并将取得的栈顶结点的值存入tnode*/
pop(stack,&top,&tnode);
/*计算:B=A(tnode)*/
if(tnode.n==0) B=tnode.x+1.0;
else if(tnode.n==1) B=tnode.x;
else if(tnode.n==2) B=0.0;
else if(tnode.n==3) B=1.0;
else B=2.0;
if(top) /*栈非空将栈顶结点的x值改为B*/
stack[top-1].x=B;
}while(top); /*栈非空*/
return B; /*返回B*/
}

void main()
{
NODE node1={3,1,2},node2={3,2,5},node3={4,3,2};
printf("DEB? ");
scanf("%d",&deb);
printf("A(3,1,2)=%f",A(node1));
printf("\t%d\n",depth);
scanf("%*c");
printf("A(3,2,5)=%f",A(node2));
printf("\t%d\n",depth);
scanf("%*c");
printf("A(4,3,2)=%f",A(node3));
printf("\t%d\n",depth);
}

...全文
30 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluegirl2003 2002-08-22
  • 打赏
  • 举报
回复
depth是什么作用?
bluegirl2003 2002-08-20
  • 打赏
  • 举报
回复
对于楼主的问题的解答,就是指:如果deb为1,察看结果;否则不看结果?
coolley 2002-08-20
  • 打赏
  • 举报
回复
怎么我测试的结果是只有DEB=0是才有结果,其他都无正确结果呢?
ewang_365 2002-08-17
  • 打赏
  • 举报
回复
bluegirl2003(小笨笨猫): 是的,是输入任意字符继续,是为了防止滚屏,以便能看到结果。
bluegirl2003 2002-08-17
  • 打赏
  • 举报
回复
scanf("%*c");是什么意思?输入任意一个字符?
bluegirl2003 2002-08-17
  • 打赏
  • 举报
回复
??
ewang_365 2002-08-16
  • 打赏
  • 举报
回复
谢谢二位的解释,我明白了:)
ewang_365 2002-08-16
  • 打赏
  • 举报
回复
to: labi():

我用的就是去年的书。
xiaosuoke 2002-08-16
  • 打赏
  • 举报
回复
DEB是提示信息,deb是问你是否看当前栈中的内容
kinglang 2002-08-16
  • 打赏
  • 举报
回复
新教材跟旧教材有什么不同吗。
labi 2002-08-16
  • 打赏
  • 举报
回复
不知道你是用的什么书,我的书上怎么没的?!我用的是去年的书。
licloudx 2002-08-15
  • 打赏
  • 举报
回复
不是有个栈吗,是供你选择(用输入DEB)看不看目前栈中情况的
ld_key 2002-08-15
  • 打赏
  • 举报
回复
中间表达式的结果
winter_sui 2002-08-15
  • 打赏
  • 举报
回复
我也没看出什么用。。
知道了别忘了告诉我:winter_sui@163.com

2,947

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧