calculator.docx

上传人:b****5 文档编号:6274177 上传时间:2023-01-05 格式:DOCX 页数:15 大小:17.28KB
下载 相关 举报
calculator.docx_第1页
第1页 / 共15页
calculator.docx_第2页
第2页 / 共15页
calculator.docx_第3页
第3页 / 共15页
calculator.docx_第4页
第4页 / 共15页
calculator.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

calculator.docx

《calculator.docx》由会员分享,可在线阅读,更多相关《calculator.docx(15页珍藏版)》请在冰豆网上搜索。

calculator.docx

calculator

#include

#include

#include

#include

#include

#include

#definePI3.14159265358

doublerun(chara[])

{

inti=1,j,p=0,m=0,n=0,t,y,k,ka=0,kuo=0;

longjie;

charfu[50],xu[50],q;

doublec[50],shu,mm[80];

while(a[i]!

='\0')

{

if(a[i]<='9'&&a[i]>='0')//将字符串转换为数字

{

j=i;

shu=0;

while(a[i]<='9'&&a[i]>='0')

{

shu=a[i]+10*shu-'0';

i++;

}

if(a[i]=='.')

{

i++;

k=1;

while(a[i]<='9'&&a[i]>='0')

{

shu=(a[i]-'0')*pow(0.1,k)+shu;

k=k+1;

i++;

}

}

c[++p]=shu;//p代表参数的个数

xu[++m]='0'+p;//xu代表排序字符串,调制

xu[m+1]='\0';

if(a[j-1]=='@'||a[j-1]=='s'||a[j-1]=='t'||a[j-1]=='c')//单左运算符

{

while(a[j-1]=='@'||a[j-1]=='s'||a[j-1]=='t'||a[j-1]=='c')

{

xu[++m]=a[j-1];

xu[m+1]='\0';

j--;

}

}

}

elseif(a[i]=='(')

{

fu[++n]=a[i];//fu代表符号字符串

j=i;

i++;

if(a[j-1]=='@'||a[j-1]=='s'||a[j-1]=='t'||a[j-1]=='c')//单左运算符

{

while(a[j-1]=='@'||a[j-1]=='s'||a[j-1]=='t'||a[j-1]=='c')

{

fu[++n]=a[j-1];

j--;

}

}

t=n;

while(fu[t]=='@'||fu[t]=='s'||fu[t]=='t'||fu[t]=='c'||fu[t]=='(')//单左运算符前置

{

if(fu[t]=='@'||fu[t]=='s'||fu[t]=='t'||fu[t]=='c')

ka=t;

elseif(fu[t]=='(')

kuo=t;

if(ka!

=0&&kuo!

=0)

{

if(ka>kuo)

{

q=fu[ka];

fu[ka]=fu[kuo];

fu[kuo]=q;

}

}

t--;

}

}

elseif(a[i]==')')

{

t=n;

while(fu[t]!

='(')

{

xu[++m]=fu[t];

xu[m+1]='\0';

t--;

}

while(fu[t]!

='(')

{

while(fu[t]=='@'||fu[t]=='s'||fu[t]=='t'||fu[t]=='c')

{

xu[++m]=fu[t];

xu[m+1]='\0';

}

t--;

}

n=t-1;//在左括号前面一位,让后面的运算覆盖左括号

i++;

}

elseif(a[i]=='+')//遇到+,把前面的(前一个符号入xu,此+入fu覆盖上一个符号

{

while(fu[n]!

='('&&n)

{

xu[++m]=fu[n];

xu[m+1]='\0';

n--;

}

fu[++n]=a[i];

i++;

}

elseif(a[i]=='-')

{

if(a[i-1]=='$')

{

a[0]='0';

i=0;//从a[0]开始计算

}

elseif(a[i-1]=='(')

{

a[i-1]='0';

a[i-2]='(';

i-=2;

}

else

{

while(fu[n]!

='('&&n)

{

xu[++m]=fu[n];

xu[m+1]='\0';

n--;

}

fu[++n]=a[i];

i++;

}

}

elseif(a[i]=='*'||a[i]=='/')

{

while(fu[n]=='*'||fu[n]=='/'||fu[n]=='^'||fu[n]=='@'||fu[n]=='#'||fu[n]=='s'||fu[n]=='t'||fu[n]=='c')//优先级大于a[i]

{

xu[++m]=fu[n];

xu[m+1]='\0';

n--;

}

fu[++n]=a[i];

i++;

}

elseif(a[i]=='^'||a[i]=='#')

{

while(fu[n]=='^'||fu[n]=='#'||fu[n]=='@'||fu[n]=='s'||fu[n]=='t'||fu[n]=='c')

{

xu[++m]=fu[n];

xu[m+1]='\0';

n--;

}

fu[++n]=a[i];

i++;

}

elseif(a[i]=='@'||a[i]=='s'||a[i]=='t'||a[i]=='c')

i++;

elseif(a[i]=='!

')

{

xu[++m]=a[i];

xu[m+1]='\0';

i++;

}

}

while(fu[n]>0)//优先级最低的符号

{

xu[++m]=fu[n];

xu[m+1]='\0';

n--;

}

p=0;

for(m=1;xu[m]!

='\0';m++)//解调

{

if(xu[m]<='9'&&xu[m]>='0')

{

y=xu[m]-'0';

mm[++p]=c[y];

}

elseif(xu[m]=='+')

{

mm[p-1]=mm[p-1]+mm[p];

p--;

}

elseif(xu[m]=='-')

{

mm[p-1]=mm[p-1]-mm[p];

p--;

}

elseif(xu[m]=='*')

{

mm[p-1]=mm[p-1]*mm[p];

p--;

}

elseif(xu[m]=='/')

{

mm[p-1]=mm[p-1]/mm[p];

p--;

}

elseif(xu[m]=='^')

{

mm[p-1]=pow(mm[p-1],mm[p]);

p--;

}

elseif(xu[m]=='@')

{

mm[p]=sqrt(mm[p]);

}

elseif(xu[m]=='#')

{

mm[p-1]=pow(mm[p-1],1/mm[p]);

p--;

}

elseif(xu[m]=='s')

{

mm[p]=sin(mm[p]*PI/180);

}

elseif(xu[m]=='t')

{

mm[p]=tan(mm[p]*PI/180);

}

elseif(xu[m]=='c')

{

mm[p]=cos(mm[p]*PI/180);

}

elseif(xu[m]=='!

')

{

if(mm[p]!

=0)

{

jie=(long)mm[p];

while(--jie)

mm[p]*=jie;

}

else

mm[p]=1;

}

}

returnmm[1];

}

charinput(char*a)

{

charx;

inti=0,j,m=0,n=0,t;

a[0]='$';

x=getch();

while(x!

='=')

{

if('n'==x)

{

system("cls");

system("color84");

printf("\n\n********************************谢谢使用,再见!

********************************\n\n");

exit(0);

}

if((x<='9'&&x>='0')||x=='+'||x=='-'||x=='*'||x=='/'||x=='('||x==')'||x=='.'||x=='^'||x=='@'||x=='#'||x==8||x=='m'||x=='s'||x=='t'||x=='c'||x=='!

')

{

if(((a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='^'||a[i]=='@'||a[i]=='s'||a[i]=='t'||a[i]=='c')&&x!

='+'&&x!

='-'&&x!

='*'&&x!

='/'&&x!

='.'&&x!

='^'&&x!

='!

')//符号后不能接

||((a[i]=='/')&&x!

='+'&&x!

='-'&&x!

='*'&&x!

='/'&&x!

='.'&&x!

='^'&&x!

='0'&&x!

='!

')//除号后不能接

||(a[i]>='0'&&a[i]<='9'&&x!

='('&&x!

='@'&&x!

='s'&&x!

='t'&&x!

='c')//数字后不能接

||(a[i]=='$'&&x!

='+'&&x!

='*'&&x!

='/'&&x!

=')'&&x!

='.'&&x!

=8&&x!

='^'&&x!

='#'&&x!

='!

')//第一位不能是

||(a[i]==')'&&(x=='+'||x=='-'||x=='*'||x=='/'||x==8||x=='m'||x=='^'||x=='#'||x==')'))//右括号后只能接

||(a[i]=='('&&x!

='+'&&x!

='*'&&x!

='/'&&x!

='.'&&x!

=')'&&x!

='^'&&x!

='#'&&x!

='!

')//左括号后不能接

||(a[i]=='.'&&((x>='0'&&x<='9')||x==8||x=='m'))//小数点后只能接

||((a[i]=='^'||a[i]=='#')&&x!

='+'&&x!

='-'&&x!

='*'&&x!

='/'&&x!

=')'&&x!

='.'&&x!

='!

')//平方后不能接

||((a[i]=='@'||a[i]=='s'||a[i]=='t'||a[i]=='c')&&x!

='+'&&x!

='-'&&x!

='*'&&x!

='/'&&x!

=')'&&x!

='.'&&x!

='^'&&x!

='#'&&x!

='!

')//开方、三角函数后不能接

||(a[i]=='!

'&&(x=='+'||x=='-'||x=='*'||x=='/'||x==8||x=='m'||x=='!

')))//阶乘后只能接

{

if(x==')')//括号要左右相等

{

j=i;

while(a[j]!

='$')

{

if(a[j]=='(')

m++;

if(a[j]==')')

n++;

j--;

}

if((n-m)<0&&m!

=0)

{

m=n=0;

a[++i]=x;

putchar(a[i]);

}

}

elseif(x=='.')//一个数只有一个小数点

{

j=i;

while(a[j]!

='+'&&a[j]!

='-'&&a[j]!

='*'&&a[j]!

='/'&&a[j]!

='('&&a[j]!

='$'&&a[j]!

='@'&&a[j]!

='#'&&a[j]!

='^'&&a[j]!

='s'&&a[j]!

='t'&&a[j]!

='c'&&a[j]!

='!

')

{

if(a[j]=='.')

m++;

j--;

}

if(m==0&&a[j]!

='!

')

{

j=i;

while(a[j]>='0'&&a[j]<='9')

{

j--;

}

if(i-j<=15)

{

a[++i]=x;

putchar(a[i]);

}

}

}

elseif(x==8)//删除键

{

//printf("\b");

i--;

system("cls");

printf("***********************************计算器***************************************\n");

printf("************************本软件由紫阳真人制作,版权所有!

************************\n");

printf("*声明:

本程序支持九个运算数、共十六位数、六位小数的实型数的加+、减-、乘*、除/、**\n");

printf("*******乘方^、开方#、开二次方@、括号()、正弦s、余弦c、正切t、阶乘!

的运算*******\n");

printf("********请输入正确的表达式,并以“=”结束,例如“t45-(@(1+3)^3)#3/2!

=”*********\n");

printf("***********************清零请输入“m”,退出请输入“n”*************************\n");

for(j=1;j<=i;j++)

{

putchar(a[j]);

}

}

elseif(x=='m')//清零键

{

system("cls");

printf("***********************************计算器***************************************\n");

printf("************************本软件由紫阳真人制作,版权所有!

************************\n");

printf("*声明:

本程序支持九个运算数、共十六位数、六位小数的实型数的加+、减-、乘*、除/、**\n");

printf("*******乘方^、开方#、开二次方@、括号()、正弦s、余弦c、正切t、阶乘!

的运算*******\n");

printf("********请输入正确的表达式,并以“=”结束,例如“t45-(@(1+3)^3)#3/2!

=”*********\n");

printf("***********************清零请输入“m”,退出请输入“n”*************************\n");

i=0;

}

elseif(x>='0'&&x<='9')//对数字的位数进行限制

{

j=i;

while(a[j]>='0'&&a[j]<='9')

{

j--;

}

t=j;

if(a[j]=='.')

{

while(a[j-1]>='0'&&a[j-1]<='9')

{

j--;

}

if((i-t<=5)&&(i-j<=15))

{

a[++i]=x;

putchar(a[i]);

}

}

elseif(i-j<=15)

{

a[++i]=x;

putchar(a[i]);

}

}

else

{

a[++i]=x;

putchar(a[i]);

}

}

}

x=getch();

}

if(a[i]=='$'&&x=='=')

{

a[1]='0';

i++;

}

a[i+1]='\0';

return(*a);

}

intmain()

{

chara[50];

doubleresult;

system("color3e");

printf("***********************************计算器***************************************\n");

printf("************************本软件由紫阳真人制作,版权所有!

************************\n");

printf("*声明:

本程序支持九个运算数、共十六位数、六位小数的实型数的加+、减-、乘*、除/、**\n");

printf("*******乘方^、开方#、开二次方@、括号()、正弦s、余弦c、正切t、阶乘!

的运算*******\n");

printf("********请输入正确的表达式,并以“=”结束,例如“t45-(@(1+3)^3)#3/2!

=”*********\n");

printf("***********************清零请输入“m”,退出请输入“n”*************************\n");

while

(1)

{

input(a);

result=run(a);

printf("=%lf\n",result);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1