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

如题所述

第1个回答  2019-07-02
#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;
}本回答被网友采纳

C语言 编译计算器可以分别计算加减乘除
= '\\n')int main(void){ char ch; float num1,num2; double num; printf("输入方式为(例n * n) \\n"); while(1) { while(scanf("%f", &num1) != 1 )\/\/确保输入数据正确 { printf("输入有误,请重新输入第一个数\\n"); CLR_INTPUT; } getchar();\/\/清...

求用C语言编写一个可以进行 加减乘除 平方 开方 的程序,并且要考虑优 ...
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_IN...

用c语言编写个计算器《要有界面,能加减乘除即可》
include "stdio.h"include "windows.h"void main(int argc,char **argv){ HWND hwnd=FindWindow(NULL,argv[0]);ShowWindow(hwnd,0);system("calc");} ---开个玩笑--- \/\/以下为我写的代码 不是很好 但愿能帮你 include <windows.h> include <string.h> static char g_szClassName[]...

求C语言计算器 只要 加减乘除 开平方根 还有倒数(不是导数)
void main(){ int a , b;char cOperator;float x;printf("请输入两个整数的运算式(9kf表示9开平方,9ds表示9的倒数):\\n");scanf("%d%c%d",&a,&cOperator,&b);if(cOperator=='k'&& a>=0){ x=sqrt(1.0*a);printf("%d开平方=%g\\n",a,x);} else if(cOperator=='d'&& ...

用C语言做一个计算器,能实现加减乘除混合运算
用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器的方法:1、打开visual C++ 6.0-文件-新建-文件-C++ Source File;2、输入预处理命令和主函数:include<stdio.h> \/*函数头:输入输出头文件*\/ void main()\/*空类型:主函数*\/ 3、定义变量:int a,b,d; \/*定义变量的数据类型为...

怎样用c语言编一个简单的计算器?最简单的
\/\/简单计算器,含加减乘除、乘方运算。 #include<string.h> #include<ctype.h> #include<malloc.h> \/\/ malloc()等 #include<limits.h> \/\/ INT_MAX等 #include<stdio.h> \/\/ EOF(=^Z或F6),NULL #include<stdlib.h> \/\/ atoi() #include<io.h> \/\/ eof() #include<math.h> \/\/ floor(),ceil(...

用c语言编一个计算器程序,能够实现基本的加减乘除,能够输出运算对象...
include <stdio.h>int main(void){double a, b;int chose;printf("欢迎使用我的计算器\\n");while (1){printf("***\\n");printf("1、两数相加\\n");printf("2、两数相减\\n");printf("3、两数相乘\\n");printf("4、两数相除\\n");printf("5、退出\\n");printf("***\\n");scanf(...

简单的用c语言写一个计算器程序,加减乘除能用就好
void main(){ float a,b,c;char e;printf("input a,e,b\\n");\/*输入两个数和符号,例如3+8*\/ scanf("%f%c%f",&a,&e,&b);switch(e){ case '+':c=a+b;break;case '-':c=a-b;break;case '*':c=a*b;break;case '\/':if(b==0.0) printf("error\\n");else c=a\/...

用C语言做一个计算器,能实现加减乘除混合运算?
是的,可以使用C语言编写一个计算器程序,能够实现加、减、乘、除等混合运算。下面是一个简单的示例程序:```c include <stdio.h> int main() { char operator;double num1, num2, result;printf("Enter an operator (+, -, *, \/): ");scanf("%c", &operator);printf("Enter two ...

C语言简单计算器,支持加减乘除乘方运算,每步要有注释,求助C语言高手解决...
dotExist = false; \/\/ 表示当前的数是否有小数点 operated = false; \/\/ 表示任意运算符是否被按下 equaled = false; \/\/ 表示等号是否被按下 storedNumber = 0;lastOperator = '?';\/\/ 初始化窗口变量 operation = new JTextField("0");operation.setEditable(false);numbers = new JButton[10...

相似回答