C语言简单四则混合运算代码

Python026

C语言简单四则混合运算代码,第1张

四则混合运算代码:

#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

}