| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 887 人关注过本帖
标题:不久前刚做的课程设计,发上来高手指教
取消只看楼主 加入收藏
16122657
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-9-24
收藏
 问题点数:0 回复次数:2 
不久前刚做的课程设计,发上来高手指教

利用栈的性质,编写一个能四则运算程序,支持括号+ - * /,输入完后以#号结束,只支持个位数的计算

例如 1+2+3*(4+5)#

#include <stdio.h> #define MAXNUM 100 #define FALSE 0 #define TRUE 1 struct sqstack{ int stack[MAXNUM]; int top; }optr,opnd;

int initstack (struct sqstack *s) { s->top=-1 ; return TRUE; }

int push (struct sqstack *s,int x) { if (s->top>MAXNUM-1) return FALSE; s->top++; s->stack[s->top]=x; return TRUE; }

int pop (struct sqstack *s) { int x; if (s->top<0) return NULL; x=s->stack[s->top]; s->top--; return x; }

int gettop (struct sqstack *s) { if (s->top<0) return NULL; return (s->stack[s->top]); }

int operate (int n1,int s,int n2) { switch (s) { case '+' :return (n1-48)+(n2-48)+48; case '-' :return (n1-48)-(n2-48)+48; case '*' :return (n1-48)*(n2-48)+48; case '/' :return (n1-48)/(n2-48)+48; } }

int precede (int a,int b) { switch (a) { case '+': case '-': switch (b) { case '+': case '-': case ')': case '#': return '>'; case '*': case '/': case '(': return '<'; };break; case '*': case '/': switch (b) { case '+': case '-': case '*': case '/': case ')': case '#': return '>'; case '(': return '<'; };break; case '(': switch (b) { case '+': case '-': case '*': case '/': case '(': return '<'; case ')': return '='; case '#': return FALSE; };break; case ')': switch (b) { case '+': case '-': case '*': case '/': case ')': case '#': return '>'; case '(': return FALSE; };break; case '#': switch (b) { case '+': case '-': case '*': case '/': case '(': return '<'; case '#': return '='; case ')': return FALSE; };break; } }

int isoptr (char op) { if (op=='+'||op=='-'||op=='*'||op=='/'||op=='('||op==')'||op=='#') return TRUE; return FALSE; }

main () { int a,b,op; char c,d; insert: printf ("Please input a expression:\n"); initstack (&optr); push (&optr,'#'); initstack (&opnd); scanf ("%c",&c); while (c!='#'||gettop(&optr)!='#') { if (isoptr(c)==FALSE) { push(&opnd,c); scanf ("%c",&c);} else switch (precede (gettop(&optr), c)) { case '<': push(&optr,c); scanf ("%c",&c); break; case '=': pop(&optr); scanf ("%c",&c); break; case '>': op=pop(&optr); b=pop(&opnd); a=pop(&opnd); push(&opnd,operate(a,op,b)); break; } } printf ("The answer is %d\n",gettop(&opnd)-48); printf ("\nPress any to continue and 'q' to quit\n\n"); d=getch(); if (d=='q') exit (); else goto insert;

}

[此贴子已经被作者于2004-09-24 15:30:49编辑过]

搜索更多相关主题的帖子: 指教 发上 课程 设计 
2004-09-24 15:29
16122657
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-9-24
收藏
得分:0 

绝对能用

2004-09-26 14:41
16122657
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-9-24
收藏
得分:0 

48是‘0’啊,把字符转换成数字

2004-09-26 14:41
快速回复:不久前刚做的课程设计,发上来高手指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015517 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved