⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exp9.c

📁 根据所学的数据结构
💻 C
字号:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#define Max 20

 typedef struct chnu
   {  char   v[Max] ;
      int   t   ;  } cn;
 typedef struct nn
    {  float  v[Max] ;
   int  t ;  }  n;
void   init(cn *p, cn *q)                  /*chushihua*/
  {  p->t=-1 ;
   q->t=-1 ;
   q->t++ ;
   q->v[q->t]='#' ;
          }
void   initn(n *p)
  {   p->t=-1 ;
          }


void   push(char c,cn *p)             /*push*/
   {  p->t++ ;
   p->v[p->t]=c ;   }

char   pull(cn *p)                /*pull*/
   {   char c=p->v[p->t] ;
  p->t-- ;
    return c ;   }

void   pushn(float f,n *p)               /*pushn */
   {  p->t++ ;
      p->v[p->t]=f;  }

float   pulln(n *p)
    {  float b=p->v[p->t];
      p->t-- ;
      return b ;   }


void creat(char e[])                                  /*creat */
{
   printf("please enter the expression:");
   scanf("%s",e);
             }

void convert(cn *pn,n *p)
       {  float f=0 ;
           int i,j ;   
           j=pn->t  ;
         if(j==-1)
          {return ;}
     while(pn->v[pn->t]!='.'&&pn->t>0)
             pn->t--  ;
       if(pn->t>0)
          {    i=pn->t;
               pn->t=j;
             while(pn->t>=0)
                {  if(pn->t>i)
                     f=f+(pn->v[pn->t]-48)*pow(10,i-pn->t);
                 else 
                if(pn->t<i)
                  f=f+(pn->v[pn->t]-48)*pow(10,i-pn->t-1);
            pn->t--  ; 
          }             }
        else
            {      pn->t=j;
           while(pn->t>=0)
   {        f=f+(pn->v[pn->t]-48)*pow(10,j-pn->t);
           pn->t--;   
      }           
              }
       pushn(f,p);           
          }


void cal(char c,n *p)                 /*cal*/
  {     float a;
        switch(c)
     { case '+': 
             {  a=pulln(p);
                 p->v[p->t]=a+p->v[p->t];   }
                break;
       case '-':
            {  a=pulln(p);
                 p->v[p->t]=p->v[p->t]-a;  }
                break;
       case 'x':
            {  a=pulln(p);
                 p->v[p->t]=p->v[p->t]*a;  }
                break;
       case '/':
             { a=pulln(p);
                p->v[p->t]=p->v[p->t]/a;}
              break;
             }            
       }
 

void     qiu(char e[],cn *pc,cn *pn)                                            /*qiu*/
   {  n *p;
     int i=0;
     p=(n *)malloc(sizeof(struct nn));
     initn(p);
    while(e[i]!='\0')
 {   switch(e[i])
   {  case '(':   convert(pn,p);
                   push(e[i],pc); 
                         break;
      case '+':
      case '-':
                  convert(pn, p);
              while(pc->v[pc->t]!='('&&pc->v[pc->t]!='#')
           {   cal(pc->v[pc->t],p);
              pc->t--;        }
               push(e[i],pc); 
                     break;
      case 'x':
      case '/':  
                   convert(pn, p);
                 while(pc->v[pc->t]=='x'&&pc->v[pc->t]=='/')
               {   cal(pc->v[pc->t],p);
                  p->t--;    }
                      push(e[i],pc); 
                   break;
        case ')':  convert(pn,p);
                     while(pc->v[pc->t]!='(')
                    {   cal(pc->v[pc->t],p);
                  pc->t--;       }
                  pc->t--;
                             break;
        case '#': 
                   convert(pn,p);
                    while(pc->v[pc->t]!='#')
                 {   cal(pc->v[pc->t],p); pc->t--;}
                          break;
           default :    push(e[i],pn);   }
                      i++;    }
                    printf("%6.3f\n",p->v[p->t]);}
 main()                                               /*main*/
{   char e[Max];
    cn *pc,*pn;
    pc=(cn *)malloc(sizeof(struct chnu));
    pn=(cn *)malloc(sizeof(struct chnu));
    init(pn,pc);
    creat(e);
    qiu(e,pc,pn);
                  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -