永发信息网

我计算器怎么了?求解,怎么调回去?

答案:3  悬赏:50  手机版
解决时间 2021-03-24 23:12
  • 提问者网友:献世佛
  • 2021-03-23 22:17




最佳答案
  • 五星知识达人网友:怀裏藏嬌
  • 2021-03-23 23:30
扣掉电池试试。。。
全部回答
  • 1楼网友:神也偏爱
  • 2021-03-24 00:45
中毒了,拔电子
  • 2楼网友:酒醒三更
  • 2021-03-24 00:07

这项工程量有些大了。。

给你一个科学计算器的代码吧。自己修改应该不是难事。

#include<stdio.h> #include<math.h> #include<malloc.h> double 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("请输入表达式,退出请输入q:\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\n\n"); } }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯