| 
 | 
 
 
发表于 2005 年 7 月 6 日 22:50:55
|
显示全部楼层
 
 
  
楼主,可算给你找来一个了。。。晕。。 
 
   我现在手上木有turboC,没法调试,你自己去验证咯。 
- #include <stdlib.h>
 - #include <math.h>
 - #include <graphics.h>
 - #include <stdio.h>
 - #include <process.h>
 - #define EXCAPE 27
 - #define ENTER 13
 - main(){
 -   int press,i,x,y,x1,y1,ch_z=0;
 -   int dian=0;
 -   char ch='0';   /*input + - * /  */
 -   char emp[80],sum[80],*e,*s;
 -   double yuan=0.000000000000;
 -   void init(void);
 -   void clear_z(char *u);
 -   double strtoflt(char *p);
 -   int getkey();
 -   int gd=DETECT, gm;
 -   initgraph(&gd, &gm, "");
 -   e=emp;
 -   s=sum;
 -   init();
 -   x = (getmaxx() / 2) - 120;
 -   y = (getmaxy() / 2) - 150;
 -   x1 = (getmaxx() / 2) + 120;
 -   y1 = (getmaxy() / 2) + 150;
 -   while(1){
 -     press = getkey();
 -     switch(press){
 -       case EXCAPE:
 -        exit(0);
 -       case 47:
 -        bar (x + 10, y + 80 + 10, x + 60 - 10, y + 80 + 60 - 10);
 -        delay(8000);
 -        init();
 -        if (ch!='0'){
 -          switch(ch){
 -            case '/':
 -              if (strtoflt(emp)==0.0){
 -               ch='0';
 -               ch_z=0;
 -               dian=0;
 -               emp[0]='\0';
 -               sum[0]='\0';
 -               e=emp;
 -               s=sum;
 -               outtextxy(x+30,y+40,"error!!!!!");
 -               break;
 -              }
 -              yuan = strtoflt(sum) / strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              break;
 -            case '*':
 -              yuan = strtoflt(sum) * strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              break;
 -            case '+':
 -              yuan = strtoflt(sum) + strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              break;
 -            case '-':
 -              if (strtoflt(sum)>=strtoflt(emp)){
 -               yuan = strtoflt(sum) - strtoflt(emp);
 -               sprintf(sum,"%0.10f",yuan);
 -              }
 -              else{
 -               yuan=strtoflt(emp)-strtoflt(sum);
 -               sprintf(sum,"-%0.10f",yuan);
 -              }
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -          }
 -        }
 -         else{
 -          if (ch_z==0){
 -            outtextxy(x+30,y+40,emp);
 -            stpcpy(sum,emp);
 -          }
 -          else{
 -            outtextxy(x+30,y+40,sum);
 -          }
 -        }
 -        ch='/';
 -        ch_z=0;
 -        emp[0]='\0';
 -        e=emp;
 -        dian=0;
 -        break;
 -       case 42:
 -        bar (x + 60 + 10, y + 80 + 10, x + 60 * 2 - 10, y + 80 + 60 - 10);
 -        delay(8000);
 -        init();
 -         if (ch!='0'){
 -          switch(ch){
 -            case '/':
 -              yuan = strtoflt(sum) / strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '*':
 -              yuan = strtoflt(sum) * strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '+':
 -              yuan = strtoflt(sum) + strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '-':
 -              if (strtoflt(sum)>=strtoflt(emp)){
 -               yuan = strtoflt(sum) - strtoflt(emp);
 -               sprintf(sum,"%0.10f",yuan);
 -              }
 -              else{
 -               yuan=strtoflt(emp)-strtoflt(sum);
 -               sprintf(sum,"-%0.10f",yuan);
 -              }
 -               clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -          }
 -        }
 -         else{
 -          if (ch_z==0){
 -            outtextxy(x+30,y+40,emp);
 -            stpcpy(sum,emp);
 -            e=emp;
 -          }
 -          else
 -            outtextxy(x+30,y+40,sum);
 -        }
 -        ch='*';
 -        ch_z=0;
 -         dian=0;
 -        break;
 -       case 45:
 -        bar (x + 60 * 2 + 10, y + 80 + 10, x + 60 * 3 - 10, y + 80 + 60 - 10);
 -        delay(8000);
 -        init();
 -         if (ch!='0'){
 -          switch(ch){
 -            case '/':
 -              yuan = strtoflt(sum) / strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '*':
 -              yuan = strtoflt(sum) * strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '+':
 -              yuan = strtoflt(sum) + strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '-':
 -              if (strtoflt(sum)>=strtoflt(emp)){
 -               yuan = strtoflt(sum) - strtoflt(emp);
 -               sprintf(sum,"%0.10f",yuan);
 -              }
 -              else{
 -               yuan=strtoflt(emp)-strtoflt(sum);
 -               sprintf(sum,"-%0.10f",yuan);
 -              }
 -               clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -          }
 -        }
 -         else{
 -          if (ch_z==0){
 -            outtextxy(x+30,y+40,emp);
 -            stpcpy(sum,emp);
 -            e=emp;
 -          }
 -          else
 -            outtextxy(x+30,y+40,sum);
 -        }
 -        ch='-';
 -        ch_z=0;
 -         dian=0;
 -        break;
 -       case 43:
 -        bar (x + 60 * 3 + 10, y + 80 + 10, x + 60 * 4 - 10, y + 80 + 60 - 10);
 -        delay(8000);
 -        init();
 -         if (ch!='0'){
 -          switch(ch){
 -            case '/':
 -              yuan = strtoflt(sum) / strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '*':
 -              yuan = strtoflt(sum) * strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '+':
 -              yuan = strtoflt(sum) + strtoflt(emp);
 -              sprintf(sum,"%0.10f",yuan);
 -              clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -            case '-':
 -              if (strtoflt(sum)>=strtoflt(emp)){
 -               yuan = strtoflt(sum) - strtoflt(emp);
 -               sprintf(sum,"%0.10f",yuan);
 -              }
 -              else{
 -               yuan=strtoflt(emp)-strtoflt(sum);
 -               sprintf(sum,"-%0.10f",yuan);
 -              }
 -               clear_z(sum);
 -              outtextxy(x+30,y+40,sum);
 -              emp[0]='\0';
 -              e=emp;
 -              break;
 -          }
 -        }
 -         else{
 -          if (ch_z==0){
 -            outtextxy(x+30,y+40,emp);
 -            stpcpy(sum,emp);
 -            e=emp;
 -          }
 -          else
 -            outtextxy(x+30,y+40,sum);
 -        }
 -        ch='+';
 -        ch_z=0;
 -         dian=0;
 -        break;
 -       case 49:
 -        bar (x + 10, y + 80 + 53 + 10, x + 60 - 10, y + 80 + 53 * 2 - 4);
 -        delay(8000);
 -        init();
 -        for (i=0;i<=79;i++){
 -          if (emp[i]=='\0')
 -            break;
 -        }
 -        if (ch_z==0){
 -          *e='1';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 50:
 -        bar (x + 60 + 10, y + 80 + 53 + 10, x + 60 * 2 - 10, y + 80 + 53 * 2 - 4);
 -        delay(8000);
 -        init();
 -         for (i=0;i<=79;i++){
 -          if (emp[i]=='\0')
 -            break;
 -        }
 -         if (ch_z==0){
 -          *e='2';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 51:
 -        bar (x + 60 * 2 + 10, y + 80 + 53 + 10, x + 60 * 3 - 10, y + 80 + 53 * 2 - 4);
 -        delay(8000);
 -        init();
 -         for (i=0;i<=79;i++){
 -          if (emp[i]=='\0')
 -            break;
 -        }
 -         if (ch_z==0){
 -          *e='3';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case ENTER:
 -        bar (x + 60 * 3 + 10, y + 80 + 53 + 10, x + 60 * 4 - 10, y + 80 + 53 * 2 - 4);
 -        delay(8000);
 -        init();
 -          if (ch!='0'){
 -            switch(ch){
 -              case '/':
 -               yuan = strtoflt(sum) / strtoflt(emp);
 -               sprintf(sum,"%0.10f",yuan);
 -               clear_z(sum);
 -               outtextxy(x+30,y+40,sum);
 -               emp[0]='\0';
 -               e=emp;
 -               break;
 -              case '*':
 -               yuan = strtoflt(sum) * strtoflt(emp);
 -               sprintf(sum,"%0.10f",yuan);
 -               clear_z(sum);
 -               outtextxy(x+30,y+40,sum);
 -               emp[0]='\0';
 -               e=emp;
 -               break;
 -              case '+':
 -               yuan = strtoflt(sum) + strtoflt(emp);
 -               sprintf(sum,"%0.10f",yuan);
 -               clear_z(sum);
 -               outtextxy(x+30,y+40,sum);
 -               emp[0]='\0';
 -               e=emp;
 -               break;
 -              case '-':
 -               if (strtoflt(sum)>=strtoflt(emp)){
 -                 yuan = strtoflt(sum) - strtoflt(emp);
 -                 sprintf(sum,"%0.10f",yuan);
 -               }
 -               else{
 -                 yuan=strtoflt(emp)-strtoflt(sum);
 -                 sprintf(sum,"-%0.10f",yuan);
 -               }
 -               clear_z(sum);
 -               outtextxy(x+30,y+40,sum);
 -               emp[0]='\0';
 -               e=emp;
 -               break;
 -            }
 -          }
 -          else{
 -            if (ch_z==0){
 -              outtextxy(x+30,y+40,emp);
 -              stpcpy(sum,emp);
 -              e=emp;
 -            }
 -            else{
 -              outtextxy(x+30,y+40,sum);
 -            }
 -          }
 -        ch='0';
 -        ch_z=1;
 -         dian=0;
 -        break;
 -       case 52:
 -        bar (x + 10, y + 80 + 53 * 2 + 10, x + 60 - 10, y + 80 + 53 * 3 - 4);
 -        delay(8000);
 -        init();
 -        if (ch_z==0){
 -          *e='4';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 53:
 -        bar (x + 60 + 10, y + 80 + 53 * 2 + 10, x + 60 * 2 - 10, y + 80 + 53 * 3 - 4);
 -        delay(8000);
 -        init();
 -         if (ch_z==0){
 -          *e='5';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 54:
 -        bar (x + 60 * 2 +10, y + 80 + 53 * 2 + 10, x + 60 * 3 - 10, y + 80 + 53 * 3 - 4);
 -        delay(8000);
 -        init();
 -         if (ch_z==0){
 -          *e='6';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 46:
 -        bar (x + 60 * 3 + 10, y + 80 + 53 * 2 + 10, x + 60 * 4 - 10, y + 80 + 53 * 3 - 4);
 -        delay(8000);
 -        init();
 -        if (dian==0){
 -          if (ch_z==0){
 -            *e='.';e++;*e='\0';
 -            outtextxy(x+30,y+40,emp);
 -          }
 -          else{
 -            outtextxy(x+30,y+40,sum);
 -          }
 -        }
 -        else{
 -          if (ch_z==0)
 -            outtextxy(x+30,y+40,emp);
 -          else
 -            outtextxy(x+30,y+40,sum);
 -        }
 -        dian=1;
 -        break;
 -       case 55:
 -        bar (x + 10, y + 80 + 53 * 3 + 10, x + 60 - 10, y + 80 + 53 * 4 - 4);
 -        delay(8000);
 -        init();
 -         if (ch_z==0){
 -          *e='7';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 56:
 -        bar (x + 60 + 10, y + 80 + 53 * 3 + 10, x + 60 * 2 -10, y + 80 + 53 * 4 - 4);
 -        delay(8000);
 -        init();
 -         if (ch_z==0){
 -          *e='8';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 57:
 -        bar (x + 60 * 2 + 10, y + 80 + 53 * 3 + 10, x + 60 * 3 - 10, y + 80 + 53 * 4 - 4);
 -        delay(8000);
 -        init();
 -        if (ch_z==0){
 -          *e='9';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 48:
 -        bar (x + 60 * 3 + 10, y + 80 + 53 * 3 + 10, x + 60 * 4 - 10, y + 80 + 53 * 4 - 4);
 -        delay(8000);
 -        init();
 -        if (ch_z==0){
 -          *e='0';e++;*e='\0';
 -          outtextxy(x+30,y+40,emp);
 -        }
 -        else{
 -          outtextxy(x+30,y+40,sum);
 -        }
 -        break;
 -       case 32:
 -        emp[0]='\0';
 -        sum[0]='\0';
 -        e=emp;
 -        s=sum;
 -        ch='0';
 -        ch_z=0;
 -        dian=0;
 -        init();
 -        break;
 -       case 8:
 -        delay(8000);
 -        for(i=0;i<=79;i++){
 -          if (emp[i]=='\0')
 -            break;
 -        }
 -        if (i==0)
 -          break;
 -        if (i!=79&&i!=0){
 -          i--;
 -          emp[i]='\0';
 -          e=&emp[i];
 -        }
 -        init();
 -        outtextxy(x+30,y+40,emp);
 -        break;
 -     }
 -   }
 - }
 - /*---------------------------------------------------------------------*/
 - void init(void){
 -   int x, y, x1, y1, i, j;
 -   char emp;
 -   x = (getmaxx() / 2) - 120;
 -   y = (getmaxy() / 2) - 150;
 -   x1 = (getmaxx() / 2) + 120;
 -   y1 = (getmaxy() / 2) + 150;
 -   cleardevice();
 -   setbkcolor(3);
 -   setfillstyle(1, 15);
 -   setcolor(15);
 -   settextstyle(1,0,1);
 -   rectangle (x, y, x1, y1);
 -   rectangle (x - 7, y - 7, x1 + 7, y1 + 7);
 -   rectangle (x + 10, y + 10, x1 - 10, y + 80 - 10);
 -   line (x, y + 80, x1, y + 80);
 -   y = y + 80;
 -   for (j = 1; j <= 4; j++){
 -     x = (getmaxx() / 2) - 120;
 -     for (i = 1; i <= 4; i++){
 -       /* bar (x + 10, y + 10, x + 60 - 10, y + 60 - 10);*/
 -       rectangle(x + 10, y + 10, x + 60 - 10, y + 60 - 10);
 -       if (j == 1){
 -        if (i == 1)
 -          outtextxy(x + 20, y + 20, "/");
 -        if (i == 2)
 -          outtextxy(x + 25, y + 20, "*");
 -        if (i == 3)
 -          outtextxy(x + 27, y + 20, "-");
 -        if (i == 4)
 -          outtextxy(x + 25, y + 20, "+");
 -       }
 -       if (j == 2){
 -        if (i == 1)
 -          outtextxy(x + 25, y + 20, "1");
 -        if (i == 2)
 -          outtextxy(x + 25, y + 20, "2");
 -        if (i == 3)
 -          outtextxy(x + 25, y + 20, "3");
 -        if (i == 4)
 -          outtextxy(x + 25, y + 20, "=");
 -       }
 -       if (j == 3){
 -        if (i == 1)
 -          outtextxy(x + 25, y + 20, "4");
 -        if (i == 2)
 -          outtextxy(x + 25, y + 20, "5");
 -        if (i == 3)
 -          outtextxy(x + 25, y + 20, "6");
 -        if (i == 4)
 -          outtextxy(x + 25, y + 20, ".");
 -       }
 -       if (j == 4){
 -        if (i == 1)
 -          outtextxy(x + 25, y + 20, "7");
 -        if (i == 2)
 -          outtextxy(x + 25, y + 20, "8");
 -        if (i == 3)
 -          outtextxy(x + 25, y + 20, "9");
 -        if (i == 4)
 -          outtextxy(x + 25, y + 20, "0");
 -       }
 -       x = x + 60;
 -     }
 -     y = y + 53;
 -   }
 - }
 - /*---------------------------------------------------------------------*/
 - int getkey(){
 -   char lowbyte;
 -   int press;
 -   while(bioskey(1)==0);
 -   press = bioskey(0);
 -   press = press&0xff? press&0xff: press>>8;
 -   return(press);
 - }
 - double strtoflt(char *p)
 - {
 -   double rtl=0.000000000000;
 -   double pnt=0.000000000000;
 -   double t = 10;
 -   int ispoint = 0;
 -   while (*p!='\0'||*p!='.'){
 -     if(*p<'0'||*p>'9')
 -       break;
 -     rtl*=10;
 -     rtl+=*p-'0';
 -     p++;
 -   }
 -   if (*p=='.'){
 -     ispoint=1;
 -     p++;
 -   }
 -   while(ispoint&&*p!='\0'){
 -     pnt+=(double)(*p-'0')/t;
 -     t*=10;
 -     p++;
 -   }
 -   rtl+=pnt;
 -   return (rtl);
 - }
 - /*-----------------------------------------------------------------------*/
 - void clear_z(char u[]){
 -   int i;
 -   for(i=strlen(u)-1;i>=0;i--){
 -     if (u[i]!='0')
 -       break;
 -   }
 -   if (u[i]=='.'){
 -     u[i]='\0';
 -   }
 -   else{
 -     i++;
 -     u[i]='\0';
 -   }
 - }
 
  复制代码 |   
 
 
 
 |