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

📄 szys.c

📁 利用堆栈实现有理数的四则运算
💻 C
📖 第 1 页 / 共 3 页
字号:
     while(j--!=0) m=m*1/10;
     t2=t2+m;
     swap=swap->link;
     i++;
    }
   }
   else if(!isPoint_included(temp)){
    while(swap->link->info!='_'){swap=swap->link;i++;}
          swap=temp;
          while(swap->link->info!='_'&&--i!=0) {
      j=i;
      m=(NumberType)swap->link->info-'0';
      while(j--!=0) m=m*10;
             t2=t2+m;
            swap=swap->link;
    }
    if(i==0||i==-1) {t2=t2+(NumberType)swap->link->info-'0';swap=swap->link;}
   }
   if(p->link->info=='+') tmark1=t1+t2;
   else if(p->link->info=='-') tmark1=t1-t2;
   else if(p->link->info=='*') tmark1=t1*t2;
   else if(p->link->info=='/') tmark1=t2/t1;

   p=p->link;
   if(p->link->info=='+') t=t+tmark1;
   else if(p->link->info=='-') t=t-tmark1;
   else if(p->link->info=='*') t=t*tmark1;
   else if(p->link->info=='/') t=t/tmark1;
   p=p->link;
   q=ID;
  }
  /********************************************************************/
  /*********************************************************************/
  else if(isOperator(p->info)&&!isOperator(p->link->info)&&Calculator_underline(p->link)==1){
   temp1=p;
   while(!isOperator(p->link->info)) p=p->link;
   swap=temp1; t1=0;i=0;   /* calculate t1 */
   if(isPoint_included(temp)){   /*include point */
    while(swap->link->info!='.'){swap=swap->link;i++;}
    swap=temp;
    while(swap->link->info!='.'&&--i!=0){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*10;
     t1=t1+m;
     swap=swap->link;
    }
    if(i==0) {t1=t1+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
    i=1;
    while(swap->link->info!='_'){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*1/10;
     t1=t1+m;
     swap=swap->link;
     i++;
    }
   }
   else if(!isPoint_included(temp)){
    while(swap->link->info!='_'){swap=swap->link;i++;}
   swap=temp1;
          while(swap->link->info!='_'&&--i!=0) {
      j=i;
      m=(NumberType)swap->link->info-'0';
      while(j--!=0) m=m*10;
        t1=t1+m;
            swap=swap->link;
    }
    if(i==0) {t1=t1+(NumberType)swap->link->info-'0';swap=swap->link;}
   }
   if(p->link->info=='+') t=t+t1;
   else if(p->link->info=='-') t=t-t1;
   else if(p->link->info=='*') t=t*t1;
   else if(p->link->info=='/') t=t/t1;
   p=p->link;
  }
  /******************************************************************/
  /********************************************************************/
  else if(!isOperator(p->info) && !isOperator(p->link->link->info)&&Calculator_underline(p->link)==2){
   PNode ID;
   if(q==pllist->base){                     /* find q */
         while(q!=p){
         if(q->info=='_') temp=q;
         q=q->link;
      }
         q=temp;
   }
   swap=temp=pllist->base; /*find temp */
   while(temp->link!=q){
    if(temp->link->info=='_') swap=temp;
    temp=temp->link;
   }
   ID=temp=swap;
   swap=q;
   t1=t2=0;i=0;
   if(isPoint_included(q)){   /*include point */
    while(swap->link->info!='.'){swap=swap->link;i++;}/*calculate t1*/
    swap=q;
    while(swap->link->info!='.'&&--i!=0){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*10;
     t1=t1+m;
     swap=swap->link;
    }
    if(i==0) {t1=t1+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
    i=1;
    while(swap->link->info!='_'){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*1/10;
     t1=t1+m;
     swap=swap->link;
     i++;
    }
   }
   else if(!isPoint_included(q)){
    while(swap->link->info!='_'){swap=swap->link;i++;}
          swap=q;
          while(swap->link->info!='_'&&--i!=0) {
      j=i;
      m=(NumberType)swap->link->info-'0';
      while(j--!=0) m=m*10;
             t1=t1+m;
            swap=swap->link;
    }
    if(i==0) {t1=t1+(NumberType)swap->link->info-'0';swap=swap->link;}
   }
   swap=temp;
   if(isPoint_included(temp)){   /*include point */
    while(swap->link->info!='.'){swap=swap->link;i++;}
    swap=temp;
    while(swap->link->info!='.'&&--i!=0){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*10;
     t2=t2+m;
     swap=swap->link;
    }
    if(i==0) {t2=t2+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
    i=1;
    while(swap->link->info!='_'){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*1/10;
     t2=t2+m;
     swap=swap->link;
     i++;
    }
   }
   else if(!isPoint_included(temp)){
    while(swap->link->info!='_'){swap=swap->link;i++;}
          swap=temp;
         while(swap->link->info!='_'&&--i!=0) {
      j=i;
      m=(NumberType)swap->link->info-'0';
      while(j--!=0) m=m*10;
             t2=t2+m;
            swap=swap->link;
    }
    if(i==0) {t2=t2+(NumberType)swap->link->info-'0';swap=swap->link;}
   }
    /*calculate t*/
   if(p->link->info=='+') tmark1=t1+t2;
   else if(p->link->info=='-') tmark1=t1-t2;
   else if(p->link->info=='*') tmark1=t1*t2;
   else if(p->link->info=='/') tmark1=t2/t1;
      temp1=p=p->link;
     /*//////////////////////dealt with the second part/////////*/
   t1=t2=0;i=0;
     while(!isOperator(p->link->info)) p=p->link;
     while(q->link!=p){                                /*find p*/
      if(q->link->info=='_') temp=q->link;
      q=q->link;
     }
     q=temp;
     temp=temp1;
     if(isPoint_included(q)){   /*include point */
    while(swap->link->info!='.'){swap=swap->link;i++;}
    swap=q;
    while(swap->link->info!='.'&&--i!=0){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*10;
     t1=t1+m;
     swap=swap->link;
    }
    if(i==0) {t1=t1+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
    i=1;
    while(swap->link->info!='_'){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*1/10;
     t1=t1+m;
     swap=swap->link;
     i++;
    }
   }
   else if(!isPoint_included(q)){
   swap=q;
    while(swap->link->info!='_'){swap=swap->link;i++;}
          swap=q;
   while(swap->link->info!='_'&&--i>0) {
      j=i;
      m=(NumberType)swap->link->info-'0';
      while(j--!=0) m=m*10;
             t1=t1+m;
            swap=swap->link;
    }

    if(i==0||i==-1) {t1=t1+(NumberType)swap->link->info-'0';swap=swap->link;}
   }
   swap=temp;
   if(isPoint_included(temp)){   /*include point */
    while(swap->link->info!='.'){swap=swap->link;i++;}
    swap=temp;
    while(swap->link->info!='.'&&--i!=0){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*10;
     t2=t2+m;
     swap=swap->link;
    }
    if(i==0) {t2=t2+(NumberType)swap->link->info-'0'; swap=swap->link->link;}
    i=1;
    while(swap->link->info!='_'){
     j=i;
     m=(NumberType)swap->link->info-'0';
     while(j--!=0) m=m*1/10;
     t2=t2+m;
     swap=swap->link;
     i++;
    }
   }
   else if(!isPoint_included(temp)){
    while(swap->link->info!='_'){swap=swap->link;i++;}
          swap=temp;
   while(swap->link->info!='_'&&--i>0) {
      j=i;
      m=(NumberType)swap->link->info-'0';
      while(j--!=0) m=m*10;
             t2=t2+m;
            swap=swap->link;
    }
    if(i==0||i==-1) {t2=t2+(NumberType)swap->link->info-'0';swap=swap->link;}
   }
    /*calculate tmark2*/
   if(p->link->info=='+') tmark2=t1+t2;
   else if(p->link->info=='-') tmark2=t1-t2;
   else if(p->link->info=='*') tmark2=t1*t2;
   else if(p->link->info=='/') tmark2=t2/t1;
   p=p->link;
    /*calculate t*/
   if(p->link->info=='+') t=tmark1+tmark2;
   else if(p->link->info=='-') t=tmark1-tmark2;
   else if(p->link->info=='*') t=tmark1*tmark2;
   else if(p->link->info=='/') t=tmark1/tmark2;
   /*dealt with the left*/
   p=p->link;
   q=ID;
  }
 }
 printf("The result is %f\n",t);
 return(t);
}

void main()
{
 char s[100];
 int i;
 PLinkList pllist;
 PLinkStack plstack;
 pllist=Create_LinkListPointer();
 plstack=Create_LinkStackPointer();
 Create_LinkList(pllist);
 Create_LinkStack(plstack);
 printf("Input the operator:\n");
 scanf("%s",&s);
 for(i=0;i<strlen(s);i++){
 if(!isOperator(s[i])) push_LinkList(pllist,s[i]);
 else if(isOperator(s[i]) && plstack->top==plstack->base) {
      if(!isOperator(pllist->top->info)) push_underline(pllist);
      push_stack(plstack,s[i]);
  }
  else {
   if(s[i]=='(') push_stack(plstack,s[i]);
   else if(plstack->top->info=='('){
       push_underline(pllist);
       push_stack(plstack,s[i]);
   }
   /*//////////////////////////////////////////////////////////////////////////////////*/
   else if((s[i]=='+' || s[i]=='-') && (plstack->top->info=='*' || plstack->top->info=='/') && bracket_included(plstack)){
 if(!isOperator(pllist->top->info)) push_underline(pllist);
 pop_stack_until_bracket(pllist,plstack);
 push_stack(plstack,s[i]);
   }
   else if((s[i]=='+' || s[i]=='-') && (plstack->top->info=='*' || plstack->top->info=='/') && !bracket_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_all(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   /*////////////////////////////////////////////////////////////////////////////////////////////////////*/
   else if((s[i]=='*' || s[i]=='/')&&(plstack->top->info=='+'|| plstack->top->info=='-')){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    push_stack(plstack,s[i]);
   }
   /*////////////////////////////////////////////////////////////////////////////////////////////////////*/
   else if((s[i]=='+' && plstack->top->info=='+') || (s[i]=='-' && plstack->top->info=='-')){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    push_stack(plstack,s[i]);
   }
   /*///////////////////////////////////////////////////////////////////////////////////*/
   else if(((s[i]=='+' && plstack->top->info=='-') || (s[i]=='-' && plstack->top->info=='+')) && bracket_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_stack_until_bracket(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='+' && plstack->top->info=='-') || (s[i]=='-' && plstack->top->info=='+')) && !bracket_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_all(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='+' && plstack->top->info=='+') || (s[i]=='-' && plstack->top->info=='-')) && bracket_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_stack_until_bracket(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='+' && plstack->top->info=='+') || (s[i]=='-' && plstack->top->info=='-')) && !bracket_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_all(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   /*///////////////////////////////////////////////////////////////////////////////*/
   else if(((s[i]=='*'&& plstack->top->info=='/')||(s[i]=='/'&& plstack->top->info=='*'))&&bracket_included(plstack)&&bracket_included_and_lower(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_stack_until_bracket_lower(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='*' && plstack->top->info=='/') || (s[i]=='/' && plstack->top->info=='*')) && bracket_included(plstack) && !bracket_included_and_lower(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_stack_until_bracket(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='*' && plstack->top->info =='/') ||(s[i]=='/' && plstack->top->info=='*')) && !bracket_included(plstack) && islower_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_until_lower(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='*' && plstack->top->info=='/') ||(s[i]=='/' && plstack->top->info=='*')) && !bracket_included(plstack) && !islower_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_all(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='*'&& plstack->top->info=='*')||(s[i]=='/'&& plstack->top->info=='/'))&&bracket_included(plstack)&&bracket_included_and_lower(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_stack_until_bracket_lower(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='*' && plstack->top->info=='*') || (s[i]=='/' && plstack->top->info=='/'))&& bracket_included(plstack) && !bracket_included_and_lower(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_stack_until_bracket(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='*' && plstack->top->info =='*') ||(s[i]=='/' && plstack->top->info=='/'))&& !bracket_included(plstack) && islower_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_until_lower(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   else if(((s[i]=='*' && plstack->top->info=='*') ||(s[i]=='/' && plstack->top->info=='/'))&& !bracket_included(plstack) && !islower_included(plstack)){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_all(pllist,plstack);
    push_stack(plstack,s[i]);
   }
   /*////////////////////////////////////////////////////////////////////////////////////*/
   else if(s[i]==')'){
    if(!isOperator(pllist->top->info)) push_underline(pllist);
    pop_stack_until_bracket(pllist,plstack);
    pop_one(plstack);
   }
  }
 }
 pop_all(pllist,plstack);
 print_llist(pllist);
 Calculator(pllist);
 getch();
}

⌨️ 快捷键说明

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