慕容翰林吧 关注:7贴子:399

【备份】计算器

只看楼主收藏回复

图形界面


IP属地:浙江1楼2006-06-09 21:07回复
    #include <graphics.h>
    #include <conio.h>
    main()
    { void drawkey(int,int); /*画键声明*/
     /*图形初始化*/
     int driver,mode,x,y,x1,y1;
     driver=VGA;
     mode=VGAHI;
     registerbgidriver(EGAVGA_driver);
     initgraph(&driver,&mode,"c:\\turboc2");
     /*方框填充画计算器外体*/
     x=(getmaxx()/2)-150;
     y=(getmaxy()/2)-120;
     x1=(getmaxx()/2)+150;
     y1=(getmaxy()/2)+120;
     setfillstyle(SOLID_FILL,7);
     bar(x,y,x1,y1);
     /*画标题栏*/
     setfillstyle(SOLID_FILL,1);
     bar(x,y,x1,y+15);
     outtextxy(x+12,y+5,"SB COUNTER");
     setfillstyle(SOLID_FILL,4);
     bar(x1-15,y,x1,y+15);
     setcolor(0);
     line(x1-15,y,x1,y+15);
     line(x1,y,x1-15,y+15);
     /*画输出窗口*/
     setfillstyle(SOLID_FILL,15);
     bar(175,142,425+40,142+20);
     /*画键*/
     settextstyle(2,0,6);
     drawkey(175,200);
     outtextxy(175+17,200+5,"7");
     drawkey(175,240);
     outtextxy(175+17,240+5,"4");
     drawkey(175,280);
     outtextxy(175+17,280+5,"1");
     drawkey(175,320);
     outtextxy(175+17,320+5,"0");
     drawkey(225,200);
     outtextxy(225+17,200+5,"8");
     drawkey(225,240);
     outtextxy(225+17,240+5,"5");
     drawkey(225,280);
     outtextxy(225+17,280+5,"2");
     drawkey(225,320);
     outtextxy(225+17,320+5,".");
     drawkey(275,200);
     outtextxy(275+17,200+5,"9");
     drawkey(275,240);
     outtextxy(275+17,240+5,"6");
     drawkey(275,280);
     outtextxy(275+17,280+5,"3");
     drawkey(275,320);
     outtextxy(275+17,320+5,"=");
     drawkey(325,200);
     outtextxy(325+17,200+5,"+");
     drawkey(325,240);
     outtextxy(325+17,240+5,"-");
     drawkey(325,280);
     outtextxy(325+17,280+5,"*");
     drawkey(325,320);
     outtextxy(325+17,320+5,"/");
     drawkey(375,200);
     outtextxy(375+7,200+5,"+/-");
     drawkey(375,240);
     outtextxy(375+9,240+5,"sin");
     drawkey(375,280);
     outtextxy(375+13,280+5,"ln");
     drawkey(375,320);
     outtextxy(375+3,320+5,"sqrt");
     drawkey(425,200);
     outtextxy(425+17,200+5,"C");
     drawkey(425,240);
     outtextxy(425+9,240+5,"cos");
     drawkey(425,280);
     outtextxy(425+14,280+5,"lg");
     drawkey(425,320);
     outtextxy(425+7,320+5,"pow");
     bar(175,190-20,275+40,190);
     outtextxy(175+20,190-20,"space-key");
     bar(325,190-20,425+40,190);
     outtextxy(325+30,190-20,"backspace");

    }
    void drawkey(int x,int y) /*画键函数*/
    { int x1,y1;
     x1=x+40;
     y1=y+30;
     setfillstyle(SOLID_FILL,12);
     bar(x,y,x1,y1);
    }


    IP属地:浙江2楼2006-06-09 21:09
    回复
      鼠标


      IP属地:浙江3楼2006-06-09 21:10
      回复
        #include <graphics.h>
        #include <bios.h>
        #include <conio.h>
        #include <dos.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <malloc.h>
        #include <string.h>
        int ams,mx,my,keys;
        int A=16,B=16,K=0;
        int *x=&A,*y=&B,*key=&K;
        void getmouse(int *x,int *y,int *key) /*获取鼠标位置和按键*/
        {
         union REGS inregs,outregs;
         inregs.x.ax=3; /*获取鼠标位置和状态也可以用3*/
         int86(0x33,&inregs,&outregs); /*中断调用*/
         *x=outregs.x.cx; /*cx寄存器中存的是横坐标*/
         *y=outregs.x.dx; /*dx寄存器中存的是列坐标*/
         *key=outregs.x.bx; /*bx寄存器是按键状态*/
        }

        void drawmouse(int A,int B)/*画鼠标*/
        {
        setcolor(15);
        line(A+2,B+3,A+2,B+14);
        line(A+3,B+4,A+3,B+13);
        line(A+4,B+5,A+4,B+12);
        line(A+5,B+6,A+5,B+14);
        line(A+6,B+7,A+6,B+16);
        line(A+7,B+8,A+7,B+18);
        line(A+8,B+9,A+8,B+18);
        line(A+9,B+10,A+9,B+17);
        setcolor(0);
        line(A,B,A,B+18);
        line(A+1,B,A+1,B+17);
        line(A,B,A+12,B+12);
        line(A+1,B,A+13,B+12);
        line(A,B+18,A+4,B+14);
        line(A,B+17,A+4,B+13);
        line(A+4,B+14,A+6,B+20);
        line(A+4,B+13,A+6,B+19);
        line(A+6,B+20,A+10,B+18);
        line(A+6,B+19,A+10,B+17);
        line(A+10,B+18,A+8,B+12);
        line(A+10,B+17,A+8,B+11);
        line(A+8,B+12,A+12,B+12);
        line(A+8,B+11,A+12,B+11);
        }

        void showmouse() /*中断显示鼠标*/
        {
         union REGS inregs,outregs;
         inregs.x.ax=0x01; /*显示鼠标*/
         int86(0x33,&inregs,&outregs);
        }

        int mouse(int *mx,int *my,int *key,int n) /*画鼠标是利用将一个空矩形存入内存中,然后再在该空矩形中画鼠标形状*/
        {
         int a=0,b=0,c=n,a_old=0,b_old=0; /*a,b的值可以随便*/
         int *ball; /*定义指向内存的存储图形的指针*/
         ball=malloc(imagesize(a,b,a+15,b+25)); /*返回矩形的大小*/
         getimage(a,b,a+15,b+25,ball); /*第一次将图形(一个空矩形)存入到内存中,内存中存入的是一个空矩形*/


         while(c==n) /*直到按键后才返回,不按键一直循环*/
         {
         if(kbhit())
        {
         putimage(a,b,ball,0);
         free(ball);
         return getch();
        }
         getmouse(&a,&b,&c); /*a,为横坐标,b,为列坐标,c为按键状态*/
         if(a<0) a=0; /*保证鼠标左边不出界*/
         if(b<0) b=0; /*保证上面不出界*/
         if(a>getmaxx()-15) a=getmaxx()-15; /*保证右边不出界*/
         if(b>getmaxy()-25) b=getmaxy()-25; /*保证下边不出界*/
         if(a!=a_old || b!=b_old) /*当鼠标移动时*/
         {
         putimage(a_old,b_old,ball,0); /*在a_old,b_old输出图形,用来擦掉原来的鼠标*/
         getimage(a,b,a+15,b+25,ball); /*这条语句是将目前鼠标所在位置的图形存贮到ball里面试着看着有无这条语句的区别*/
         /*不需要在获取了*/
         drawmouse(a,b);
         /*画鼠标*/
         }
         a_old=a;b_old=b;
         } /*while()结束*/
         *mx=a;*my=b;*key=c; /*返回按键后鼠标的位置*/
         putimage(a,b,ball,0); /*将鼠标擦掉,因为存在ball里面的是一个背景为缺省状态下的一个空矩形*/
         free(ball);
         return -1;
        }

        main()
        {
         int mode=VGAHI,devices=VGA;
         initgraph(&devices,&mode,"C:\\turboc2");/*图型模式初始化*/

         begin:
         showmouse();
         ams=mouse(&mx,&my,&keys,0);
        }


        IP属地:浙江5楼2006-06-09 21:10
        回复
          计算方式:逆波


          IP属地:浙江6楼2006-06-09 21:11
          回复
            #include <stdio.h>
            #include <math.h>
            #include <ctype.h>
            #define MAX 100
            #define NUMBER '0'
            #define SIZE 100
            char buf[SIZE];
            int p=0;

            void main()
            {
             int get(char s[]);
             void push(double);
             double pop();
             int getch();
             int sign;
             double t;
             char s[MAX];
             while ((sign=get(s))!=EOF) /*输入"ctrl+z"程序结束*/ 
             {
             switch (sign) 
             {
             case NUMBER:
             push(atof(s));
             break;
             case '+':
             push(pop()+pop());
             break;
             case '*':
             push(pop()*pop());
             break;
             case '-':
             t=pop();
             push(pop()-t);
             break;
             case '/':
             t=pop();
             if(t!=0.0)
             push(pop()/t);
             else
             printf("error:zero divisor\n");
             break;
             case 'f':
             push(-atof(s));
             break;
             case 'S':
             t=pop();
             if(t>=0)
             push(sqrt(t));
             else
             printf("error!");
             break;
             case 'P':
             t=pop();
             push(pow(pop(),t));
             break;
             case 's':
             t=pop();
             push(sin(t));
             break;
             case 'c':
             t=pop();
             push(cos(t));
             break;
             case 'L':
             t=pop();
             if(t>0)
             push(log10(t));
             else
             printf("error!");
             break;
             case 'l':
             t=pop();
             if(t>0)
             push(log10(t));
             else
             printf("error!");
             push(log(t));
             break;
             case '\n': /*回车表示此次运算结束*/
             printf("\t%.8g\n",pop());
             break;

             default:
             printf("error:unknown command %s\n",s);
             break;
             }
             }
            }

            int get(char s[]) /*获取运算分量*/
            {
             int i,c;
             s[0]=c=getch();
             while (c==' '||c=='\t')
             s[0]=c=getch();
             if(!isdigit©&&c!='.'&&c!='f')
             return c;
             i=0;
             if(c=='f') /*对负数进行判断,f表示负数*/
             {
             while (isdigit(s[i]=c=getch()))
             i++;
             if (c=='.')
             while (isdigit(s[i]=c=getch()))
             i++;
             s[i]='\0';
             return 'f';
             }
             if(isdigit©) /*对后面的字符进行判断,是数字则存入数组*/
             while (isdigit(s[i+1]=c=getch()))
             i++;
             if (c=='.') /*将小数点后的数字存入数组*/
             while (isdigit(s[i+1]=c=getch()))
             i++;
             s[i+1]='\0';
             return NUMBER;
            }

            int getch() /*读入字符*/
            {
             return(p>0)?buf[--p]:getchar();
            }

            #define MAX1 100
            int m=0;
            double val[MAX1];

            void push(double f) /*入栈操作*/
            {
             if (m<MAX1)
             val[m++]=f;
             else
             printf("error:strack full,can't push %g\n",f);
            }

            double pop() /*出栈操作*/
            {
             if (m>0)
             return val[--m];
             else 
             {
             printf("error:stack empty\n");
             return 0;
             }
            }


            IP属地:浙江7楼2006-06-09 21:12
            回复
              • 58.19.19.*
              #include <stdio.h>
              #include <math.h>
              #include <ctype.h>
              #include <graphics.h>
              #include <conio.h>
              #include <dos.h>
              #include <stdio.h>
              #include <stdlib.h>
              #include <malloc.h>
              #define DELAYTIME 1000000
              #define NUMDIS 8
              #define MAX 100
              #define NUMBER '0'
              int flag=0;
              char fun[MAX];
              int ams,mx,my,keys;
              int A=16,B=16,K=0;
              int *x=&A,*y=&B,*key=&K;
              char value;
              void getmouse(int *x,int *y,int *key) /*获取鼠标位置和按键*/
              {
               union REGS inregs,outregs;
               inregs.x.ax=3; /*获取鼠标位置和状态也可以用3*/
               int86(0x33,&inregs,&outregs); /*中断调用*/
               *x=outregs.x.cx; /*cx寄存器中存的是横坐标*/
               *y=outregs.x.dx; /*dx寄存器中存的是列坐标*/
               *key=outregs.x.bx; /*bx寄存器是按键状态*/
              }

              void drawmouse(int A,int B)/*画鼠标*/
              {
              setcolor(15);
              line(A+2,B+3,A+2,B+14);
              line(A+3,B+4,A+3,B+13);
              line(A+4,B+5,A+4,B+12);
              line(A+5,B+6,A+5,B+14);
              line(A+6,B+7,A+6,B+16);
              line(A+7,B+8,A+7,B+18);
              line(A+8,B+9,A+8,B+18);
              line(A+9,B+10,A+9,B+17);
              setcolor(0);
              line(A,B,A,B+18);
              line(A+1,B,A+1,B+17);
              line(A,B,A+12,B+12);
              line(A+1,B,A+13,B+12);
              line(A,B+18,A+4,B+14);
              line(A,B+17,A+4,B+13);
              line(A+4,B+14,A+6,B+20);
              line(A+4,B+13,A+6,B+19);
              line(A+6,B+20,A+10,B+18);
              line(A+6,B+19,A+10,B+17);
              line(A+10,B+18,A+8,B+12);
              line(A+10,B+17,A+8,B+11);
              line(A+8,B+12,A+12,B+12);
              line(A+8,B+11,A+12,B+11);
              }

              void showmouse() /*中断显示鼠标*/
              {
               union REGS inregs,outregs;
               inregs.x.ax=0x01; /*显示鼠标*/
               int86(0x33,&inregs,&outregs);
              }

              int mouse(int *mx,int *my,int *key,int n) /*画鼠标是利用将一个空矩形存入内存中,然后再在该空矩形中画鼠标形状*/
              {
               int a=0,b=0,c=n,a_old=0,b_old=0; /*a,b的值可以随便*/
               int *ball; /*定义指向内存的存储图形的指针*/
               ball=malloc(imagesize(a,b,a+15,b+25)); /*返回矩形的大小*/
               getimage(a,b,a+15,b+25,ball); /*第一次将图形(一个空矩形)存入到内存中,内存中存入的是一个空矩形*/


               while(c==n) /*直到按键后才返回,不按键一直循环*/
               {
               if(kbhit())
              {
               putimage(a,b,ball,0);
               free(ball);
               return getch();
              }
               getmouse(&a,&b,&c); /*a,为横坐标,b,为列坐标,c为按键状态*/
               if(a<0) a=0; /*保证鼠标左边不出界*/
               if(b<0) b=0; /*保证上面不出界*/
               if(a>getmaxx()-15) a=getmaxx()-15; /*保证右边不出界*/
               if(b>getmaxy()-25) b=getmaxy()-25; /*保证下边不出界*/
               if(a!=a_old || b!=b_old) /*当鼠标移动时*/
               {
               putimage(a_old,b_old,ball,0); /*在a_old,b_old输出图形,用来擦掉原来的鼠标*/
               getimage(a,b,a+15,b+25,ball); /*这条语句是将目前鼠标所在位置的图形存贮到ball里面试着看着有无这条语句的区别*/
               /*不需要在获取了*/
               drawmouse(a,b);
               /*画鼠标*/
               }
               a_old=a;b_old=b;
               } /*while()结束*/
               *mx=a;*my=b;*key=c; /*返回按键后鼠标的位置*/
               putimage(a,b,ball,0); /*将鼠标擦掉,因为存在ball里面的是一个背景为缺省状态下的一个空矩形*/
               free(ball);
               return -1;
              }
              void face()
              { void drawkey(int,int); /*画键声明*/
               /*图形初始化*/
               int driver,mode,x,y,x1,y1;
               driver=VGA;
               mode=VGAHI;
               registerbgidriver(EGAVGA_driver);
               initgraph(&driver,&mode,"c:\\turboc2");
               /*方框填充画计算器外体*/
               x=(getmaxx()/2)-150;
               y=(getmaxy()/2)-120;
               x1=(getmaxx()/2)+150;
               y1=(getmaxy()/2)+120;
               setfillstyle(SOLID_FILL,7);
               bar(x,y,x1,y1);
              


              8楼2006-06-12 13:01
              回复
                • 58.19.19.*
                 /*画标题栏*/
                 setfillstyle(SOLID_FILL,9);
                 bar(x,y,x1,y+15);
                 outtextxy(x+12,y+5,"C-718 COUNTER");
                 setfillstyle(SOLID_FILL,15);
                 bar(x1-15,y,x1,y+15);
                 setcolor(0);
                 line(x1-15,y,x1,y+15);
                 line(x1,y,x1-15,y+15);
                 /*画输出窗口*/
                 setfillstyle(SOLID_FILL,0);
                 bar(175-1,142-1,425+41,142+21);
                 setfillstyle(SOLID_FILL,15);
                 bar(175,142,425+40,142+20); /*算式输出窗口*/
                 outtextxy(320,190-20+10,"Result:");
                 setfillstyle(SOLID_FILL,0);
                 bar(375,190-20,425+40,190+1); /*结果输出窗口*/
                 /*画键*/
                 settextstyle(2,0,6);
                 drawkey(175,200);
                 outtextxy(175+17,200+5,"7");
                 drawkey(175,240);
                 outtextxy(175+17,240+5,"4");
                 drawkey(175,280);
                 outtextxy(175+17,280+5,"1");
                 drawkey(175,320);
                 outtextxy(175+17,320+5,"0");
                 drawkey(225,200);
                 outtextxy(225+17,200+5,"8");
                 drawkey(225,240);
                 outtextxy(225+17,240+5,"5");
                 drawkey(225,280);
                 outtextxy(225+17,280+5,"2");
                 drawkey(225,320);
                 outtextxy(225+17,320+5,".");
                 drawkey(275,200);
                 outtextxy(275+17,200+5,"9");
                 drawkey(275,240);
                 outtextxy(275+17,240+5,"6");
                 drawkey(275,280);
                 outtextxy(275+17,280+5,"3");
                 drawkey(275,320);
                 outtextxy(275+17,320+5,"=");
                 drawkey(325,200);
                 outtextxy(325+17,200+5,"+");
                 drawkey(325,240);
                 outtextxy(325+17,240+5,"-");
                 drawkey(325,280);
                 outtextxy(325+17,280+5,"*");
                 drawkey(325,320);
                 outtextxy(325+17,320+5,"/");
                 drawkey(375,200);
                 outtextxy(375+7,200+5,"+/-");
                 drawkey(375,240);
                 outtextxy(375+9,240+5,"sin");
                 drawkey(375,280);
                 outtextxy(375+13,280+5,"ln");
                 drawkey(375,320);
                 outtextxy(375+3,320+5,"sqrt");
                 drawkey(425,200);
                 outtextxy(425+17,200+5,"C");
                 drawkey(425,240);
                 outtextxy(425+9,240+5,"cos");
                 drawkey(425,280);
                 outtextxy(425+14,280+5,"lg");
                 drawkey(425,320);
                 outtextxy(425+7,320+5,"pow");
                 setfillstyle(SOLID_FILL,9);
                 bar(175,190-20,275+40,190);
                 setcolor(1);
                 line(175,190,275+40,190);
                 line(275+40,190-20,275+40,190);
                 setcolor(15);
                 line(175,190-20,275+40,190-20);
                 line(175,190-20,175,190);
                 outtextxy(175+20,190-20,"space-key");

                }

                /*画键函数*/
                void drawkey(int x,int y)
                { int x1,y1;
                 x1=x+40;
                 y1=y+30;
                 setcolor(15);
                 line(x,y,x1,y);
                 line(x1,y,x1,y1);
                 line(x1,y1,x,y1);
                 line(x,y1,x,y);
                 setfillstyle(1,1);
                 bar(x+1,y+1,x1,y1);
                 setfillstyle(1,9);
                 bar(x+1,y+1,x1-1,y1-1);
                }

                /*按下的键的函数*/
                void presskey(int x,int y)
                { int x1,y1;
                 x1=x+40;
                 y1=y+30;
                 setfillstyle(1,9);
                 bar(x+1,y+1,x1-1,y1-1);
                 setcolor(15);
                 line(x1,y,x1,y1);
                 line(x1,y1,x,y1);
                 setcolor(1);
                 line(x,y,x1,y);
                 line(x,y,x,y1);
                }

                /*按下的spacekey键的函数*/
                void presssk()
                {
                 setfillstyle(SOLID_FILL,9);
                 bar(175,190-20,275+40,190);
                 setcolor(15);
                 line(275+40,190,275+40,190-20);
                 line(275+40,190,175,190);
                 setcolor(1);
                 line(175,190-20,175,190);
                 line(175,190-20,275+40,190-20);
                 outtextxy(175+20,190-20,"space-key");
                }

                /*按键与显示的联系*/
                int i=0;
                void dianji()
                {
                 int j=0;
                 do
                {
                 ams=mouse(&mx,&my,&keys,0);
                 if(keys==1)
                 ams=mouse(&mx,&my,&keys,1);

                 if(mx>175&&mx<215&&my>200&&my<230&&keys==0&&ams==-1||ams=='7')
                 {value='7';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                


                9楼2006-06-12 13:01
                回复
                  • 58.19.19.*
                  presskey(175,200);outtextxy(175+17,200+5,"7");
                  delay(DELAYTIME);drawkey(175,200);
                  outtextxy(175+17,200+5,"7");}

                   if(mx>175&&mx<215&&my>280&&my<310&&keys==0&&ams==-1||ams=='1')
                   {value='1';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(175,280);outtextxy(175+17,280+5,"1");
                  delay(DELAYTIME);drawkey(175,280);
                  outtextxy(175+17,280+5,"1");}

                   if(mx>175&&mx<215&&my>320&&my<350&&keys==0&&ams==-1||ams=='0')
                   {value='0';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(175,320);outtextxy(175+17,320+5,"0");
                  delay(DELAYTIME);drawkey(175,320);
                  outtextxy(175+17,320+5,"0");}

                   if(mx>275&&mx<315&&my>240&&my<270&&keys==0&&ams==-1||ams=='6')
                   {value='6';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(275,240);outtextxy(275+17,240+5,"6");
                  delay(DELAYTIME);drawkey(275,240);
                  outtextxy(275+17,240+5,"6");}

                   if(mx>225&&mx<265&&my>200&&my<230&&keys==0&&ams==-1||ams=='8')
                   {value='8';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(225,200);outtextxy(225+17,200+5,"8");
                  delay(DELAYTIME);drawkey(225,200);
                  outtextxy(225+17,200+5,"8");}

                   if(mx>225&&mx<265&&my>240&&my<270&&keys==0&&ams==-1||ams=='5')
                   {value='5';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(225,240);outtextxy(225+17,240+5,"5");
                  delay(DELAYTIME);drawkey(225,240);
                  outtextxy(225+17,240+5,"5");}

                   if(mx>225&&mx<265&&my>280&&my<310&&keys==0&&ams==-1||ams=='2')
                   {value='2';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(225,280);outtextxy(225+17,280+5,"2");
                  delay(DELAYTIME);drawkey(225,280);
                  outtextxy(225+17,280+5,"2");}

                   if(mx>275&&mx<315&&my>200&&my<230&&keys==0&&ams==-1||ams=='9')
                   {value='9';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(275,200);outtextxy(275+17,200+5,"9");
                  delay(DELAYTIME);drawkey(275,200);
                  outtextxy(275+17,200+5,"9");}

                   if(mx>275&&mx<315&&my>280&&my<315&&keys==0&&ams==-1||ams=='3')
                   {value='3';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(275,280);outtextxy(275+17,280+5,"3");
                  delay(DELAYTIME);drawkey(275,280);
                  outtextxy(275+17,280+5,"3");}

                   if(mx>175&&mx<215&&my>240&&my<275&&keys==0&&ams==-1||ams=='4')
                   {value='4';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(175,240);outtextxy(175+17,240+5,"4");
                  delay(DELAYTIME);drawkey(175,240);
                  outtextxy(175+17,240+5,"4");}

                   if(mx>225&&mx<265&&my>320&&my<350&&keys==0&&ams==-1||ams=='.')
                   {value='.';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(225,320);outtextxy(225+17,320+5,".");
                  delay(DELAYTIME);drawkey(225,320);
                  outtextxy(225+17,320+5,".");}

                   if(mx>275&&mx<315&&my>320&&my<350&&keys==0&&ams==-1||ams=='=')
                   {value='=';i=i+NUMDIS;presskey(275,320);outtextxy(275+17,320+5,"=");
                  delay(DELAYTIME);drawkey(275,320);outtextxy(275+17,320+5,"=");}

                   if(mx>325&&mx<365&&my>200&&my<230&&keys==0&&ams==-1||ams=='+')
                   {value='+';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(325,200);outtextxy(325+17,200+5,"+");
                  delay(DELAYTIME);drawkey(325,200);
                  outtextxy(325+17,200+5,"+");}

                   if(mx>325&&mx<365&&my>240&&my<270&&keys==0&&ams==-1||ams=='-')
                   {value='-';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                  presskey(325,240);outtextxy(325+17,240+5,"-");
                  


                  10楼2006-06-12 13:01
                  回复
                    • 58.19.19.*
                    delay(DELAYTIME);drawkey(325,240);
                    outtextxy(325+17,240+5,"-");}

                     if(mx>325&&mx<365&&my>280&&my<310&&keys==0&&ams==-1||ams=='*')
                     {value='*';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                    presskey(325,280);outtextxy(325+17,280+5,"*");
                    delay(DELAYTIME);drawkey(325,280);
                    outtextxy(325+17,280+5,"*");}

                     if(mx>325&&mx<365&&my>320&&my<350&&keys==0&&ams==-1||ams=='/')
                     {value='/';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                    presskey(325,320);outtextxy(325+17,320+5,"/");
                    delay(DELAYTIME);drawkey(325,320);
                    outtextxy(325+17,320+5,"/");}

                     if(mx>375&&mx<415&&my>200&&my<230&&keys==0&&ams==-1||ams=='f')
                     {value='f';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                    presskey(375,200);outtextxy(375+7,200+5,"+/-");
                    delay(DELAYTIME);drawkey(375,200);
                    outtextxy(375+7,200+5,"+/-");}

                     if(mx>375&&mx<415&&my>240&&my<270&&keys==0&&ams==-1||ams=='s')
                     {value='s';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                    presskey(375,240);outtextxy(375+9,240+5,"sin");
                    delay(DELAYTIME);drawkey(375,240);
                    outtextxy(375+9,240+5,"sin");}

                     if(mx>375&&mx<415&&my>280&&my<310&&keys==0&&ams==-1||ams=='l')
                     {value='l';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                    presskey(375,280);outtextxy(375+13,280+5,"ln");
                    delay(DELAYTIME);drawkey(375,280);
                    outtextxy(375+13,280+5,"ln");}

                     if(mx>375&&mx<415&&my>320&&my<350&&keys==0&&ams==-1||ams=='S')
                     {value='S';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                    presskey(375,320);outtextxy(375+3,320+5,"sqrt");
                    delay(DELAYTIME);drawkey(375,320);
                    outtextxy(375+3,320+5,"sqrt");}

                     if(mx>425&&mx<465&&my>200&&my<230&&keys==0&&ams==-1||ams=='C') /*设置清屏*/
                     {value='C';
                     setfillstyle(SOLID_FILL,15);
                     bar(175,142,425+40,142+20);
                     setfillstyle(SOLID_FILL,0);
                     bar(375,190-20,425+40,190+1);
                     i=0;presskey(425,200);outtextxy(425+17,200+5,"C");
                     delay(DELAYTIME);drawkey(425,200);
                     outtextxy(425+17,200+5,"C");
                     }

                     if(mx>425&&mx<465&&my>240&&my<270&&keys==0&&ams==-1||ams=='c')
                     {value='c';i=i+NUMDIS;outtextxy(425+i,240+5,&value);
                    presskey(425,240);outtextxy(425+9,240+5,"cos");
                    delay(DELAYTIME);drawkey(425,240);
                    outtextxy(425+9,240+5,"cos");}

                     if(mx>425&&mx<465&&my>280&&my<310&&keys==0&&ams==-1||ams=='L')
                     {value='L';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                    presskey(425,280);outtextxy(425+14,280+5,"lg");
                    delay(DELAYTIME);drawkey(425,280);
                    outtextxy(425+14,280+5,"lg");}

                     if(mx>425&&mx<465&&my>320&&my<350&&keys==0&&ams==-1||ams=='P')
                     {value='P';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                    presskey(425,320);outtextxy(425+9,320+5,"pow");
                    delay(DELAYTIME);drawkey(425,320);
                    outtextxy(425+9,320+5,"pow");}



                     if(mx>175&&mx<315&&my>170&&my<190&&keys==0&&ams==-1||ams==' ')
                     { value=' ';
                     i=i+NUMDIS;
                     outtextxy(175+i,142+5,&value);
                     presssk();
                     delay(DELAYTIME);
                     setfillstyle(SOLID_FILL,9);
                     bar(175,190-20,275+40,190);
                     setcolor(1);
                     line(175,190,275+40,190);
                     line(275+40,190-20,275+40,190);
                     setcolor(15);
                     line(175,190-20,275+40,190-20);
                     line(175,190-20,175,190);
                     outtextxy(175+20,190-20,"space-key");
                    }

                     if(mx>454&&mx<469&&my>119&&my<134&&keys==0&&ams==-1||ams=='e')
                     {value='e';i=i+NUMDIS;outtextxy(175+i,142+5,&value);}
                    


                    11楼2006-06-12 13:01
                    回复
                      • 58.19.19.*

                       fun[j++]=value;
                       fun[j]='\0';
                      }
                      while(value!='='&&value!='e');
                      }

                      int m=0;
                      double data[MAX];

                      void push(double n) /*入栈操作,将得到的数字压入栈中*/
                      {
                       if(m<MAX)
                       data[m++]=n;
                      }

                      double pop() /*出栈操作*/
                      {
                       if(m>0)
                       return data[--m];
                       else
                       return 0;
                      }

                      int getsign() /*读入字符*/
                      {
                       return fun[flag++];
                      }

                      int judge(char s[]) /*获取运算分量*/
                      {
                       int j,c;
                       s[0]=c=getsign();
                       while(c==' '||c=='\t')
                       s[0]=c=getsign();
                       if(!isdigit©&&c!='.'&&c!='f')
                       return c;
                       j=0;
                       if(c=='f') /*对负数进行判断,f表示负数*/
                       {
                       while(isdigit(s[j]=c=getsign()))
                       j++;
                       if(c=='.')
                       while(isdigit(s[j+1]=c=getsign()))
                       j++;
                       s[j+1]='\0';
                       return 'f';
                       }
                       if(isdigit©) /*对后面的字符进行判断,是数字则存入数组*/
                       while(isdigit(s[j+1]=c=getsign()))
                       j++;
                       if(c=='.') /*将小数点后的数字存入数组*/
                       while(isdigit(s[j+2]=c=getsign()))
                       j++;
                       s[j+2]='\0';
                       return NUMBER;
                      }

                      int res=0;
                      void error()
                      {
                       gotoxy(40+8,20-8);
                       printf("error!");
                       res=1;
                      }

                      void main()
                      {
                       int sign,k;
                       int shu=0;
                       double t;
                       char s[MAX];
                       int mode=VGAHI,devices=VGA;
                       initgraph(&devices,&mode,"C:\\turboc2"); /*图型模式初始化*/
                       face();
                       showmouse();
                       dianji();
                       while((sign=judge(s))!='e'&&value!='e') /*输入"e"程序结束*/
                       {
                       if(fun[flag]=='\0')
                       {flag=0;shu=1;}
                       switch (sign)
                       {
                       case 'C':
                       for(k=0;k<MAX;k++)
                       {m=0;data[k]=0;}
                       break;
                       case NUMBER:
                       push(atof(s));
                       break;
                       case '+':
                       push(pop()+pop());
                       break;
                       case '*':
                       push(pop()*pop());
                       break;
                       case '-':
                       t=pop();
                       push(pop()-t);
                       break;
                       case '/':
                       t=pop();
                       if(t!=0.0)
                       push(pop()/t);
                       else
                       error();
                       break;
                       case 'f':
                       push(-atof(s));
                       break;
                       case 'S':
                       t=pop();
                       if(t>=0)
                       push(sqrt(t));
                       else
                       error();
                       break;
                       case 'P':
                       t=pop();
                       push(pow(pop(),t));
                       break;
                       case 's':
                       t=pop();
                       push(sin(t));
                       break;
                       case 'c':
                       t=pop();
                       push(cos(t));
                       break;
                       case 'L':
                       t=pop();
                       if(t>0)
                       push(log10(t));
                       else
                       error();
                       break;
                       case 'l':
                       t=pop();
                       if(t>0)
                       push(log10(t));
                       else
                       error();
                       break;
                       case '=': /*等号表示此次运算结束*/
                       if(res==0)
                       {
                       gotoxy(40+8,20-8);
                       printf("%.8g\n",pop());
                       }
                       for(k=0;k<MAX;k++)
                       {m=0;data[k]=0;}
                       break;
                       }
                       if(sign=='=')
                       res=0;
                       if(shu==1)
                       dianji();
                       shu=0;
                       }
                      }


                      12楼2006-06-12 13:01
                      回复
                        已经全部完成了,最后修正版留此备份,方便提取


                        IP属地:浙江13楼2006-06-22 00:39
                        回复
                          代码如下


                          IP属地:浙江14楼2006-06-22 00:40
                          回复
                            #include <stdio.h>
                            #include <math.h>
                            #include <ctype.h>
                            #include <graphics.h>
                            #include <conio.h>
                            #include <dos.h>
                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <malloc.h>
                            #define DELAYTIME 10000
                            #define NUMDIS 8
                            #define MAX 100
                            #define NUMBER '0'
                            int flag=0;
                            char fun[MAX];
                            int ams,mx,my,keys;
                            int A=16,B=16,K=0;
                            int *x=&A,*y=&B,*key=&K;
                            char value;
                            void getmouse(int *x,int *y,int *key) /*获取鼠标位置和按键*/
                            {
                             union REGS inregs,outregs;
                             inregs.x.ax=3; /*获取鼠标位置和状态也可以用3*/
                             int86(0x33,&inregs,&outregs); /*中断调用*/
                             *x=outregs.x.cx; /*cx寄存器中存的是横坐标*/
                             *y=outregs.x.dx; /*dx寄存器中存的是列坐标*/
                             *key=outregs.x.bx; /*bx寄存器是按键状态*/
                            }

                            void drawmouse(int A,int B)/*画鼠标*/
                            {
                            setcolor(15);
                            line(A+2,B+3,A+2,B+14);
                            line(A+3,B+4,A+3,B+13);
                            line(A+4,B+5,A+4,B+12);
                            line(A+5,B+6,A+5,B+14);
                            line(A+6,B+7,A+6,B+16);
                            line(A+7,B+8,A+7,B+18);
                            line(A+8,B+9,A+8,B+18);
                            line(A+9,B+10,A+9,B+17);
                            setcolor(0);
                            line(A,B,A,B+18);
                            line(A+1,B,A+1,B+17);
                            line(A,B,A+12,B+12);
                            line(A+1,B,A+13,B+12);
                            line(A,B+18,A+4,B+14);
                            line(A,B+17,A+4,B+13);
                            line(A+4,B+14,A+6,B+20);
                            line(A+4,B+13,A+6,B+19);
                            line(A+6,B+20,A+10,B+18);
                            line(A+6,B+19,A+10,B+17);
                            line(A+10,B+18,A+8,B+12);
                            line(A+10,B+17,A+8,B+11);
                            line(A+8,B+12,A+12,B+12);
                            line(A+8,B+11,A+12,B+11);
                            }

                            void showmouse() /*中断显示鼠标*/
                            {
                             union REGS inregs,outregs;
                             inregs.x.ax=0x01; /*显示鼠标*/
                             int86(0x33,&inregs,&outregs);
                            }

                            int mouse(int *mx,int *my,int *key,int n) /*画鼠标是利用将一个空矩形存入内存中,然后再在该空矩形中画鼠标形状*/
                            {
                             int a=0,b=0,c=n,a_old=0,b_old=0; /*a,b的值可以随便*/
                             int *ball; /*定义指向内存的存储图形的指针*/
                             ball=malloc(imagesize(a,b,a+15,b+25)); /*返回矩形的大小*/
                             getimage(a,b,a+15,b+25,ball); /*第一次将图形(一个空矩形)存入到内存中,内存中存入的是一个空矩形*/


                             while(c==n) /*鼠标与键盘操作的转换*/
                             {
                             if(kbhit())
                            {
                             putimage(a,b,ball,0);
                             free(ball);
                             return getch();
                            }
                             getmouse(&a,&b,&c); /*a,为横坐标,b,为列坐标,c为按键状态*/
                             if(a<0) a=0; /*保证鼠标左边不出界*/
                             if(b<0) b=0; /*保证上面不出界*/
                             if(a>getmaxx()-15) a=getmaxx()-15; /*保证右边不出界*/
                             if(b>getmaxy()-25) b=getmaxy()-25; /*保证下边不出界*/
                             if(a!=a_old || b!=b_old) /*当鼠标移动时*/
                             {
                             putimage(a_old,b_old,ball,0); /*在a_old,b_old输出图形,用来擦掉原来的鼠标*/
                             getimage(a,b,a+15,b+25,ball); /*这条语句是将目前鼠标所在位置的图形存贮到ball里面试着看着有无这条语句的区别*/
                             /*不需要在获取了*/
                             drawmouse(a,b);
                             /*画鼠标*/
                             }
                             a_old=a;b_old=b;
                             } /*while()结束*/
                             *mx=a;*my=b;*key=c; /*返回按键后鼠标的位置*/
                             putimage(a,b,ball,0); /*将鼠标擦掉,因为存在ball里面的是一个背景为缺省状态下的一个空矩形*/
                             free(ball);
                             return -1;
                            }
                            void face()
                            { void drawkey(int,int); /*画键声明*/
                             /*图形初始化*/
                             int driver,mode,x,y,x1,y1;
                             driver=VGA;
                             mode=VGAHI;
                             registerbgidriver(EGAVGA_driver);
                             initgraph(&driver,&mode,"c:\\turboc2");
                             /*方框填充画计算器外体*/
                             x=(getmaxx()/2)-150;
                             y=(getmaxy()/2)-120;
                             x1=(getmaxx()/2)+150;
                             y1=(getmaxy()/2)+120;
                             setfillstyle(SOLID_FILL,7);
                             bar(x,y,x1,y1);
                            


                            IP属地:浙江15楼2006-06-22 00:41
                            回复
                               /*画标题栏*/
                               setfillstyle(SOLID_FILL,9);
                               bar(x,y,x1,y+15);
                               outtextxy(x+12,y+5,"C-718 COUNTER");
                               setfillstyle(SOLID_FILL,15);
                               bar(x1-15,y,x1,y+15);
                               setcolor(0);
                               line(x1-15,y,x1,y+15);
                               line(x1,y,x1-15,y+15);
                               /*画输出窗口*/
                               setfillstyle(SOLID_FILL,0);
                               bar(175-1,142-1,425+41,142+21);
                               setfillstyle(SOLID_FILL,15);
                               bar(175,142,425+40,142+20); /*算式输出窗口*/
                               outtextxy(320,190-20+10,"Result:");
                               setfillstyle(SOLID_FILL,0);
                               bar(375,190-20,425+40,190+1); /*结果输出窗口*/
                               /*画键*/
                               settextstyle(2,0,6);
                               drawkey(175,200);
                               outtextxy(175+17,200+5,"7");
                               drawkey(175,240);
                               outtextxy(175+17,240+5,"4");
                               drawkey(175,280);
                               outtextxy(175+17,280+5,"1");
                               drawkey(175,320);
                               outtextxy(175+17,320+5,"0");
                               drawkey(225,200);
                               outtextxy(225+17,200+5,"8");
                               drawkey(225,240);
                               outtextxy(225+17,240+5,"5");
                               drawkey(225,280);
                               outtextxy(225+17,280+5,"2");
                               drawkey(225,320);
                               outtextxy(225+17,320+5,".");
                               drawkey(275,200);
                               outtextxy(275+17,200+5,"9");
                               drawkey(275,240);
                               outtextxy(275+17,240+5,"6");
                               drawkey(275,280);
                               outtextxy(275+17,280+5,"3");
                               drawkey(275,320);
                               outtextxy(275+17,320+5,"=");
                               drawkey(325,200);
                               outtextxy(325+17,200+5,"+");
                               drawkey(325,240);
                               outtextxy(325+17,240+5,"-");
                               drawkey(325,280);
                               outtextxy(325+17,280+5,"*");
                               drawkey(325,320);
                               outtextxy(325+17,320+5,"/");
                               drawkey(375,200);
                               outtextxy(375+7,200+5,"+/-");
                               drawkey(375,240);
                               outtextxy(375+9,240+5,"sin");
                               drawkey(375,280);
                               outtextxy(375+13,280+5,"ln");
                               drawkey(375,320);
                               outtextxy(375+3,320+5,"sqrt");
                               drawkey(425,200);
                               outtextxy(425+17,200+5,"C");
                               drawkey(425,240);
                               outtextxy(425+9,240+5,"cos");
                               drawkey(425,280);
                               outtextxy(425+14,280+5,"lg");
                               drawkey(425,320);
                               outtextxy(425+7,320+5,"pow");
                               setfillstyle(SOLID_FILL,9);
                               bar(175,190-20,275+40,190);
                               setcolor(1);
                               line(175,190,275+40,190);
                               line(275+40,190-20,275+40,190);
                               setcolor(15);
                               line(175,190-20,275+40,190-20);
                               line(175,190-20,175,190);
                               outtextxy(175+20,190-20,"space-key");

                              }

                              /*画键函数*/
                              void drawkey(int x,int y)
                              { int x1,y1;
                               x1=x+40;
                               y1=y+30;
                               setcolor(15);
                               line(x,y,x1,y);
                               line(x1,y,x1,y1);
                               line(x1,y1,x,y1);
                               line(x,y1,x,y);
                               setfillstyle(1,1);
                               bar(x+1,y+1,x1,y1);
                               setfillstyle(1,9);
                               bar(x+1,y+1,x1-1,y1-1);
                              }

                              /*按下的键的函数*/
                              void presskey(int x,int y)
                              { int x1,y1;
                               x1=x+40;
                               y1=y+30;
                               setfillstyle(1,9);
                               bar(x+1,y+1,x1-1,y1-1);
                               setcolor(15);
                               line(x1,y,x1,y1);
                               line(x1,y1,x,y1);
                               setcolor(1);
                               line(x,y,x1,y);
                               line(x,y,x,y1);
                              }

                              /*按下的spacekey键的函数*/
                              void presssk()
                              {
                               setfillstyle(SOLID_FILL,9);
                               bar(175,190-20,275+40,190);
                               setcolor(15);
                               line(275+40,190,275+40,190-20);
                               line(275+40,190,175,190);
                               setcolor(1);
                               line(175,190-20,175,190);
                               line(175,190-20,275+40,190-20);
                               outtextxy(175+20,190-20,"space-key");
                              }

                              /*按键与显示的联系*/
                              int i=0;
                              void dianji()
                              {
                               int j=0,sig;
                               do
                              {
                               ams=mouse(&mx,&my,&keys,0);
                               if(keys==1)
                               ams=mouse(&mx,&my,&keys,1);
                               sig=0;

                               if(mx>175&&mx<215&&my>200&&my<230&&keys==0&&ams==-1||ams=='7')
                               {value='7';i=i+NUMDIS;outtextxy(175+i,142+5,&value);
                              


                              IP属地:浙江16楼2006-06-22 00:41
                              回复