四则运算计算器

/* 这是我做的计算器
涵数,computer()
作者QQ:328266362
*/
#include
#include
#include
double add(double cd[],char cf[],int cn);
main()
{
char cmp[255];
double total;
char x;
int n=0;
printf("input to compuer:");
gets(cmp);
if (computer(cmp,&total))
printf("the resust=%f",total);
else
printf("input error!");
getch();
}

computer(char cmp[],double *total)
{
charcf[100];
double cd[100];
int cn,i;
cn=readcmp(cmp,cd,cf);
if (cn>0)
{
*total=add(cd,cf,cn);
return 1;

}
else
return 0;
}
//----内部过程------------------------
readcmp(char cmp[],double cd[],char cf[])
{
/*读取字符=>X
是加减乘除吗?
是的
将数字字符转成数字->存入cd[]
数组序列号+1
数字串清空
将符号存入cf[]
否是0,1,2,3,4,5,6,7,8,9,吗?

空格标志是2.
是 非法返回
否 加入数字串

否是空格吗?
是 .数字串是空的吗?
是 空格标志为2
否 空格标志为1

非法字符,返回.


*/
char strdigit[100],x;
int digitn=0,i,cn=0,spaceflag=0,diaoflag=0;
cf[0]='+';
for (i=0; cmp[i]!='/0'; i++)
{
x=cmp[i];
if (x=='+'||x=='-'||x=='*'||x=='/')
{
if (digitn==0)
{
if (x=='-' && cn==0)
{
strdigit[digitn]=x;
strdigit[digitn+1]='/0';
digitn++;
}
else
return 0;
}

else
{
cd[cn]=atof(strdigit);
cn++;
digitn=0;
spaceflag=0;
diaoflag=0;
cf[cn]=x;
}
}
else if (x>='0' && x<='9')
{
if (spaceflag==2)
{
return 0;
}
else
{
strdigit[digitn]=x;
strdigit[digitn+1]='/0';
digitn++;

}
}
else if (x=='.')
{
if (diaoflag==1)
return 0;
else
{
diaoflag=1;
strdigit[digitn]=x;
strdigit[digitn+1]='/0';
digitn++;
}
}
else if (x==' ')
{
if (digitn>0)
spaceflag=2;
else
spaceflag=1;
}
else
return 0;
}


if (digitn>0)
{
cd[cn]=atof(strdigit);
cn++;
return cn;
}
}

double add(double cd[],char cf[],int cn)//cd[]存放数字组,cf[]存放操作数,cn为操作符数
{
double total; //存放结果
int i; //循环变量
//分类数字->数字数组和操作符->操作符数组

for(i=1; iif (cf[i]=='*' || cf[i]=='/') //分析操作符是否是乘或除?
{
//是的话
if (cf[i]=='*')//分析是乘的话
cd[i]=cd[i-1]*cd[i]; //当前数=上一个数*当前数
else
cd[i]=cd[i-1]/cd[i]; //否则 //当前数=上一个数/当前数

cf[i]=cf[i-1]; //->当前操作为上一操作符
cd[i-1]=0; //上一个的数字为零
}

total=0; //总数=第一个数,
for(i=0; i{
if (cf[i]=='+')// 分析操作数是否是'+'
total=total+cd[i]; //是 //总数=总数+当前数
else
total=total-cd[i]; //否 //总数=总数-当前数
}
return total; //返回总数值.
}
【四则运算计算器】

    推荐阅读