问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用c语言实现科学计算器要求有计算器界面 可以加减乘除平方开方

发布网友 发布时间:2022-04-30 19:35

我来回答

1个回答

热心网友 时间:2023-10-09 19:42

#include "stdafx.h"

#define STACK_INIT_SIZE 10
#define STACKINCRESIZE 5

typedef struct
{
SElemType *base;
SElemType *top;
int stack_size;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stack_size=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack &S,SElemType e)
{
if((S.top-S.base)>=STACK_INIT_SIZE){
S.base=(ElemType*)realloc(S.base,(S.stack_size+STACKINCRESIZE)*(sizeof(SqStack)));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stack_size;
S.stack_size+=STACK_INIT_SIZE;

}
*(S.top)++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)return ERROR;

e=*--S.top;

return OK;
}
Status StackEmpty(SqStack &S)
{
if(S.top==S.base)
return TRUE;
else return FALSE;
}
int GetTop(SqStack S,ElemType &e)
{
if(S.top >S.base )
{
e=*(S.top-1) ;
return OK;
}
else return ERROR;
}
/*#include "stdafx.h"
#include "MyStack.h"

int InitStack(SqStack &S)
{
S.base =(ElemType *)malloc(STACKSIZE*sizeof(ElemType));
S.top =S.base ;
S.stacksize =STACKSIZE;
return OK;
}

int GetTop(SqStack S,ElemType &e)
{
if(S.top >S.base )
{
e=*(S.top-1) ;
return OK;
}
else return ERROR;
}
int Push(SqStack &S,Elemtype e)
{
if(S.top -S.base >=S.stacksize )
{
S.base=(ElemType *)realloc(S.base ,(S.stacksize +ADDSIZE)sizeof(ElemType));
S.top =S.stacksize +S.base ;
S.stacksize =S.stacksize +ADDSIZE;
}
*(S.top)++=e;
return OK;
}
int Pop(SqStack &S,ElemType &e)
{
if(S.base !=S.top )
{
e=*(--S.top );
return OK;
}
else return ERROR;
}*/

#include "stdafx.h"
#include "stdafx.h"
#include "MyStack.h"
//#include "MyStack.cpp"

ElemType Precede(ElemType t1,ElemType t2)
{
ElemType f='0';
switch(t2)
{
case '+':
case '-':
if(t1=='('||t1=='=')
f='<';
else f='>';
break;
case '*':
case '/':
if(t1=='*'||t1=='/'||t1==')')
f='>';
else f='<';
break;
case '(':
if(t1==')')
{
cout<<"ERROR"<<endl;
exit(ERROR);
}
else f='<';
break;
case ')':switch(t1)
{
case '(':f='=';
break;
case '=':printf("ERROR2\n");
exit(ERROR);
default: f='>';
}
break;
case'=':switch(t1)
{
case '=':f='=';
break;
case '(':cout<<"ERROR"<<endl;
default:f='>';
}
break;
}
return f;
}

int In(ElemType e)
{
switch(e)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'=':return TRUE;
default:return FALSE;
}
}
ElemType Operate(ElemType a,ElemType theta,ElemType b)
{
ElemType re=0;
switch(theta)
{
case'+':re=a+b;
break;
case'-':re=a-b;
break;
case'*':re=a*b;
break;
case'/':re=a/b;
break;
}
return re;
}
ElemType EvaluateExpression()
{
ElemType x,a,b,theta,d;
char c;
char z[6];
SqStack OPTR,OPND;
InitStack(OPTR);Push(OPTR,'=');
InitStack(OPND);
c=getchar();
GetTop(OPTR,x);
while(c!='='||x!='=')
{
if(In(c)) // 是7种运算符之一
switch(Precede(x,c))
{
case'<':Push(OPTR,c); // 栈顶元素优先权低
c=getchar();
break;
case'=':Pop(OPTR,x); // 脱括号并接收下一字符
c=getchar();
break;
case'>':Pop(OPTR,theta); // 退栈并将运算结果入栈
Pop(OPND,b);
Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
}
else if(c>='0'&&c<='9') // c是操作数
{
int i=0;
do
{
z[i]=c;
i++;
c=getchar();

}while(c>='0'&&c<='9');
z[i]=0;
d=atoi(z);
Push(OPND,d);
}
else // c是非法字符
{
printf("ERROR4\n");
exit(ERROR);
}
GetTop(OPTR,x);
}
GetTop(OPND,x);
return x;
}

// Calculator.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "Calculator.h"

int _tmain(int argc, _TCHAR* argv[])
{
printf("请输入算术表达式,负数要用(0-正数)表示,并以=结束\n");
printf("%d\n",EvaluateExpression());

getchar();
system("pause");
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小红书怎么修改ID 专属ID更改方法 Win11如何更改字体视觉效果 Win11字体视觉效果修改方法介绍 华为团队管理模式 通信工程这个专业主要是学什么 专注力差的孩子该如何纠正 三岁的孩子专注力不好,怎么培养她的专注力呀!。 镇江关周围有什么玩的,镇江及周边旅游景点 大港南站去镇江汽车站怎么走 镇江汽车站到大港南站有多远 出国去澳大利亚留学都需要注意哪些事项呢? 澳大利亚留学条件及注意事项有哪些 用c语言编一个计算器程序,能够实现基本的加减乘除,能够输出运算对象,运算符,运算结果。谢谢啦! 请问怎么用c语言写一个可以实现加减乘除四则运算的计算器! C语言作业,编写一个简单的计算器,实现加减乘除运算,谢谢大家 C语言 编译计算器可以分别计算加减乘除 c语言计算器加减乘除 怎样用C语言编写计算器的加减乘除 体重大的人,有什么好的徒手锻炼背部肌肉的方法? 在早上喜欢喝牛奶吃燕麦粥,这样的早餐营养充足吗? 牛奶加面包作为早餐,这种早餐会不会对胃造成伤害? 轮式挖掘机上路需要行驶证吗 请问现代130轮式挖掘机个种指士灯指的是什么? 现代130轮式挖掘机尾灯总成多少钱 130型号的挖掘机怎么启动 现代130-5轮式挖掘机二档没有了,怎么解决 山河智能SWE130W轮式挖掘机怎么样啊? 山河智能130和现代150的轮挖在质量、操作和油耗上有什么明显的不同 家里有糯米,可以做哪些菜? 糯米可以做几种食物? 按月等额本息还款法每年每月还款金额一样吗 等额本息每个月的利息是一样的吗 等额本息还款,每期还款金额固定,但每期的本金和利息是不断变化的,具体构成是怎么算出来的? 用C语言设计一个计算器,处理简单的加减乘除,最后用goto返回执行下一个计算。 用c语言设置计算器,能运行加减乘除。而且运行的时候不能有任何错误 苏州市民卡B卡有哪些用途,在哪些地方可以充值 用C语言编写一个简易计算器可实现加减乘除,连加连减,连乖连除。 用c语言编一个简单的加减乘除的计算器程序 不需要很复杂 只要能进行两个数之间的运算就好了 请问苏州公交卡在哪些地方可以充值,谢谢。 计算器的C语言代码.就进行简单的加减乘除的运算,可以循环的,谢谢大神了! 想知道: 苏州市苏州吴中区一卡通充值地点在哪? C语言 简单的计算器 只需要进行 加减乘除的运算 谢谢大神!!! 苏州市民卡坐公交的话,如果直接往苏州银行卡里转钱可以用吗? 苏州社保卡上是江苏银行,是不是在江苏银行充钱就能坐公交车啊? 苏州市民卡(来苏州上学学校发的),是不是需要激活才能当公交卡用? 刚发的苏州市民卡 是不是充值好就可以做公交车 有机玻璃溶化剂与固化剂是什么? 水玻璃(又名硅酸钠),而可作为水玻璃固化剂的,究竟有多少种呢? 您的手机已被锁定 ,请你输入手机防盗密码解锁 。这怎么办啊 有哪位了解水玻璃固化剂的作用的吗 水玻璃加磷酸能堵漏吗 玻璃钢中的固化剂有毒吗 vivo手机被锁定怎么办?