用c语言编程四则混合运算计算器

哪位高手可以帮我编写一个用c编写的四则运算计算器。要有优先级考虑和容错功能,而且要带括号的运算。
例如输入2*(2*(1+2))按回车输出12
并且考虑输入2*(2+2 、2+(+2)、或者2*)1+2(等提示错误。
不胜感激!!

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
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[i]='\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();
}
我觉得这个就可以.我试了!
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-01-15
#include<stdio.h>

void main()
{
float a,b;
char d;
printf("请输入两个数a,b:");
scanf("%f,%f"&a,&b);
printf("请输入符号d");
scanf("%c",d);
switch(d)
{
case'+':printf("%f\n,a+b);break;
case'-':printf("%f\n,a-b);break;
case'*':printf("%f\n,a*b);break;
case'/':printf("%f\n,a/b);break;
default:printf("input error\n");
}
}
第2个回答  2006-04-13
使用反序.栈
比如5 + 3在栈里表示为5 3 +
扫描完整个用户输入的算式之后,从栈顶依次pop
如果是一个运算符(+), 就从栈里取两个数字(5, 3)进行运算
当然还有括号,比一般的+-*/级别高一些,可以再用一个栈
放括号.
最后两个栈都空,表名算式是正确的.

怎样用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器?
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File;2、输入预处理命令和主函数:include<stdio.h> \/*函数头:输入输出头文件*\/ void main()\/*空类型:主函数*\/ 3、定义变量:int a,b,d; \/*定义变量的数据类型为整型*\/ char c;\/*定义变量的数据类型为字符型*\/ 4、输入四则运算...

请问怎么用c语言写一个可以实现加减乘除四则运算的计算器!
}算法流程:1,如果读入数字就把它存入数组中,2,如果读入加,减号就存如另一个数组用,如果读入乘 除号,就再读入一个数字,从存数字的数组拿出两个数字进行乘 除运算。把结果存入数组中,这么重复直到读入回车键的符号。3,读到回车符号后,就从存符号的数组中拿出一个符号,再从存数字的数组中拿...

用C语言编程实现一个简单的四则运算计算器
\/\/函数,读数操作数 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=='*')retur...

如何用c语言编写可以实现四则运算的计算器
void resolve(char *p) \/*数字放在NUM中,符号放在SIGN中*\/{ int n=0,k=0; while(*p!='\\0') { if(*p>='0'&&*p<='9') n=n*10+(*p-'0'); else { num[k]=n; n=0; sign[k++]=*p; } p++; } num[k]=n;} void find(char ...

用c语言做一个简单的计算器。要求能做四则运算就够了,越简单越好。刚学...
用c语言做一个简单的计算器。要求能做四则运算就够了,越简单越好。刚学了半年的C语言 20  我来答 4个回答 #热议# 网文质量是不是下降了? liyapingliyap 2011-06-30 知道答主 回答量:1 采纳率:0% 帮助的人:0 我也去答题访问个人页 关注 展开全部 #include <stdio.h> #include <...

C语言 用if else if写一个简单的四则运算的计算器。只需要两个整数运算...
include<stdio.h>int main(){char ch;int a,b,c;printf("")scanf("%d%c%d",&a,&ch,&b);if(ch=='+'){c=a+b;}else if(ch=='-'){c=a-b;}else if(ch=='*'){c=a*b;}else if(ch=='\/'){c=a\/b;}printf("%d%c%d=%d",a,ch,b,c);return 0;}不知可否,虽然...

在C语言环境下开发简单的四则运算的命令行计算器
void main(){ int a,b;char op;printf("输入一个数");scanf("%d",&a);printf("\\n输入运算符:");scanf("%s",&op);printf("\\n输入另一个数");scanf("%d",&b);switch(op){ case '+':printf("\\n =%d\\n",a+b);break;case '-':printf("\\n =%d\\n",a-b);break;case '...

c语言编写 编写一个简单的计算器,实现两个整型数的四则运算。
1、打开CodeBlocks,新建一个空白文件,先定义头文件和主函数,接着写程序多大的主体:2、首先定义所需要的变量,将变量定义为浮点型,定义输入函数,将刚才的x和y定义为计算的变量,将c定义为选择计算方式的变量。用switch语句,将c作为选择变量,填写计算方式的选项,最后在主函数中输入一个输出函数来...

C语言怎么实现四则运算
我曾用c编了个计算器,支持四则运算,支持括号改变优先级,你看看吧:include <stdio.h> include <string.h> include <stdlib.h> include <conio.h> define Esc 27 define Tab 9 void needle(char* s,char* carriage,int start)\/\/needle意为“用针缝”{ int size_carriage=(int)strlen(carriage)...

用c语言编程简单的加减乘除以及混合运算的计算器
3 2013-09-04 求用C语言编写一简单计算器程序,要求:实现简单地加减乘除就行... 20 2015-12-22 用c语言编一个计算器程序,能够实现基本的加减乘除,能够输出运... 2006-04-17 用c语言编程四则混合运算计算器 27 2013-07-21 求C语言不用堆栈实现混合运算的简单计算器程序 8 更多...

相似回答