Avaliação estrita da esquerda para a direita de uma expressão aritmética

1. Um pouco de bobagem:

Este código deve ser o único caminho para muitos iniciantes em programação. emm~
pode entender o uso de muitas funções comuns e também pode perceber que o pensamento lógico se reflete um pouco na programação. É um bom ponto de partida para o aprendizado de programação.
Este programa percebe que as expressões aritméticas são lidas e as operações podem ser executadas da esquerda para a direita para pular espaços.
Por exemplo, 2 * 3 +7*5 obtém o resultado 65.

2. Sobre o código

(1) Regras de nomenclatura de variáveis

Eu não gosto de apenas um i, j, k para terminar o trabalho.Cada variável tem seu próprio significado, então uma melhor nomeação de variáveis ​​também é útil para melhorar a legibilidade do código.

char expression[100];                       //储存算式
int temp=0;                                 //遍历算式的每个字符
char op;                                    //储存运算符
int pre_num=expression[0]-'0',next_num=0;   //用来计算
int result=0;                               //最终结果

(2) Destaques no código

Eu sou mais narcisista então encontrei dois

①A mágica da função scanf()

Isso evita que ocorrências de espaço em branco na string interfiram na leitura da string inteira

scanf("%[^\n]",expression);//直到读到换行符才停止

② Uso hábil de aninhamento if ()

Essa é a personificação do chamado pensamento lógico, e o aninhamento pode reduzir até certo ponto a complexidade do código.

(3) O código completo está aqui!

#include<stdio.h>
#include <string.h>
int operation(char expression[]);
int main()
{
    
    
char expression[100];                                             //store the expression
printf("Please Enter an expression\n"); 
scanf("%[^\n]",expression); 
operation(expression);                            
      
return 0;
}


int operation(char expression[])
{
    
         
   int temp=0;                                                    //to traverse expression
   char op;                     
   int pre_num=expression[0]-'0',next_num=0;                      //Type conversion
   int result=0;
   while(expression[temp] != '\0')
   {
    
    

      char flag=expression[temp];                                 
      if(flag!=' ')
      {
    
    
         if(flag=='+'||flag=='-'||flag=='*'||flag=='/')
         {
    
    
            op=flag;
            temp++;            
         }

         else
            {
    
    
               next_num=flag-'0';                                      //Type conversion
               temp++;
               switch(op)
                  {
    
    
                     case'+':pre_num=pre_num+next_num;                 
                     break;
                     case'-':pre_num=pre_num-next_num;                
                     break;
                     case'*':pre_num=pre_num*next_num;                    
                     break;
                     case'/':pre_num=pre_num/next_num;                    
                     break;
                     default:break;                                    //if there is no operator
                  }
               
            }
      }      
      else                                                             //space appeared
      {
    
    
         temp++;
      } 
  }
   result=pre_num ; 
   printf("  result:%d\n",result );                                
   return result;
}

おすすめ

転載: blog.csdn.net/weixin_43349916/article/details/104577691
おすすめ