久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      用復(fù)合鏈表和棧外理四則運算

      原帖及討論:http://bbs.bccn.net/thread-151098-1-1.html

      #include<stdio.h>
      #include<malloc.h>
      union nuionnum
      {
          double num1;
          char num2;
      };
      struct lianbiao
      {
          struct lianbiao *p;
          union nuionnum num;
          int flage;//標志是數(shù)字還是符號

      };
      void main()
      {    
          char c;
          struct lianbiao lianhe;
          struct lianbiao *next;
          printf(“請輸入一個計算機能識別的四則運算表達式,如:a+b*(c+d)/en”);
          while(1)
          {
      first:
              next=&lianhe;
              while((int)(c=getchar())!=10)
              {    
      loop:
              //將表達式放入復(fù)合鏈表中
                  if (c==’+’||c==’-‘||c==’*’||c==’/’||c=='(‘||c==’)’)
                  {
                      next->num.num2=c;
                      if (c== ‘+’ || c== ‘-‘ )
                          next->flage =1;
                      else if(c== ‘*’ ||c== ‘/’ )
                          next->flage =2;
                      else if(c== ‘(‘ )
                          next->flage =3;
                      else if(c== ‘)’ )
                          next->flage =4;
                      next->p=calloc(1,sizeof(struct lianbiao));
                      next=next->p;
                      next->p=NULL;
                  }
                  else if(c>=’0’&&c<=’9′)
                  {  long int t=1;
                     int flag=0;
                      next->num.num1=c-48;
                      while(((c=getchar())>=’0’&&c<=’9′)||c==’.’)
                      {    
                          if (flag==1 && c!=’.’)
                                  {
                                      t=t*10;
                                      next->num.num1=next->num.num1+(c-48.0)/t;
                                  }
                          else if(c>=’0’&&c<=’9′)
                              next->num.num1=next->num.num1*10+c-48;

                          if (c==’.’)
                          {
                              flag=1;
                          }
                      }
                      next->flage =0;
                      next->p=calloc(1,sizeof(struct lianbiao));
                      next=next->p;
                      next->p=NULL;
                      if (c==’n’)break;
                      goto loop;
                  }
                  else
                  {
                      printf(“不是合法的算術(shù)表達式!!!n請重新輸入:n”);
                      while(getchar()!=’n’);//設(shè)置重新輸入
                      goto first;
                  }
              }
      //將鏈表中的數(shù)字和符號分別入棧
          next=&lianhe;
          {
              int i=0,j=0;//用來標記棧的頂點
              double arrd[100];
              char arrc[2][100];
              while(next->p!=NULL)
              {
                  if (next->flage !=0&&next->num.num2==’)’)//括號的外理
                  {
                      while(arrc[0][i-1]!='(‘)//出棧
                      {
                          if (arrc[0][i-1]==’+’)
                          {
                              arrd[j-2]=arrd[j-2]+arrd[j-1];
                              i=i-1;
                              j=j-1;
                          }
                          else if(arrc[0][i-1]==’-‘)
                          {
                              arrd[j-2]=arrd[j-2]-arrd[j-1];
                              i=i-1;
                              j=j-1;
                          }
                          else if(arrc[0][i-1]==’*’)
                          {
                              arrd[j-2]=arrd[j-2]*arrd[j-1];
                              i=i-1;
                              j=j-1;
                          }
                          else if(arrc[0][i-1]==’/’)
                          {
                              arrd[j-2]=arrd[j-2]/arrd[j-1];
                              i=i-1;
                              j=j-1;
                          }
                      }
                      i=i-1;
                  }
                  else if (next->num.num2 =='(‘)//入棧
                  {
                      arrc[1][i]=next->flage;
                      arrc[0][i]=next->num.num2;
                      i++;
                  }
                  else if (next->flage !=0)//對運算復(fù)符的理
                  {
      front:
                      if (i>0&&next->flage<arrc[1][i-1]&&arrc[1][i-1]!=3)
                      {
                          if (arrc[0][i-1]==’*’)
                          {
                              arrd[j-2]=arrd[j-2]*arrd[j-1];
                              i=i-1;
                              j=j-1;
                          }
                          else if(arrc[0][i-1]==’/’)
                          {
                              arrd[j-2]=arrd[j-2]/arrd[j-1];
                              i=i-1;
                              j=j-1;    
                          }
                          goto front;
                      }
                      arrc[1][i]=next->flage;
                      arrc[0][i]=next->num.num2;
                      i++;
                  }
                  else
                  {
                      arrd[j]=next->num.num1; //對數(shù)字的理
                      j++;
                  }
                  next=next->p;
              }
              while(i!=0)//全部入棧之后對椎的外理
              {
                      if (arrc[0][i-1]==’+’)
                          {
                              arrd[j-2]=arrd[j-2]+arrd[j-1];
                              i=i-1;
                              j=j-1;
                          }
                      else if (arrc[0][i-1]==’-‘)
                          {
                              arrd[j-2]=arrd[j-2]-arrd[j-1];
                              i=i-1;
                              j=j-1;
                          }
                      else if (arrc[0][i-1]==’*’)
                          {
                              arrd[j-2]=arrd[j-2]*arrd[j-1];
                              i=i-1;
                              j=j-1;
                          }
                          else if(arrc[0][i-1]==’/’)
                          {
                              arrd[j-2]=arrd[j-2]/arrd[j-1];//1+2*3/4+5   1 1.5 5   ++
                              i=i-1;
                              j=j-1;    
                          }
              }
              printf(“%lfn”,arrd[0]);

          }
          }
      }

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號