-
设置一个整数数组存放输入数字,一个字符数组存放运算符。
-
按照乘除法优先先进行运算,而后进行加减运算。
#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 10000 //最大的数不超过10000
int upnum(int x);//查找运算符号上面的数字
int dowmnum(int x);//查找运算符号下面的数字
int vali[100]={0};//数字栈
char valc[100];//符号栈
int upnum(int x) 上寻找函数
{
int safe;//保存vali[x]的值,以便后面把值赋值为MAXNUM
for(;vali[x]==MAXNUM;)
{
++x;
}
safe=vali[x];
vali[x]=MAXNUM;
return safe;
}
int dowmnum(int x)
{
int safe;
for(;vali[x]==MAXNUM;)
{
--x;
}
safe=vali[x];
vali[x]=MAXNUM;
return safe;
}
i为循环用数,j为循环用数,k为栈层 ,n为临时数组
main()
{
int i,k,j,n,i1;//i为循环用数,j为大循环 ,k为栈层 ,n为临时数组
for(i=0;i<100;++i)
{
vali[i]=MAXNUM;
}
char a1[5];//临时存储待转化为i
char a[100];
scanf("%s",a);
for(j=0,i=0,k=0;a[j]!='\0';++j)
{
if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/')
{
valc[k]=a[i];
++k;
++i;
}
if(a[i]>47&&a[i]<58)
{
for(i1=0;i1<5;++i1)
{
a1[i1]=58;
}
for(n=0;a[i]>47&&a[i]<58;++i,++n)
{
a1[n]=a[i];
}
vali[k]=atoi(a1);
++k;
}
}
valc[k]=EOF;
k=0;
while(1)//先算*,/
{
switch(valc[k])
{
case '*':
vali[k]=upnum(k)*dowmnum(k);
break;
case '/':
vali[k]=upnum(k)/dowmnum(k);
break;
}
if(valc[k]==EOF)
{
break;
}
++k;
}
k=0;
while(1)//后算+,-
{
switch(valc[k])
{
case '+':
vali[k]=upnum(k)+dowmnum(k);
break;
case '-':
vali[k]=upnum(k)-dowmnum(k);
break;
}
if(valc[k]==EOF)
{
break;
}
++k;
}
程序运算完后,整数数组就存在最终结果。以下为寻找结果并输出。
for(i=0;vali[i]==MAXNUM;++i)//跳过MAXNUM,寻找结果输出i
{
;
}
printf("%d\n",vali[i]);
return(0);
}