【自制有优先运算规则的简易计算器】(还在更新中)

 只在C-Free上运行过,其它的一概不知道。

#include "stdio.h"
#include "math.h" 
#include "iostream"
main()
{
	system("time/T");
	printf("欢迎使用计算器,本计算器可识别运算法的优先级,暂时只能识别+-*/^=这6种算法,后续算法还在更新中\n");
		while(1){
	char a[1000];
    static double shu[100];
	static int fa[100],youxianji[100];
int i=0,sw=0,fw=0,zhuangtai=0,xsw=1,cd=0,shuchu=0,max=0,maxwei=0;
double s=0;
	gets(a);
	while(a[i]!='\0')
	i++;
	cd=i;
	i=0;
	while(i<=cd){
    	switch(a[i]){
 		 case'0':if(zhuangtai==1){xsw++;}else s=s*10;break;
 		 case'1':if(zhuangtai==1){s=s+pow(10,-xsw);xsw++;}else s=s*10+1;break;
 		 case'2':if(zhuangtai==1){s=s+2*pow(10,-xsw);xsw++;}else s=s*10+2;break;
 		 case'3':if(zhuangtai==1){s=s+3*pow(10,-xsw);xsw++;}else s=s*10+3;break;
 		 case'4':if(zhuangtai==1){s=s+4*pow(10,-xsw);xsw++;}else s=s*10+4;break;
 		 case'5':if(zhuangtai==1){s=s+5*pow(10,-xsw);xsw++;}else s=s*10+5;break;
 		 case'6':if(zhuangtai==1){s=s+6*pow(10,-xsw);xsw++;}else s=s*10+6;break;
 		 case'7':if(zhuangtai==1){s=s+7*pow(10,-xsw);xsw++;}else s=s*10+7;break;
 		 case'8':if(zhuangtai==1){s=s+8*pow(10,-xsw);xsw++;}else s=s*10+8;break;
 		 case'9':if(zhuangtai==1){s=s+9*pow(10,-xsw);xsw++;}else s=s*10+9;break;
 		 case'.':zhuangtai=1;break;
 		 case'+':shu[sw]=s;fa[fw]=1;youxianji[fw]=1;zhuangtai=0;xsw=1;sw++;fw++;s=0;break;
 		 case'-':shu[sw]=s;fa[fw]=2;youxianji[fw]=1;zhuangtai=0;xsw=1;sw++;fw++;s=0;break;
 		 case'*':shu[sw]=s;fa[fw]=3;youxianji[fw]=2;zhuangtai=0;xsw=1;sw++;fw++;s=0;break;
 		 case'/':shu[sw]=s;fa[fw]=4;youxianji[fw]=2;zhuangtai=0;xsw=1;sw++;fw++;s=0;break;
 		 case'^':shu[sw]=s;fa[fw]=5;youxianji[fw]=3;zhuangtai=0;xsw=1;sw++;fw++;s=0;break;
 		 case'(':shu[sw]=s;fa[fw]=6;youxianji[fw]=5;zhuangtai=0;xsw=1;sw++;fw++;s=0;break;
 		 case')':shu[sw]=s;fa[fw]=7;youxianji[fw]=4;zhuangtai=0;xsw=1;sw++;fw++;s=0;break;
 		 case'=':shu[sw]=s;fa[fw]=0;youxianji[fw]=0;zhuangtai=0;xsw=1;sw=0;fw=0;s=0;break;
 		 case'\0':break;
 		 default:printf("请勿输入笨程序无法解读的字符!\n");shuchu=1;
    	}
    	i++;
	 }	
	
while(shuchu==0)
	 {
	 	max=0,maxwei=0;
 		for(fw=0;fw<=cd;fw++)
 		{
		 	if (youxianji[fw]>=max)
		{
		max = youxianji[fw];
		maxwei=fw;
		}
 		}
 		
        sw=maxwei;
        fw=maxwei;
       
         if(fa[maxwei]==0){printf("%f\n",shu[0]);shuchu=1;}
          if(fa[maxwei]==4&&shu[sw+1]==0){printf("WANGNING!:/0\n");shuchu=1;}
	 if(fa[maxwei]==1){shu[sw]=shu[sw]+shu[sw+1];for(fw=maxwei;fw<cd;fw++){shu[fw+1]=shu[fw+2];fa[fw]=fa[fw+1];youxianji[fw]=youxianji[fw+1];}}
	  if(fa[maxwei]==2){shu[sw]=shu[sw]-shu[sw+1];for(fw=maxwei;fw<cd;fw++){shu[fw+1]=shu[fw+2];fa[fw]=fa[fw+1];youxianji[fw]=youxianji[fw+1];}}
	  if(fa[maxwei]==3){shu[sw]=shu[sw]*shu[sw+1];for(fw=maxwei;fw<cd;fw++){shu[fw+1]=shu[fw+2];fa[fw]=fa[fw+1];youxianji[fw]=youxianji[fw+1];}} 
  	  if(fa[maxwei]==4&&shu[sw+1]!=0){shu[sw]=shu[sw]/shu[sw+1];for(fw=maxwei;fw<cd;fw++){shu[fw+1]=shu[fw+2];fa[fw]=fa[fw+1];youxianji[fw]=youxianji[fw+1];}}
	  if(fa[maxwei]==5){shu[sw]=pow(shu[sw],shu[sw+1]);for(fw=maxwei;fw<cd;fw++){shu[fw+1]=shu[fw+2];fa[fw]=fa[fw+1];youxianji[fw]=youxianji[fw+1];}}
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值