C语言问题: 设计一个简易计算器,要求:能够进行任意多个数的加减乘除四则运算。比如,用户

2024-11-18 04:51:41
推荐回答(4个)
回答1:

#include
#define stack_init_size 100 //初始化栈大小

int zhuanhuan(char a,char b)
{int i,j;
int precede[7][7]={
{1,1,-1,-1,-1,1,1},
{1,1,-1,-1,-1,1,1},
{1,1,1,1,-1,1,1},
{1,1,1,1,-1,1,1},
{-1,-1,-1,-1,-1,0,2},
{1,1,1,1,2,1,1},
{-1,-1,-1,-1,-1,2,0}
};

switch(a)
{case'+':i=0;break;
case'-':i=1;break;
case'*':i=2;break;
case'/':i=3;break;
case'(':i=4;break;
case')':i=5;break;
case'#':i=6;break;
}
switch(b)
{case'+':j=0;break;
case'-':j=1;break;
case'*':j=2;break;
case'/':j=3;break;
case'(':j=4;break;
case')':j=5;break;
case'#':j=6;break;
}
return precede[i][j];
} //转换字符优先顺序

void main()
{char OPTR[stack_init_size]; //定义字符栈

int OPND[stack_init_size]; //定义数字栈

char *fbase,*ftop; //定义字符栈指针

int *nbase,*ntop; //定义数字栈指针

char theta,x,c;
int opera,a,b;

fbase=OPTR;ftop=fbase;*ftop='#';ftop++; //定位字符指针、置字符栈底为#号

nbase=OPND;ntop=nbase; //定位数字指针

printf("请输入等式(以#结束):\n");
c=getchar();
while(c!='#'||*(ftop-1)!='#')
{if(c>='0'&&c<='9') {*ntop=c-'0';ntop++;c=getchar();} //是数字就进数字栈
else
switch(zhuanhuan(*(ftop-1),c))
{case -1:*ftop=c;ftop++; //Push(OPTR,c)
c=getchar();break;
case 0:ftop--;x=*ftop; //Pop(OPTR,x)
c=getchar();break;
case 1:ftop--;theta=*ftop; //Pop(OPTR,theta)
ntop--;b=*ntop; //Pop(OPND,b)
ntop--;a=*ntop; //Pop(OPND,a)
if(theta=='+') opera=a+b;
else if(theta=='-') opera=a-b;
else if(theta=='*') opera=a*b;
else if(theta=='/') opera=a/b;
*ntop=opera;ntop++; //Push(OPND,Operate(a,theta,b))
break;
}//switch
}//while
printf("结果是:%3d\n",*(ntop-1));
}//main

这是直接的输入完整算式的程序,请在英文输入条件下输入,以“#”号结束,例如
输入:
2*(4-6)-7/3*(3+1)#,然后回车,便得到结果

回答2:

简单的四则运算,不包括括号,要用栈来实现,若有括号,要麻烦点,但也可以用栈来实现

回答3:

为什么是美女,而不是帅哥?是怎么看出来的,那位回答者?

回答4:

美女可以聊聊吗?