建议不会的看别人的代码自己在之上模拟一遍,只要耐心模拟就会做出来
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1000
using namespace std;
char s[N];//存储字符串 
char str1[N];//存储‘o‘-到‘9‘的字符 
char str2[N];//存储运算符 
int top1,top2;//利用数组模拟栈 
int compare(char x)//优先级比较 
{
 switch(x)
 {
  case ‘+‘ :
  case ‘-‘ :return 1;
  case ‘*‘ :
  case ‘/‘ :return 2;
  case ‘(‘ :return 0;
  default: return -1; 
 }
}
void zhuan()//转换 
{
 int k;
 top1=-1,top2=-1;//初始化头 
 scanf("%s",s);
 k=strlen(s);
 for(int i=0;i<k;i++)
 {
  if(s[i]>=‘0‘&&s[i]<=‘9‘||s[i]==‘.‘)//如果是数字进去str1数组中 
  {
   top1++;
   str1[top1]=s[i];
     }
  else if(s[i]==‘(‘)//如果是‘(‘进入str2中 
  {
   top2++;
   str2[top2]=s[i];
     }
  else if(s[i]==‘)‘)//如果是‘)‘说明str2中有运算符 
  {
   while(str2[top2]!=‘(‘)
   {
    top1++;
    str1[top1]=‘ ‘;
    top1++;
    str1[top1]=str2[top2];
    top2--;
   }
   top2--;//把‘(‘出去 
  }
     else if(s[i]==‘+‘||s[i]==‘-‘||s[i]==‘*‘||s[i]==‘/‘)//如果是运算符比较优先级 
  {
    top1++;
    str1[top1]=‘ ‘;
    while(compare(s[i])<=compare(str2[top2]))//如果s[i]优先级低于之前也就是str2中的运算符  把str2中的运算符给str1
    {
     top1++;
   str1[top1]=str2[top2];
   top1++;
   str1[top1]=‘ ‘;
   top2--;
    }
    top2++;
    str2[top2]=s[i];//如果str2高进入str2 
     }
 }
 while(top2!=-1)//将剩余的进入str1中 
 {
  top1++;
  str1[top1]=‘ ‘;
  top1++;
  str1[top1]=str2[top2];
  top2--;
 }
 top1++;
 str1[top1]=‘ ‘;
 top1++;
 str1[top1]=‘=‘;
 top1++;
 str1[top1]=‘\0‘;
} 
void sum()//计算 
{
 double a1,a2,d[N];
 char ch;
 char s1[100],st[N];
 int k,t=-1;
 for(int i=0;i<top1;i++)
 {
  k=0;
  ch=str1[i];
  while(str1[i]!=‘ ‘)
  {
   if(str1[i]==‘=‘) break;
   s1[k++]=str1[i];
   i++;
  }
  if(ch>=‘0‘&&ch<=‘9‘)
  {
   s1[k]=‘\0‘;
   t++;
   d[t]=atof(s1);
  }
  else
  {
   switch(ch)
   {
    case ‘+‘ :
     a2=d[t];
     t--;
     a1=d[t];
     t--;
     t++;
     d[t]=a1+a2;
     break;
    case ‘-‘ :
     a2=d[t];
     t--;
     a1=d[t];
     t--;
     t++;
     d[t]=a1-a2;
     break;
    case ‘*‘ :
     a2=d[t];
     t--;
     a1=d[t];
     t--;
     t++;
     d[t]=a1*a2;
     break;
    case ‘/‘ :
     a2=d[t];
     t--;
     a1=d[t];
     t--;
     t++;
     d[t]=a1/a2;
     break;
    default : break;
   }
  }
 }
 printf("%.2lf\n",d[t]);
}
main()
{
 int n;
 scanf("%d",&n); 
 while(n--)
 {
  zhuan();
  sum(); 
 } 
} 
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/yueloveme/article/details/47058051