#include <stdio.h>
#include <string.h>
#include <stdlib.h>
double x;
int i;
//==============================
//功能:计算
//作者:史继炜
//时间:2019/3/28
void js(double y,char p)
{
switch (p) {
case '+':x=x+y;break;
case '-':x=x-y;break;
case '*':x=x*y;break;
case '/':x=x/y;break;
}
}
//===============================
//功能:判断是否为数字,若是返回1,否则返回0.
//作者:史继炜
//时间:2019/3/28
int ismun(char a)
{
if(a>='0'&&a<='9')
return 1;
return 0;
#
}
//==============================
//功能:判断是否为运算符,若是返回1,否则返回0.
//作者:史继炜
//时间:2019/3/28
int isop(char a)
{
if(a=='+'||a=='-'||a=='/'||a=='*')
return 1;
return 0;
}
//=========================================================================
//功能:判断合法性,若合法返回1,否则返回0.
//作者:史继炜
//时间:2019/3/28
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;
}
return 0;
}
//=================================================
int main()
{
char a[41];
double s[41];//存浮点数
int p[41];//存运算符所在下标
int m=0,n=0;
while(1)
{
gets(a);
if(check(a)==1)
break;
printf("重输");
}
//=========================================================
for(i=0;a[i]!='\0';i++)//将字符串中所有运算符的下标存入p[]
{
if(isop(a[i]))
{
p[n]=i;
n++;
}
}
p[n]='\0';
//===============================================================
x=atof(a);
n=0;
for(p[n];p[n]!='\0';n++)//根据运算符下标,用atof()将浮点数存入s[]
{
s[m]=atof(&a[p[n]+1]);
m++;
}
s[m]='\0';
//================================================
n=0;
for(m=0;s[m]!='\0';m++)
{
js(s[m],a[p[n]]);
n++;
}
printf("%.2lf\n",x);
}
计算器版本三
猜你喜欢
转载自blog.csdn.net/weixin_44366851/article/details/88887478
今日推荐
周排行