久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5559|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

C語言 用數(shù)組實現(xiàn)了計算器的加減乘除運(yùn)算并且已經(jīng)成功支持小數(shù)點

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:379586 發(fā)表于 2018-7-26 19:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#define N   100
#define L   100
//可加減乘除的計算器
  void Make_Calculate(void)
{
  float  str[N]={ 2,3,'+',5,7, '+',20,'/',4,'/',5,'+',11,'*',80,'*',40,'/',13,'-',20,'/',2,'*',2,'/',6,'+',5,'='}; //將要運(yùn)算的東西放入數(shù)組
  float  str1[L];
  u16 i,j,k=0;
  float a=1,b=1;

  for(i=0;i<N;i++)
  {
          
                   j++;
     if(str[i]=='+'  )
     {

         switch(j-1)
         {
                 
                 case 1: str1[k]=str[i-1]; k++; str1[k]='+'; k++;  break;
                 case 2: str1[k]=str[i-2]*10+str[i-1]; k++;  str1[k]='+'; k++;  break;
             case 3: str1[k]=str[i-3]*100+str[i-2]*10+str[i-1]; k++;  str1[k]='+'; k++; break;
             case 4: str1[k]=str[i-4]*1000+str[i-3]*100+str[i-2]*10+str[i-1]; k++; str1[k]='+'; k++; break;
         }
       j=0;         

         }
         else  if(str[i]=='-')
     {

         switch(j-1)
         {
                 case 1: str1[k]=str[i-1]; k++; str1[k]='-'; k++;  break;
                 case 2: str1[k]=str[i-2]*10+str[i-1]; k++;  str1[k]='-'; k++;   break;
             case 3: str1[k]=str[i-3]*100+str[i-2]*10+str[i-1]; k++;  str1[k]='-'; k++; break;
             case 4: str1[k]=str[i-4]*1000+str[i-3]*100+str[i-2]*10+str[i-1]; k++; str1[k]='-'; k++; break;
         }
       j=0;         

         }
          else  if(str[i]=='*')
     {

         switch(j-1)
         {
                 case 1: str1[k]=str[i-1]; k++; str1[k]='*'; k++;  break;
                 case 2: str1[k]=str[i-2]*10+str[i-1]; k++;  str1[k]='*'; k++;   break;
             case 3: str1[k]=str[i-3]*100+str[i-2]*10+str[i-1]; k++;  str1[k]='*'; k++; break;
             case 4: str1[k]=str[i-4]*1000+str[i-3]*100+str[i-2]*10+str[i-1]; k++; str1[k]='*'; k++; break;
         }
       j=0;         

         }
        else if(str[i]=='/')
     {

         switch(j-1)
         {
                 case 1: str1[k]=str[i-1]; k++; str1[k]='/'; k++;  break;
                 case 2: str1[k]=str[i-2]*10+str[i-1]; k++;  str1[k]='/'; k++; break;
             case 3: str1[k]=str[i-3]*100+str[i-2]*10+str[i-1]; k++;  str1[k]='/'; k++; break;
             case 4: str1[k]=str[i-4]*1000+str[i-3]*100+str[i-2]*10+str[i-1]; k++; str1[k]='/'; k++; break;
         }
       j=0;         

         }
         
         
         
        else  if(str[i]=='=')
                 {           
  //   printf("%d",j);
         switch(j-1)
         {
                 case 1: str1[k]=str[i-1]; k++; str1[k]='=';     break;
                 case 2: str1[k]=str[i-2]*10+str[i-1]; k++;  str1[k]='=';  break;
             case 3: str1[k]=str[i-3]*100+str[i-2]*10+str[i-1]; k++;  str1[k]='=';  break;
             case 4: str1[k]=str[i-4]*1000+str[i-3]*100+str[i-2]*10+str[i-1]; k++; str1[k]='=';  break;
         }
       j=0;         

                 }
          

  }

//以下內(nèi)容是將數(shù)組str1 里面的乘法和除法運(yùn)算的數(shù)消掉全部變成只帶加減運(yùn)算符的數(shù)
  j=0;k=0;
  for(i=0;i<N;i++)
  str[i]=0;          //清空數(shù)組重復(fù)利用

  for(i=0;i<N;i++)
  {
     if( str1[i]=='+' || str1[i]=='-' )
         {
            str[j]=str1[i-1];
                j++;
            str[j]=str1[i];
                j++;
         }
    else  if(str1[i]=='*')
    {
        if( (i-2>0) && str1[i-2]=='/' ) a=b/str1[i-1]; //前一個數(shù)必須是存在的且是除法運(yùn)算符         目的是將乘號前面的除法運(yùn)算符的結(jié)果算出來
                                                   //應(yīng)為連續(xù)的除法運(yùn)算并沒有放入數(shù)組而是存入變量b               
        else     a =str1[i-1]*a;                        //不然就連續(xù)將帶乘法運(yùn)算符的數(shù)算成一個數(shù)
            if( str1[i+2]=='+' || str1[i+2]=='-' )
                {  
                        a =str1[i+1]*a;      //將加號之前的乘法運(yùn)算結(jié)合
                    str[j]=a;           //將乘積放入數(shù)組
                    j++;
                        str[j]=str1[i+2];  //將加或減法運(yùn)算符放入數(shù)組
            j++;
            i=i+2;
            a=1;b=1;k=0;                        //說明除法運(yùn)算已到盡頭記得將除積和乘積清掉       
                }

            else if( str1[i+2]=='=' ) //如果連乘碰到‘=’運(yùn)算符就說明運(yùn)算篩選結(jié)束了
                {
                    a =str1[i+1]*a;      //將加號之前的乘法運(yùn)算結(jié)合
                    str[j]=a;  
                    j++;
                        str[j]=str1[i+2];                               
            break;               
               
                }
                               
        }

        else  if(str1[i]=='/')
    {
                if( (i-2>0) && str1[i-2]=='*' ) b=a*str1[i-1];
            else  if(k==1)   b /=str1[i-1];  
            else  if(k==0)  {b =str1[i-1]; k=1;}  
               
                if( str1[i+2]=='+' || str1[i+2]=='-' )
                {  
                        b /=str1[i+1];      //將加號之前的除法運(yùn)算結(jié)合
                    str[j]=b;
                    j++;
                        str[j]=str1[i+2];
            j++;
            i=i+2;
            b=1;a=1;k=0;                  //說明除法運(yùn)算已到盡頭記得將除積和乘積清掉               
                }

            else if( str1[i+2]=='=' )
                {
                    b /=str1[i+1];      //將加號之前的除法運(yùn)算結(jié)合
                    str[j]=b;  
                    j++;
                        str[j]=str1[i+2];               
            break;               
               
                }
                               
        }
          else  if(str1[i]=='=')  //如果連除碰到‘=’運(yùn)算符就說明運(yùn)算篩選結(jié)束了
      {
                 str[j]=str1[i-1];
                j++;
            str[j]=str1[i];
            break;
          
          
          }

  }
/******************當(dāng)不確定時可以看看自己的數(shù)對不對*******************/
//    printf("**********\n");   
//    printf("%5.2f\n",str[0]);
//    printf("%5.2f\n",str[2]);   
//    printf("%5.2f\n",str[4]);
//    printf("%5.2f\n",str[6]);
//    printf("%5.2f\n",str[8]);
  /*********************/
  //將數(shù)組剩下的數(shù)進(jìn)行加減運(yùn)算  
    a=0;
  for(i=0;i<N;i++)
  {
    if( str[i]=='+' )  
    {
        if( i-2<0 )   a= str[i-1]+str[i+1];      
        else          a +=str[i+1];
        }
       
       
        else if( str[i]=='-' )
        {       
     if( i-2<0 )   a= str[i-1]-str[i+1];
         else          a -=str[i+1];
        }
       
        else if( str[i]=='=' )
        {
           printf("%5.2f\n",a); //輸出結(jié)果
           break;
        }


  }

  for(i=0;i<N;i++)
  str[i]=0;          //清空數(shù)組重復(fù)利用

}


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91久久精品视频 | 日本不卡在线视频 | 97碰碰碰 | 国产精品亚洲精品日韩已方 | 精品欧美一区二区三区久久久小说 | 九九综合九九 | 激情欧美一区二区三区中文字幕 | 天天夜夜操 | 精品真实国产乱文在线 | 日本不卡免费新一二三区 | 一区二区三区在线观看视频 | 操人视频在线观看 | 综合色播 | 国产性网 | 久久久久国产精品一区二区 | 国产精品久久国产精品 | 福利av在线 | 日韩免费在线观看视频 | 国产成人网 | 国产免费一区二区三区最新6 | 天天操综合网站 | 欧美一级特黄aaa大片在线观看 | 颜色网站在线观看 | 久久国产精品视频 | 性欧美精品一区二区三区在线播放 | 中文在线一区二区 | 断背山在线观看 | 久草免费在线视频 | 国产一区二区免费电影 | 在线视频h | 国产精品99久久久久久宅男 | 91精品欧美久久久久久久 | 国产成人久久精品一区二区三区 | h视频在线观看免费 | 日韩视频免费看 | 亚洲第1页 | 琪琪午夜伦伦电影福利片 | 美女久久久久久久久 | 欧美在线视频不卡 | 欧美精品一区二区三区在线 | 风间由美一区二区三区在线观看 |