c语言计算器代码可以算括号,可编程简易计算器(代码)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

while(sign[0]!='a'){

//if(input[index]){

for(int i=0;i<4;i++)

{

if(firsttime ==1)i=3;

//提取第i+1个数字

dexto=1;

char num_str[INPUT_LEN]={'+'};

while(input[index])

{

if(isdigit(input[index]))

num_str[dexto++]=input[index++];

else

if((input[index]=='+'||input[index]=='-')&&dexto==1)

num_str[dexto-1]=input[index++];

else if(dexto>1)break;

else index++;

}

if(input[index]=='.')

if(isdigit(input[index+1]))

{

num_str[dexto++]=input[index++];

while(input[index])

if(isdigit(input[index]))num_str[dexto++]=input[index++];

else break;

}

num[i]=atof(num_str);

if(input[index]=='\0')

{

for(;i<4;i++)sign[i]='a';

break;

}

//提取第i+1个符号

while(input[index])

{

switch(input[index])

{

case'+':case'-':case'*':case'/':case'%':case'^':

sign[i]=input[index++];

goto outofwhile;

break;

default:

index++;

continue;

}

}

outofwhile:;

}//提取数字符号结束

firsttime =1;

//}//判断结束结束

//将数字进行计算

if(sign[0]=='+'||sign[0]=='-')

{//如果s0是加减则:

if(sign[1]=='+'||sign[1]=='-'||sign[1]=='a')

{

//如果s0,s1都一级

num[0]=singlecalculate(num[0],sign[0],num[1]);

num[1]=num[2];

num[2]=num[3];

sign[0]=sign[1];

sign[1]=sign[2];

sign[2]=sign[3];

}

else

{

if(sign[1]=='^')

{

//如果s0一级s1是^则

num[1]=singlecalculate(num[1],sign[1],num[2]);

num[2]=num[3];

sign[1]=sign[2];

sign[2]=sign[3];

}else if(sign[2]=='^')

{

//如果s2是^且s1为二级

num[2]=singlecalculate(num[2],sign[2],num[3]);

sign[2]=sign[3];

}else

{

//如果s2为二级或1级则

num[1]=singlecalculate(num[1],sign[1],num[2]);

num[2]=num[3];

sign[1]=sign[2];

sign[2]=sign[3];

}

}

}else

{

//如果s0不是加法则

if(sign[1]=='^'&&sign[0]!='^')

{

//如果s1是^则

num[1]=singlecalculate(num[1],sign[1],num[2]);

num[2]=num[3];

sign[1]=sign[2];

sign[2]=sign[3];

}else

{

//如果s0是二级或以上s1是二级或以下则:

num[0]=singlecalculate(num[0],sign[0],num[1]);

num[1]=num[2];

num[2]=num[3];

sign[0]=sign[1];

sign[1]=sign[2];

sign[2]=sign[3];

}

}

//num[0]=singlecalculate(num[0],sign[0],num[1]);

/*printf("1:%lf\n",num[0]);

printf("2:%lf\n",num[1]);

printf("3:%lf\n",num[2]);

printf("4:%lf\n",num[3]);

printf("s1:%c\n",sign[0]);

printf("s2:%c\n",sign[1]);

printf("s3:%c\n",sign[2]);

printf("s4:%c\n",sign[3]);*/

}//大循环结束

return num[0];

}

double singlecalculate(double num1,char sign,double num2)

{

switch(sign)

{

case'+':

num1+=num2;

break;

case'-':

num1-=num2;

break;

case'*':

num1*=num2;

break;

case'/':

num2==0?printf("式子包含有除数为0,请检查\a"):num1/=num2;

break;

case'%':

num2==0?printf("式子包含有除数为0,请检查\a"):num1=(int)num1%(int)num2;

break;

case'^':

num1=pow(num1,num2);

break;

}

return num1;

}

程序我自己测试,没发现什么问�

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值