计算器版本四,普通版

#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