资源简介
·问题描述
表达式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
相关资源
- 由浅入深,蓝牙4.0/BLE协议栈开发攻略
- Python全栈学习笔记面向对象大作业:
- 数据结构年终考题范围和答案 耿国华
- 栈的实现及应用,六种基本算法
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 利用一个循环队列实现顺序栈重新排
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- VxWorks TCPIP协议栈
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
评论
共有 条评论