| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1310 人关注过本帖
标题:求助 有理数四则混合运算
只看楼主 加入收藏
foxsxt
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-6-2
收藏
 问题点数:0 回复次数:1 
求助 有理数四则混合运算
这个程序不能进行多位的有理数运算,请哪位帮忙修改一下,狂谢!!!! #include<stdio.h> #include<stdlib.h>

struct stack_node { int data; struct stack_node *next; }; typedef struct stack_node stack_list; typedef stack_list *link;

link operator=NULL; link operand=NULL;

link push(link stack, int value) { link new_node; new_node=(link)malloc(sizeof(stack_list)); if(!new_node) { printf("Overflow!\n"); return NULL; } new_node->data=value; new_node->next=stack; stack=new_node; return stack; }

link pop(link stack, int *value) { link top; if(stack!=NULL) { top=stack; stack=stack->next; *value=top->data; free(top); return stack; } else *value=-1; }

int empty(link stack) { if(stack==NULL) return 1; else return 0; }

int isoperator(char op) { switch(op) { case '+': case '-': case '*': case '/': return 1; default: return 0; } }

int priority(char op) { switch(op) { case ')': return 3; case '*': case '/': return 2; case '+': case '-': return 1; case '(': return -1; default: return 0; } }

int get_value(int op, int operand1, int operand2) { switch((char)op) { case '*': return(operand2*operand1); case '/': return(operand2/operand1); case '-': return(operand2-operand1); case '+': return(operand2+operand1); } }

void main() { char exp[100]; int op=0; int operand1=0; int operand2=0; int result=0; int pos=0;

printf("Please input the expression:\n"); gets(exp);

while(exp[pos]!='\0'&&exp[pos]!='\n') { if(exp[pos]==' ') { pos++; continue; } if(exp[pos]=='(') operator=push(operator,exp[pos]); else if(exp[pos]==')') { operator=pop(operator,&op); while(op!='(') { operand=pop(operand,&operand1); operand=pop(operand,&operand2); operand=push(operand,get_value(op,operand1,operand2)); operator=pop(operator,&op); } } else if(isoperator(exp[pos])) { while(priority(exp[pos])<=priority(operator->data)&&!empty(operator)) { operator=pop(operator, &op); operand=pop(operand, &operand1); operand=pop(operand, &operand2); operand=push(operand,get_value(op,operand1,operand2)); } operator=push(operator,exp[pos]); } else operand=push(operand,exp[pos]-48); pos++; } while(!empty(operator)) { operator=pop(operator,&op); operand=pop(operand,&operand1); operand=pop(operand,&operand2); operand=push(operand,get_value(op,operand1,operand2)); } operand=pop(operand,&result); printf("The result of expression [%s] is: %d\n",exp,result); }

搜索更多相关主题的帖子: stack node 有理数 link 运算 
2005-06-02 20:10
phh
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-4-22
收藏
得分:0 
这个程序在我的vc运行没有错误,但是有警告3处,运行起来之后输入算式回车,出现错误~~~
不知道为什么~~~~能不能指点一下~~~谢谢了
而且怎么样才能识别 负号 与 减号 的区别?还有怎样能识别括号?
那位高手能不能指点一下 ~~~ 谢谢了~~~
2006-04-22 08:37
快速回复:求助 有理数四则混合运算
数据加载中...
 
   



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

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