#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()
}
//此算法只能进行整数四则混合运算,也不支持括号//按下面的格式输入表达式(末尾无=)
//10-5+4+6/2*14*8/4-5*7+2-4*6/2-10*4-6/3
#include<stdio.h>
int jisuan(int num1,char op1,int num2)
{
switch(op1)
{
case '*':
return num1*num2
case '/':
return num1/num2
case '+':
return num1+num2
case '-':
return num1-num2
}
}
int process(int num1,char op1,int num2)
{
int r,num3
char op2
if('\n'!=(op2=getchar()))
{
scanf("%d",&num3)
if('+'==op2 || '-'==op2)
{
num1=jisuan(num1,op1,num2)
r=process(num1,op2,num3)
}
else if('*'==op2 || '/'==op2)
{
if('/'==op1)
{
num1=jisuan(num1,op1,num2)
r=process(num1,op2,num3)
}
else
{
num2=jisuan(num2,op2,num3)
r=process(num1,op1,num2)
}
}
}
else
{
r=jisuan(num1,op1,num2)
}
return r
}
int main()
{
int num1,num2
char op
printf("请输入一个表达式:")
scanf("%d%c%d",&num1,&op,&num2)
printf("=%d\n",process(num1,op,num2))
return 0
}