求汇编源代码 实现四则运算的计算器

[复制链接]
查看11 | 回复0 | 2007-6-5 19:23:09 | 显示全部楼层 |阅读模式
#include//函数,读数操作数 int getNextNum() { int ret; scanf("%d",&ret); return ret; } //函数,读运算符 char getOpt() { return getchar(); } //函数,计算 int caculate(int op1 , int op2 ,char opt) { if(opt=='+')return op1+op2; if(opt=='-')return op1-op2; if(opt=='*')return op1*op2; if(opt=='/')return op1/op2; return 0; } int main() { int op1,op2; char opt; //计算结果放在第一个操作数 op1 = getNextNum(); while(1) { opt = getOpt(); if ( opt == '=' ) break; op2 = getNextNum(); op1 = caculate(op1,op2,opt); } printf("%d\n",op1); } return 0; }带优先的四则运算计算器源代码#include #include #include char token[61]; /*存放表达式字符串的数组*/ int n=0; void error(void) /*报告错误函数*/ { printf("ERROR!\n"); exit(1); } void match(char expected) /*检查字符匹配的函数*/ { if(token[n]==expected) token[++n]=getchar(); else error(); } double term(void); /*计算乘除的函数*/ double factor(void); /*处理括号和数字的函数*/ double exp(void) /*计算加减的函数*/ { double temp=term(); while((token[n]=='+')||(token[n]=='-')) switch(token[n]) { case'+':match('+'); temp+=term(); break; case'-':match('-'); temp-=term(); break; } return temp; } double term(void) { double div; double temp=factor(); while((token[n]=='*')||(token[n]=='/')) switch(token[n]) { case'*':match('*'); temp*=factor(); break; case'/':match('/'); div=factor(); if(div==0) /*处理除数为零的情况*/ { printf("The divisor is zero!\n"); exit(1); } temp/=div; break; } return temp; } double factor(void) { double temp; char number[61]; int i=0; if(token[n]=='(') { match('('); temp=exp(); match(')'); } else if(isdigit(token[n])||token[n]=='.') { while(isdigit(token[n])||token[n]=='.') /*将字符串转换为浮点数*/ { number[i++]=token[n++]; token[n]=getchar(); } number='\0'; temp=atof(number); } else error(); return temp; } main() { double result; FILE *data=fopen("61590_4.dat","at"); if(data==NULL) data=fopen("61590_4.dat","wt"); if(data==NULL) return 0; token[n]=getchar(); result=exp(); if(token[n]=='\n') { token[n]='\0'; printf("%s=%g\n",token,result); fprintf(data,"%s=%g\n",token,result); } else error(); fclose(data); return 0; getch(); }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行