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

📄 简单计算器.c

📁 这是一个数据结构里面的计算器程序,可以做为大作业来做.呵呵!
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include <bios.h>
#define MaxQSize 80

float qlist[MaxQSize],qlist1[MaxQSize],qlist2[MaxQSize];  /*定义三个全局队列*/
int front=0,rear=0,front1=0,front2=0,rear1=0,rear2=0,count=0,count1=0,count2=0;/*定义三个队列头结点、尾结点、数据个数*/
main()
{
 char c[80];
 void Enter(float),pop(),ClearStack();
 printf("input string:(n:sin,o:cos,s:sqrt)\n");
 while(gets(c),*c!='q' ||*c!='Q')
 {
  switch(*c)
  {
  case '+':
  case '*':
  case 's':
  case 'n':  /*求SIN*/
  case 'o':  /*求COS*/
  case '/':  /*将符号入第一个队列*/
  {
   if(count==MaxQSize)
     {
       printf("Quere overflow!");
       exit(1);
      }
      count++;
      qlist[rear]=*c;
      rear=(rear+1)%MaxQSize;
      break;}
    case '-':
  {
     if(strlen(c)>1)  /*如果是负号,则将负号和数一起入第二个队列*/
       Enter(atof(c));
     else             /*否则,说明是减号,入第一队列*/
   if(count==MaxQSize)
     {
       printf("Quere overflow!");
       exit(1);
      }
      count++;
      qlist[rear]=*c;
      rear=(rear+1)%MaxQSize;
     break;}
  case '=':
     pop();    /*显示结果*/
     break;
  case 'c':
     ClearStack();
     break;
  case 'q':
     ClearStack();
     exit(1);
  default:
     Enter(atof(c));
     break;
   }
  }
 return 0;
 }

void Enter(float num)  /*将数据入第二个队列*/
{
 if(count1==MaxQSize)
  {
   printf("Queue overflow!\n");
   exit(1);
    }
 count1++;
 qlist1[rear1]=num;
 rear1=(rear1+1)%MaxQSize;

}

void ClearStack()  /*将三个队列清空*/
{
  count=0;
  count1=0;
  count2=0;
  front=0;
  rear=0;
  front1=0;
  rear1=0;
  front2=0;
  rear2=0;
}

void pop()  /*显示结果*/
{
 float QFront(float num1,float num2,char *temp);
 float num1,num2;
 float sum;
 char temp;
 temp=qlist[front];  /*将第一个队列中的头结点读出来*/
 while(count1!=0)    /*判断第二个队列是否有数*/
 {
 temp=qlist[front];  /*将队列中头结点读出来*/
 sum=QFront(num1,num2,&temp);
 count--;
 front=(front+1)%MaxQSize;/*将第一个队列头指针加1*/
  }
   if(count!=0 && temp=='s')    
    sum=sqrt(qlist2[front2]);
  if(count!=0 && temp=='n')
    sum=sin(qlist2[front2]);
  if(count!=0 && temp=='o')
    sum=cos(qlist2[front2]);
 printf("%f",sum);
}

float QFront(float num1,float num2,char *temp)
{
 float number,numb1;
 float QFront1();
 void QInsert(float);
 num1=QFront1();  /*先读出一个数*/
 switch(*temp)
 {
  case '+':
   if(count2==0)
   {
   num2=QFront1();/*读出第二个数*/
   number=num1+num2;
    QInsert(number);/*将结果存入第三个队列*/
    }
   else
   {
   number=num1+qlist2[front2];
   front2=(front2+1)%MaxQSize;
   QInsert(number);
    }
   break;

  case '-':
   if(count2==0)
   {
   num2=QFront1();
   number=num1-num2;
   printf("number=%f\n",number);
   QInsert(number);
    }
   else
   {
   number=qlist2[front2]-num1;
   printf("number=%f\n",number);
   front2=(front2+1)%MaxQSize;
   QInsert(number);
    }
   break;

   case '*':
   if(count2==0) /*如果第三个队列中没有数据,则从第二个队列中读出一个数据*/
   {
   num2=QFront1();
   number=num1*num2;
   QInsert(number);
    }
   else /*否则,从第三个队列中读出数据*/
   {
   number=qlist2[front2]*num1;
   front2=(front2+1)%MaxQSize;
   QInsert(number);
    }
   break;
   case '/':
     if(count2==0)
   {
   num2=QFront1();
   if(num2==0)
   {
    printf("divied by 0");
    ClearStack();
    exit(1);
   }
   else
   {
   number=num1/num2;
    QInsert(number);
     }
    }
   else
   {
   if(num1==0)
   {
     printf("divide by 0");
     ClearStack();
     exit(1);
   }
   else
   {
   number=qlist2[front2]/num1;
    front2=(front2+1)%MaxQSize;
   QInsert(number);
     }
    }
   break;

   case 's':
     if(count2==0)
   {
    number=sqrt(num1);
    QInsert(number);
    }
   else
   {
    number=sqrt(qlist2[front2]);
   printf("number=%d\n",number);
   front2=(front2+1)%MaxQSize;
   QInsert(number);
    }
   break;
  case 'n':
  if(count2==0)
   {
    number=sin(num1);
   QInsert(number);
    }
   else
   {
   number=sin(qlist2[front2]);
   front2=(front2+1)%MaxQSize;
   QInsert(number);
    }
   break;

   case 'o':
     if(count2==0)
   {
    number=cos(num1);
   printf("number=%d\n",number);
   QInsert(number);
    }
   else
   {
   number=cos(qlist2[front2]);
   printf("number=%d\n",number);
   front2=(front2+1)%MaxQSize;
   QInsert(number);
    }
   break;
 }
 return number;
 }

float QFront1() /*从第一个数据读数据*/
{
  float temp;
  if(count1==0)
  {
   printf("Deleting from an empty queue!\n");
   exit(1);
   }
   temp=qlist1[front1];
   count1--;
   front1=(front1+1)%MaxQSize;
   return temp;
  }

void QInsert(float number)  /*将结果存入第三个队列*/
{
 if(count2==MaxQSize)
 {
   printf("Queue overflow!\n");
   exit(1);
  }
  count2++;
  qlist2[rear2]=number;
  rear2=(rear2+1)%MaxQSize;
   }

⌨️ 快捷键说明

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