• 大小: 849KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-08
  • 语言: 其他
  • 标签: 数据结构    

资源简介

·问题描述 表达式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

评论

共有 条评论