C语言编程计算器设计PPT,C语言计算器的编写课程设计.doc

#includedouble jisuan(char a[])

{

int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;

char nibo[50],zhan2[50]; double x,n,l,z=0,zhan3[50];

typedef struct {

double d1;

int d2;

}dd;

typedef struct

{

dd data[50];

int top;

}zhan1;

zhan1 *shu; shu=(zhan1 *)malloc(sizeof(zhan1));

shu->top=0;

while(a[i]!='\0')

{

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

z=0;

j=i+1;

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

{j++;}

j--;

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

{

z=z*10+a[k]-'0';

}

j=j+1;

x=z;

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

{

l=1;

i=j+1;

j=i+1;

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

{j++;}

j--;

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

{

n=pow(0.1,l);

l=l+1;

x=x+n*(a[k]-'0');

}

i=j+1;

}

else i=j;

shu->data[++shu->top].d1=x;

shu->data[shu->top].d2=++cnt;

nibo[++t1]='0'+shu->data[shu->top].d2;

nibo[t1+1]='\0';

}

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

{

zhan2[++t2]=a[i];

i++;

}

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

{

j=t2;

while(zhan2[j]!='(')

{

nibo[++t1]=zhan2[j];

nibo[t1+1]='\0';

j--;

}

t2=j-1;

i++;

}

else if(a[i]=='+') {

while(t2>0&&zhan2[t2]!='(')

{

nibo[++t1]=zhan2[t2];

nibo[t1+1]='\0';

t2--;

}

zhan2[++t2]=a[i];

i++;

}

else if(a[i]=='-')

{

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

{

a[0]='0';

i=0;

}

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

{

a[i-1]='0';

a[i-2]='(';

i=i-2;

t2--;

}

else

{

while(t2>0&&zhan2[t2]!='(') {

nibo[++t1]=zhan2[t2];

nibo[t1+1]='\0';

t2--;

}

zhan2[++t2]=a[i];

i++;

}

}

else if(a[i]=='*'||a[i]=='/') {

while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='#') {

nibo[++t1]=zhan2[t2];

nibo[t1+1]='\0';

t2--;

}

zhan2[++t2]=a[i];

i++;

}

else if(a[i]=='^'||a[i]=='#') {

while(zhan2[t2]=='^'||zhan2[t2]=='#')

{

nibo[++t1]=zhan2[t2];

nibo[t1+1]='\0';

t2--;

}

zhan2[++t2]=a[i];

i++;

}

}

while(t2>0)

{

nibo[++t1]=zhan2[t2]; nibo[t1+1]='\0'; t2--;

}

j=1;t3=0;

while(j<=t1)

{

if(nibo[j]>='0'&&nibo[j]!='^'&&nibo[j]!='#')

{

for(i=1;i<=shu->top;i++)

{

if((int)(nibo[j]-'0')==shu->data[i].d2)

{

m=i;

break;

}

}

zhan3[++t3]=shu->data[m].d1;

}

else if(nibo[j]=='+') {

zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];

t3--;

}

else if(nibo[j]=='-') {

zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];

t3--;

}

else if(nibo[j]=='*')

{

zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];

t3--;

}

else if(nibo[j]=='/')

{

zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];

t3--;

}

else if(nibo[j]=='^')

{

zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);

t3--;

}

else if(nibo[j]=='#')

{

zhan3[t3]=sqrt(zhan3[t3]);

}

j++;

}

return zhan3[t3];

}

void main()

{

for(;;)

{

char x,a[50];

double jieguo;

int i=0;

a[0]='$';

printf("功能:实现+,-,*,\,^(乘方),#(开方),(,),(负数),小数,混合运算\n"); printf("请输入表达式\n\n");

scanf("%c",&x);

if(x=='q') break;

while(x!='\n')

{

a[++i]=x;

scanf("%c",&x);

}

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

jieguo=jisuan(a);

printf("\n");

printf("结果为:%lf",jieguo);

printf("\n\n\n");

}

}

第 15 页 共 15 页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值