教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 公文资料 >

用C语言写的表达式计算器源代码

来源:网络收集 时间:2026-10-03
导读: 这是我用C语言写的表达式计算器程序,因为才学了数据结构中的栈,就完成了这个程序,希望大家多多交流编程心得和体会,欢迎转载和下载哈!谢谢啦! #include stdio.h #include stdlib.h #include malloc.h #includecstdlib #define MAX 16 #define AGAIN 10 typede

这是我用C语言写的表达式计算器程序,因为才学了数据结构中的栈,就完成了这个程序,希望大家多多交流编程心得和体会,欢迎转载和下载哈!谢谢啦!

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include<cstdlib>

#define MAX 16
#define AGAIN 10
typedef char R_SElemType; //针对运算符//
typedef float D_SElemType; //针对数据//
typedef struct
{
R_SElemType *base;
R_SElemType *top;
int stacksize;
}SqStackR;

typedef struct{
D_SElemType *base;
D_SElemType *top;
int stacksize;
}SqStackD;

void InitStack(SqStackR *S){//针对运算符堆栈的初始化//
S->base = (R_SElemType *)malloc(MAX * sizeof(R_SElemType));
if (!S->base){
printf("糟糕,出初始存储空间分配失败!");
exit(0);
}
S->top = S->base;
S->stacksize = MAX;
} //初始化堆栈//

void InitStack(SqStackD *S){//针对数据堆栈的初始化//
S->base = (D_SElemType *)malloc(MAX * sizeof(D_SElemType));
if (!S->base){
printf("糟糕,出初始存储空间分配失败!");
exit(0);
}
S->top = S->base;
S->stacksize = MAX;
} //初始化堆栈//


int StackEmpty(SqStackR *S){ //针对运算符的清空//
if(S->top == S->base)
return 1;
else
return 0;
} //判断是否空栈//


int StackEmpty(SqStackD *S){
if(S->top == S->base)
return 1;
else
return 0;
} //判断是否空栈//

void DestroyStack(SqStackR *S){//针对字符的清空//
S->top = S->base;
S->stacksize=0;
} //销毁//

void DestroyStack(SqStackD *S){//针对数据的清空//
S->top = S->base;
S->stacksize=0;
} //销毁//

void Push(SqStackR *S,R_SElemType e){ //针对运算符的入栈//
int T = (int)S->top,B =(int)S->base;
if ((T-B) == S->stacksize)
{
S->base = (R_SElemType *)realloc(S->base ,(S->stacksize + AGAIN)*sizeof(R_SElemType));
if (!S->base)
{
printf("糟糕,堆栈的重新分配失败,悲剧啦!");
exit(0);
}
S->top = S->base + S->stacksize;
S->stacksize = S->stacksize + AGAIN;
}
*(S->top) = e;
S->top++;
} //入栈//

void Push(SqStackD *S,D_SElemType e){ //针对运算符的入栈//
int T = (int)S->top,B =(int)S->base;
if ((T-B) == S->stacksize)
{
S->base = (D_SElemType *)realloc(S->base ,(S->stacksize + AGAIN)*sizeof(D_SElemType));
if (!S->base)
{
printf("糟糕,堆栈的重新分配失败,悲剧啦!");
exit(0);
}
S->top = S->base + S->stacksize;
S->stacksize = S->stacksize + AGAIN;
}
*(S->top) = e;
S->top++;
} //入栈//


char Pop(SqStackR *S){
R_SElemType e;
if (StackEmpty(S))
{
printf("堆栈是空的。");
exit(0);
}
S->top--;
e = *(S->top);
return e;
} //出栈:e返回栈顶元素后,删除栈顶元素//


float Pop(SqStackD *S){
D_SElemType e;
if (StackEmpty(S))
{
printf("堆栈是空的。");
exit(0);
}
S->top--;
e = *(S->top);
return e;
} //出栈:e返回栈顶元素后,
删除栈顶元素//


char GetTop(SqStackR *S){
char e;
if (StackEmpty(S))
{
printf("堆栈是空的。");
exit(0);
}
e = *(S->top - 1);
return

这是我用C语言写的表达式计算器程序,因为才学了数据结构中的栈,就完成了这个程序,希望大家多多交流编程心得和体会,欢迎转载和下载哈!谢谢啦!

e;
} //取栈顶元素//

float GetTop(SqStackD *S){
float e;
if (StackEmpty(S))
{
printf("堆栈是空的。");
exit(0);
}
e = *(S->top - 1);
return e;
} //取栈顶元素//

int Determine(char c){
char ch[7] = {'+','-','*','/','\n','(',')'};
int i;
for (i = 0;i < 7;i++)
{
if(c == ch[i])
return 1;
}
return 0;
} //判断是否为字符//

char OperatorPriority(char top,char c){
char ch;
if (top == '(' && c == ')' ||top == '\n' && c == '\n')
ch = '=';
else
if(top=='+' || top=='-') //栈顶元素为‘+’或‘-’的时候//
switch(c)
{
case '+':
case '-':
case ')':
case '\n': ch = '>'; break;
case '*':
case '/':
case '(': ch = '<';
}
else
if(top=='*' || top=='/') /*栈顶元素为‘*’或‘/’的时候*/
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case ')':
case '\n': ch = '>'; break;
case '(': ch = '<';
}
else
if(top=='(') /*栈顶元素为‘(’的时候*/
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case '(': ch = '<'; break;
case '\n': printf("悲剧,出错啦!------(温馨提示:错误1)\n"); exit(0);
}
else
if(top==')') /*栈顶元素为‘)’的时候*/
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case '\n': ch = '>'; break;
case '(': printf("悲剧出错啦!-------(温馨提示:错误2)\n"); exit(0);
}
else
if(top=='\n') /*栈顶元素为‘#’的时候*/
switch(c)
{
case '+':
case '-':
case '*':
case '/':
case '(': ch = '<'; break;
case ')': printf("悲剧:出错啦!-------(温馨错误3)\n"); exit(0);
}
return ch;
}


float Operate(float a,char r,float b){
float s, d1 = a, d2 = b;
switch(r){
case '+':s = d1 + d2;break;
case '-':s = d2 - d1;break;
case '*':s = d1 * d2;break;
case '/':if(d1 == 0){s = 0; break;} s = d2 / d1;br …… 此处隐藏:2998字,全部文档内容请下载后查看。喜欢就下载吧 ……

用C语言写的表达式计算器源代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/711959.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)