⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithm.c

📁 用GTK实现的一个简单的计算器程序
💻 C
字号:
  #include   "stdlib.h"    #include   "stdio.h"    #include   "string.h"      /*计算表达式,返回计算结果*/    double   bc(char   *in,char   *ERR)        //in;         /*输入值,算术表达式*/   //ERR;       /*返回信息,计算正确=空;若有错误=具体错误消息*/        {            char   *s,t[256],cp[256],ep[256],e;            int   i,j,k,p,q,c,xs,err;            double   np[256],a,w,f;            err=0;*ERR='\0';            strcpy(t,in);s=t;            i=0;while((e=*(s+i++))!='\0')if(e=='('   &&   *(s+i)=='-')*(s+i)=':';            c=0;i=q=0;np[1]=0.0;            cp[0]='@';                 /*置栈底标志@*/            /*====扫描表达式,压入栈中====*/            while(err==0   &&   *s!='\0'){                if(*s=='-'   &&   (q==0   ||   *(s-1)=='('))*s=':';                e=*(s+1);                switch(*s){                    case   '(':                        if((e<'0'||e>':')   &&   e!='-'   &&   e!='(')err=1;                        else   cp[++c]=*s;                        break;                    case   ')':                        if(e!='+'&&e!='-'&&e!='*'&&e!='/'&&e!=')'&&e!='\0')err=1;                        else   {                            while(cp[c]!='(')ep[i++]=cp[c--];                            c--;                            if(c<0)err=1;                            };                        break;                    case   '+':case   '-':                        if((e<'0'||e>':')   &&   e!='(')err=1;                        else   {                            while((e=cp[c])=='+'||e=='-'||e=='*'||e=='/')ep[i++]=cp[c--];                            cp[++c]=*s;                            };                        break;                    case   '*':case   '/':                        if((e<'0'||e>':')   &&   e!='(')err=1;                        else   {                            while((e=cp[c])=='*'   ||   e=='/')ep[i++]=cp[c--];                            cp[++c]=*s;                            };                        break;                    case   '^':                        if((e<'0'||e>':')   &&   e!='(')err=1;                        else   {                            while(cp[c]=='^')ep[i++]=cp[c--];                            cp[++c]=*s;                            };                        break;                    case   '.':                        if((e<'0'||e>':')&&e!='+'&&e!='-'&&e!='*'&&e!='/'&&                            e!='^'&&e!=')'&&e!='%'&&e!='\0')err=1;                        else   {                            ep[i++]=*s;                            if(e<'0'||e>':')ep[i++]='#';                            };                        break;                    case   '%':     /*===百分号===*/                        if(e!='+'&&e!='-'&&e!='*'&&e!='/'&&e!='^'&&e!=')'&&e!='\0')err=1;                        else   {                            ep[i++]=*s;                            ep[i++]='#';                            };                        break;                    case   '0':case   '1':case   '2':case   '3':                    case   '4':case   '5':case   '6':case   '7':   case   '8':case   '9':   case   ':':                                 /*===数字符号===*/                        if((e<'0'||e>':')   &&   e!='+'&&e!='-'&&e!='*'&&e!='/'&&                            e!='^'&&e!=')'&&e!='%'&&e!='.'&&e!='\0')err=1;                        else   {                            ep[i++]=*s;                            if((e<'0'||e>':')   &&   e!='%'   &&   e!='.')ep[i++]='#';                            };                        break;                    default:                                                         /*===非数字符号===*/                        err=1;                    };                s++;q++;                };            if(err==1){sprintf(ERR,"表达式错误!");return 0;};            if(ep[i-1]!='#')ep[i++]='#';     /*==置数据项结束标志#====*/            /*====出栈,计算值====*/            while(cp[c]!='@')ep[i++]=cp[c--];            ep[i]='\0';            i=j=0;f=1.0;            while((e=ep[i++])!='\0'){                switch(e){                    case   '0':case   '1':case   '2':case   '3':                    case   '4':case   '5':case   '6':case   '7':                    case   '8':case   '9':case   '.':case   '%':case   ':':                        a=0.0;xs=0;w=1.0;                        if(e==':'){f=(-1.0);e=ep[i++];};                        while(e!='#'){                            switch(e){                                case   '.':   xs=1;break;                                case   '%':   a/=100;e='#';break;                                case   ':':   break;                                default:     if(xs==0)a*=10;else   w/=10;                                    a+=(e-'0')*w;                                };                            e=ep[i++];                            };                        np[++j]=a*f;f=1.0;                        break;                    case   '+':np[--j]+=np[j+1];break;                    case   '-':np[--j]-=np[j+1];break;                    case   '*':np[--j]*=np[j+1];break;                    case   '/':                        if(np[j]==0.0){sprintf(ERR,"除数不能为0!");return 0;};                        np[--j]/=np[j+1];break;                    case   '^':                                                         /*只能是整数次乘方*/                        k=(int   )np[j--];                        a=np[j];np[j]=1.0;                        if(k>0)for(p=0;p<k;p++)np[j]*=a;                        else   if(k<0)for(p=0;p>k;p--)np[j]/=a;                        break;                    };                };            return(np[1]);            }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -