注册 登录
编程论坛 C++教室

自己练习时编的一个混合运算的小程序,运行时总是不对,各位帮忙看看

wangzhao8550 发布于 2011-04-25 15:58, 504 次点击
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Chenchu(int Int[],int Long,char symbol[],int Start)  ;//声明混合运算函数
void Jiajian(int Int[],int Long,char symbol[],int Start) ;

int main()
{
  int i,shu=0,yun=0,j,m,n,N,Int[5],Long,I,J,M,k,Go ;
  char Symbol[5] ;
  for(i=0;i<10;i++)
  {
     scanf("%d",&Int[i]) ;//输入整数

     scanf("%c",&Symbol[i]) ;//输入运算符

     if(Symbol[i]=='=')//直到输入“=”,输入结束

     {break ;}

                  

  }
  Long=strlen(Symbol);//计算运算符的长度


 

  Go=Chenchu(Int,Long,Symbol,0) ;//调用混合运算函数

  printf("%d",Go) ;//输出结果


 



  system("pause") ;  

}
int Chenchu(int Int[],int Long,char symbol[],int Start )

{
   

  for(int j=Start;j<Long-1;j++)//“*”,“/”运算符优先计算

  {
     if(symbol[j]=='*')   //首先检查“*”运算符

     {
       Int[j]=Int[j]*Int[j+1] ;//“*”运算符 对应位置的整数与其后一位的整数相乘 ,将整数数组当前位置的整数替换为计算结果计算结果,并且

       printf("%d*\n",Int[j]) ;
       for(int m=j;m<Long-2;m++) //进行完乘法运算后,从检查出的“*”运算符位置和相对应的整数位置

       {
         

          Int[m+1]=Int[m+2] ;//将已经完成计算的整数从整数数组中删除

          symbol[m]=symbol[m+1] ;//将已经完成计算的运算符和从字符数组中删除

          Long=Long-1 ;//字符数组和整数数组长度自动缩减一位

         Chenchu(Int,Long,symbol,j) ;//从当前位置重新进行检查

                     

       }

 

                     

     }

     else if(symbol[j]=='/')
     {
       Int[j]=Int[j]/Int[j+1] ;
       printf("%d/\n",Int[j]) ;
       for(int n=j;n<Long-2;n++)
       {
        

          Int[n+1]=Int[n+2] ;
          symbol[n]=symbol[n+1] ;
          Long=Long-1 ;

          Chenchu(Int,Long,symbol,j) ;
                  

       }

   

                  

     }                                

  }
  Jiajian(Int,Long,symbol,0) ;
  return Int[0] ;
}
void Jiajian(int Int[],int Long,char symbol[],int Start)
{

  for(int J=Start;J<Long-1;J++)
  {
     if(symbol[J]=='-')
     {
       Int[J]=Int[J]-Int[J+1] ;
       printf("%d-\n",Int[J]) ;
       for(int M=J;M<Long-2;M++)
       {
        

          Int[M+1]=Int[M+2] ;
          symbol[M]=symbol[M+1] ;
          Long=Long-1 ;

         Jiajian(Int,Long,symbol,J) ;
                        

       }

 

                  

     }

     else if(symbol[J]=='+')
     {
       Int[J]=Int[J]+Int[J+1] ;
       printf("%d+\n",Int[J]) ;
       for(int N=J;N<Long-2;N++)
       {
      

          Int[N+1]=Int[N+2] ;
          symbol[N]=symbol[N+1] ;
          Long=Long-1 ;

          Jiajian(Int,Long,symbol,J) ;
                          

       }

     

     }                                

  }


}
2 回复
#2
wangzhao85502011-04-25 16:08
可能我写的比较冗杂,谁能写个混合运算的小程序让小弟参考一下吗?
#3
dengjinbao2011-04-25 18:38
用堆栈写
1