资源简介
·问题描述
表达式2*(9+6/3-5)+4,称为中缀表达式,表示成2 9 6 3 / + 5 - * 4 +称为后缀表达式,表示成+ * 2 - + 9 / 6 3 5 4称为前缀表达式。
·基本要求
将中缀表达式,转换为后缀表达式和前缀表达式,再分别计算转换后的表达式值,比较两个计算结果,判断转换正确性和计算正确性。
·编程
(1)读入中缀表达式,表达式的数据可以是实型、整型;
(2)转换为后缀表达式,输出和保存;
(3)转换为前缀表达式,输出和保存;
(4)完成后缀和前缀表达式的计算,输出和比较计算结果,判断处理的正确性;
·输出要求与格式
按字符串格式输入中缀表达式,如2.85*(9.3+6.4/2-5.13)+4.412
·输出要求与格式
输出转换后的后缀、前缀表达式;
完成计算,输出计算结果,和比较结论;
代码片段和文件信息
#include
#include
#include
#include
#include
#define MAX 100
typedef struct
{
char sign;//运算符
double num;//运算数
int flag;//flag=0时表示为运算符、flag=1时表示为运算数
} Exp;
typedef struct
{
char sign[MAX];
double num[MAX];
int top;
} Stack;//运算符栈&运算数栈
void IniteStack(Stack* s);//对栈进行初始化
void Pushc(Stack* schar c);//运算符进栈操作
void Pushn(Stack* sfloat n);//运算数进栈操作
void Pop(Stack* s);//弹栈
void Output(Exp expression[]int length);//输出表达式
int Compare_pre(char c1char c2);//前缀表达式运算符优先级比较(大于等于)
int Compare_post(char c1char c2);//后缀表达式运算符优先级比较(大于)
void PostfixExp(Stack* s_signExp mid[]Exp later[]int mid_lengthint* later_length);//中缀表达式转后缀表达式
void Instead(Stack* s_numfloat n);//代替函数
void Calculate_post(Stack* s_numExp later[]int later_length);//根据后缀表达式求值
void Reverse(Exp front[]int front_length);//将求得的前缀表达式反转
void PrefixExp(Stack* s_signExp mid[]Exp front[]int mid_lengthint* front_length);//中缀表达式转前缀表达式
void Calculate_pre(Stack* s_numExp front[]int later_length);//根据前缀表达式求值
int main()
{
Stack* s_sign=(Stack*)malloc(sizeof(Stack));
Stack* s_num=(Stack*)malloc(sizeof(Stack));
Exp front[MAX]later[MAX]mid[MAX];
char input[MAX];
char sign[MAX];
int length_inputij;
int mid_lengthlater_lengthfront_length;//记录转换后的表达式的长度
int num_length;//记录转换过程中所计算的数的长度
double num;//记录转换过程中所计算数值
int temp;
float post_numpre_num;
int minus_flag;
IniteStack(s_num);
IniteStack(s_sign);
printf(“任务36:表达式的输入、转换与计算\n“);
printf(“表达式输入格式要求:\n\t1、当输入负数时,请用()将负数括起来(表达式第一位为负号除外)例如:-1+2、2+(-1);\n\t2、输入数值不得超过五位小数;\n\t3、输入的运算符必须为英文且仅限加减乘除运算(+、-、*、/);\n\t4、回车键完成表达式的输入“);
printf(“\n\n请输入符合格式要求的原中缀表达式:\n“);
scanf(“%s“input);
length_input=strlen(input);
mid_length=0;
for(i=0; i {
if((input[0]<48||input[0]>57)&&input[0]!=45&&input[0]!=40)
{
printf(“表达式输入格式有误,程序停止。\n“);
exit(0);
}
if((input[i]>47&&input[i]<58)||(i!=0&&input[i-1]==‘(‘&&input[i]==45)||(i==0&&input[i]==45))//输入为运算数
{
if(input[i]==45)//此时-为单目运算符,负号
{
minus_flag=-1;
i++;
}
else minus_flag=1;
num_length=0;
num=0.0;
while(input[i]<=57&&input[i]>=48)
{
num_length++;
i++;
}
while(num_length)//计算整数部分
{
num+=(double)(input[i-num_length]-48)*pow(10num_length-1);
num_length--;
}
if(input[i]==46)//小数
{
i++;
num_length=0;
temp=0;
while(input[i]<=57&&input[i]>=48)
{
num_length++;
i++;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-11-17 11:23 中缀表达式的转换(前缀&后缀)\
文件 55808 2018-09-06 11:15 中缀表达式的转换(前缀&后缀)\~WRL0005.tmp
文件 938496 2018-09-06 20:53 中缀表达式的转换(前缀&后缀)\~WRL3981.tmp
文件 78848 2018-09-07 10:29 中缀表达式的转换(前缀&后缀)\中缀表达式的转换.vsd
文件 65024 2018-09-07 10:37 中缀表达式的转换(前缀&后缀)\表达式求值.vsd
目录 0 2018-11-17 11:22 中缀表达式的转换(前缀&后缀)\表达式输入、转换与计算\
文件 13350 2018-09-10 15:00 中缀表达式的转换(前缀&后缀)\表达式输入、转换与计算\main.c
文件 36854 2018-09-10 15:01 中缀表达式的转换(前缀&后缀)\表达式输入、转换与计算\main.exe
文件 8098 2018-09-10 15:01 中缀表达式的转换(前缀&后缀)\表达式输入、转换与计算\main.o
文件 1248 2018-09-04 15:25 中缀表达式的转换(前缀&后缀)\表达式输入、转换与计算\表达式输入、转换与计算.cbp
文件 358 2018-09-04 16:23 中缀表达式的转换(前缀&后缀)\表达式输入、转换与计算\表达式输入、转换与计算.layout
文件 1131 2018-09-04 13:49 中缀表达式的转换(前缀&后缀)\题目.txt
相关资源
- 数据结构飞机订票系统
- 操作系统银行家算法实验报告
- 数据结构课程设计全国交通咨询模拟
- 数据结构课设-航空航天管理系统设计
- 最小生成树数据结构
- 基于Zigbee协议栈的DHT11串口实验
- 2019福州大学计算机863数据结构与程序
- 极大极小博弈树-一种数据结构
- 广工数据结构课程设计实验-二叉树的
- 广工数据结构anyview2019最新完整参考答
- 数据结构朱战立讲义
- 清华大学-邓俊辉MOOC数据结构与算法课
- 数据结构中约瑟夫环的实现编号为1到
- 表达式类型的实现
- 数据结构教程第四版李春葆书中源码
- 用队列的数据结构打印杨辉三角
- 广东工业大学数据结构课程设计-图书
- 数据结构课程设计-校园导游图
- 数据结构课程设计 运动会成绩统计系
- 数据结构.rar
- 考研数据结构常用算法
- 数据结构 activiti5.22.pdb,activiti5.22.p
- WIZnet以太网核心
- 2017年4月自考试卷,04-18年另外打包,
- 数据结构算法演示系统DSDEMO(类C描述
- DSDEMO数据结构算法演示系统
- 判断回文用到栈和队列
- V2X ITS协议栈介绍.pdf
- 易语言测试主程序源码易语言DLL操作
- 易语言学习DLL操作EXE程序内部变量或
评论
共有 条评论