#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int i;
//===========
int ismun(char a)
{
if(a>='0'&&a<='9')
return 1;
return 0;
}
//=======================================
int isop(char a)
{
if(a=='+'||a=='-'||a=='/'||a=='*')
return 1;
return 0;
}
//========================================
double js(double x, double y, char a)
{
double t;
switch(a)
{
case '+':t=x+y;break;
case '-':t=x-y;break;
case '*':t=x*y;break;
case '/':t=x/y;break;
}
return t;
}
//=======================================
int check(char a[])//合法性
{
if(ismun(a[0])==0||ismun(a[strlen(a)-1])==0)//判断第一个和最后一个是否为数字
return 0;
for(i=0;a[i]!='\0';i++)
{
if((isop(a[i])==1&&isop(a[i+1])==1)||(a[i]=='.'&&isop(a[i+1]))||(isop(a[i])&&a[i+1]=='.'))//判断是否有连续运算符或.+和+.的情况
return 0;
if(isop(a[i])==0&&ismun(a[i])==0&&a[i]!='.')//除开运算符、数字、小数点是否存在其它字符
return 0;
}
int j; //判断是否存在2..2或2.2.222.2.2的情况
for(i=0;a[i]!='\0';i++)
{
if(a[i]=='.')
for(j=i+1;;j++)
{
if(isop(a[j])==1||a[j]=='\0')
break;
if(a[j]=='.')
return 0;
}
}
for(i=0;a[i]!='\0';i++)//是否为纯数字
{
if(isop(a[i])==1)
return 1;
}
for(i=0;a[i]!='\0';i++)//
{
if(a[i]=='\0')
if(atof(&a[i+1])==0)
return 0;
}
return 0;
}
//========================================================
int main()
{
char a[41];
double s[41],y;
char p[41];
int m=0,n=0;
//gets(a);
while (1)
{
scanf("%s",a);
if(check(a)==1)
break;
printf("重输\n");
}
s[0]=atof(a);
m=1;
for(i=0; a[i]!='\0'; i++)
{
if(a[i]=='+'||a[i]=='-')
{
p[n]=a[i];
s[m]=atof(&a[i+1]);
m++;
n++;
continue;
}
if(a[i]=='/'||a[i]=='*')
{
y=atof(&a[i+1]);
s[m-1]=js(s[m-1],y,a[i]);
}
}
double x=s[0];
for(m=1,n=0;s[m]!='\0';m++,n++)
{
x=js(x, s[m], p[n]);
}
printf("%.2f\n",x);
}
计算器版本四,普通版
猜你喜欢
转载自blog.csdn.net/weixin_44366851/article/details/89072614
今日推荐
周排行