📄 简单计算器.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 + -