char m[7]="+-*/()#";
char n[7][7]={">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<= "
,">>>> >>","<<<<< ="};
char Precede(char a,char b){
int i=0,j=0;
while(m[i]!=a)
i++;
while(m[j]!=b)
j++;
return(n[i][j]);
}
float Operate(float a,char theta,float b){
float r;
switch(theta){
case'+':r=a+b;break;
case'-':r=a-b;break;
case'*':r=a*b;break;
case'/':if(b!=0)r=a/b;
else printf("输入错误!");
break;
}
return r;
}
void main(){
SqStack_T OPTR;
SqStack_N OPND;
float a,b,i;
char theta,c,x;
InitStack_T(&OPTR);Push_T(&OPTR,'#');
InitStack_N(&OPND);
printf("请输入表达式并以'#'结尾:\n");
c=getchar();
if(c==35||(c>=40&&c<=43)||c==45||(c>=47&&c<=57))
{
while(c!='#'||GetTop_T(&OPTR)!='#')
{
if(c>=48&&c<=57)
{
i=(float)c-48;
Push_N(&OPND,i);
c=getchar();
}
else
{
switch(Precede(GetTop_T(&OPTR),c))
{
case'<':Push_T(&OPTR,c);c=getchar();break;
case'=':x=Pop_T(&OPTR);c=getchar();break;
case'>':theta=Pop_T(&OPTR);b=Pop_N(&OPND);
a=Pop_N(&OPND);
Push_N(&OPND,Operate(a,theta,b));break;
}
}
}printf("结果是%f\n",GetTop_N(&OPND));
}
else printf("输入错误!\n");
}
利用堆栈求中缀表达式值
if(c==ch[1]){ j=0;c=getchar();\/\/也把-号覆盖}while(c!='#'||ch[Gettop(OPTR)]!='#'){if(isdigit(c)){sum=0;while(isdigit(c)){if(!j){sum=sum*10-(c-'0');\/\/实现了数字串前面有负号(之前是:sum=-(sum*10)-(c-'0')结果是-12+13=21)}elsesum=sum*10+(c-'0');c=g...
优先级最高的运算符排序
分为优先级15级:1、圆括号【()】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】。2、逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++】【 --】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*】【&】...
怎样用c语言编一个简单的计算器?最简单的
if(c>=48&&c<=57){ if(flag==0)cc=cc*10+c-48;\/\/小数点之前 else if(flag==1){cc=cc+(c-48)\/ii;ii*=10;}\/\/小数点之后 else {printf("小数点错误!\\n");exit(0);}\/\/小数点有错 } else if(c=='.')flag++;\/\/读到小数点 else {printf("表达式错误!\\n");exit(0);} prec=c;sc...
C语言的运算符的优先级:逻辑运算符、条件运算符、赋值运算符、关系运...
6、第六级:&、^、| 这三个符号也是位运算符号,其中内优先级,&>^>|。7、第七级:&&、|| 逻辑与&&优先级大于逻辑或||。8、第八级:? :也称为条件运算符号,是C语言中唯一的一个三目运算符,结合顺序是从右往左。9、第九级:=、+=、-+、*=、\/=、%= 这些...
怎样用c语言编一个简单的计算器?
\/\/算术表达式求值 char c,x,theta,prec; \/\/c是每次读取的字符,x是存放脱括号后的多余的括号,theta是运算符,prec是c的前一个字符 float a,b,result;\/\/a、b是每次从运算数栈中取出的要进行运算的数,result存放最终结果 float cc,flag,ii,minus=1; \/\/cc存放由字符串转化而来的浮点数,flag用于标记是否已读...
C语言中30多个运算符的优先级顺序
32多个运算符的优先级顺序如下 1、auto 声明自动变量 2、short 声明短整型变量或函数 3、int 声明整型变量或函数 4、long 声明长整型变量或函数 5、float 声明浮点型变量或函数 6、double 声明双精度变量或函数 7、char 声明字符型变量或函数 8、struct 声明结构体变量或函数 9、union 声明共用数据...
C语言中逻辑运算符非"!"与"&&"或"||"的优先级怎么说?
同一优先级的运算符,结合次序由结合方向所决定。简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。
c语言中运算符有哪几种,优先级顺序是怎样
运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。一级运算符:标识,常量,字符串文字量,优先级提升表达式最优先执行。二级运算符:数组下标运算...
《数据结构 课程设计》表达式求值 实验报告
1. 以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。2. 一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个...
C语言运算符的优先级
1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右...