精华内容
下载资源
问答
  • 此程序先将输入的中缀表达式转化为后缀表达式,然后计算后缀表达式的值,此为栈的应用。
  • 有不对地方还望指出来,让我改正。谢谢。存一个代码#include#include#include#include#define Stack_Size 1010#define INF 21000000char cmp[7][8]= {">><<<>>",">><<<>&...

    有不对的地方还望指出来,让我改正。谢谢。存一个代码

    #include

    #include

    #include

    #include

    #define Stack_Size 1010

    #define INF 21000000

    char cmp[7][8]= {">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=?",">>>>?>>","<<<<="};

    /*

    > > < < < > >

    > > < < < > >

    > > > > < > >

    > > > > < > >

    < < < < < = ?

    > > > > ? > >

    < < < < < ? =

    */

    typedef struct

    {

    char Elem[Stack_Size];

    int top;

    } Operator;

    typedef struct

    {

    double Elem[Stack_Size];

    int top;

    } Number;

    void InitStack_Operator(Operator* S)

    {

    S->top=-1;

    }

    void InitStack_Number(Number* S)

    {

    S->top=-1;

    }

    int Pop_Operator(Operator* S)

    {

    if(S->top==-1)

    {

    printf("运算符栈为空\n");

    exit(10);

    }

    S->top--;

    return 1;

    }

    int Pop_Number(Number* S)

    {

    if(S->top==-1)

    {

    printf("数字栈为空\n");

    exit(11);

    }

    S->top--;

    return 1;

    }

    int Push_Operator(Operator* S,char ch)

    {

    if(S->top==Stack_Size-1)

    {

    printf("运算符栈满\n");

    exit(12);

    }

    S->top++;

    S->Elem[S->top]=ch;

    return 1;

    }

    int Push_Number(Number* S,double ch)

    {

    if(S->top==Stack_Size-1)

    {

    printf("运算符栈满\n");

    exit(13);

    }

    S->top ++;

    S->Elem[S->top]=ch;

    return 1;

    }

    char Gettop_Operator(Operator *S)

    {

    if(S->top==-1)

    {

    printf("运算符栈为空\n");

    exit(17);

    }

    return S->Elem[S->top];

    }

    double Gettop_Number(Number *S)

    {

    if(S->top==-1)

    {

    printf("数字栈为空\n");

    exit(18);

    }

    return S->Elem[S->top];

    }

    double Calc(double a,double b,char opt)

    {

    double res;

    if(opt=='+') res=a+b;

    if(opt=='-') res=a-b;

    if(opt=='*') res=a*b;

    if(opt=='/')

    {

    if(fabs(b)<0.00000001)

    {

    printf("发生除0错误\n");

    exit(15);

    }

    res=a/b;

    }

    //printf("%.2lf %c %.2lf = %.2lf\n",a,opt,b,res);

    return res;

    }

    int change(char ch)

    {

    switch(ch)

    {

    case '+':

    return 0;

    case '-':

    return 1;

    case '*':

    return 2;

    case '/':

    return 3;

    case '(':

    return 4;

    case ')':

    return 5;

    case '#':

    return 6;

    }

    return -INF;

    }

    char compare(char a,char b)

    {

    if(cmp[change(a)][change(b)]=='?')

    {

    printf("表达式错误\n");

    exit(16);

    }

    return cmp[change(a)][change(b)];

    }

    int check(char *s,int len)

    {

    for(int i=0; i

    {

    if(s[i]>='0'&&s[i]<='9') continue;

    if(s[i]=='+'||s[i]=='-'||s[i]=='*') continue;

    if(s[i]=='/'||s[i]=='('||s[i]==')') continue;

    return 0;

    }

    return 1;

    }

    int main()

    {

    char a[1010],b[1010];

    int len;

    Operator signs;

    Number number;

    InitStack_Number(&number);

    InitStack_Operator(&signs);

    Push_Operator(&signs,'#');

    double x,y;

    scanf("%s",a);

    len=strlen(a);

    if(check(a,len)==0)

    {

    printf("输入中存在多余字符\n");

    exit(19);

    }

    a[len]='#';

    int i,f=0,k=0;

    Push_Operator(&signs,'#');

    for(i=0; i<=len; i++)

    {

    if((a[i]>='0'&&a[i]<='9')||a[i]=='.')

    {

    b[k++]=a[i];

    f=1;

    continue;

    }

    if(f)

    {

    b[k]='\0';

    Push_Number(&number,atof(b));

    f=0;

    k=0;

    }

    switch(compare(Gettop_Operator(&signs),a[i]))

    {

    case '

    Push_Operator(&signs,a[i]);

    break;

    case'=':

    Pop_Operator(&signs);

    break;

    case'>':

    y=Gettop_Number(&number),Pop_Number(&number);

    x=Gettop_Number(&number),Pop_Number(&number);

    Push_Number(&number,Calc(x,y,Gettop_Operator(&signs)));

    Pop_Operator(&signs);

    i--;

    break;

    }

    }

    double ans=Gettop_Number(&number);

    printf("%.2lf\n",ans);

    return 0;

    }

    展开全文
  • ::iterator b = v.begin(); b < v.end();...}// 计算后缀表达式的值,仅支持加减乘除运算、操作数为非负整数的表达式。int postfix_eval(const char * postfix){const size_t N = strlen(postfix);if...

    ::iterator b = v.begin(); b < v.end(); b++)

    {

    strcat(infix, (*b).c_str());

    }

    return infix;

    }

    // 计算后缀表达式的值,仅支持加减乘除运算、操作数为非负整数的表达式。

    int postfix_eval(const char * postfix)

    {

    const size_t N = strlen(postfix);

    if (N == 0)

    {

    return 0;

    }

    STACKoperand(N); // 堆栈存放的是操作数

    for (size_t i = 0 ; i < N; i++)

    {

    switch (postfix[i])

    {

    int op1, op2;

    case ''+'':

    op1 = operand.pop();

    op2 = operand.pop();

    operand.push(op1 + op2);

    break;

    case ''-'':

    op1 = operand.pop();

    op2 = operand.pop();

    operand.push(op1 - op2);

    break;

    case ''*'':

    op1 = operand.pop();

    op2 = operand.pop();

    operand.push(op1 * op2);

    break;

    case ''/'':

    op1 = operand.pop();

    op2 = operand.pop();

    operand.push(op1 / op2);

    break;

    default:

    if (isdigit(postfix[i])) // 执行类似atoi()的功能

    {

    operand.push(0);

    while (isdigit(postfix[i]))

    {

    operand.push(10 * operand.pop() + postfix[i++] - ''0'');

    }

    i--;

    }

    }

    std::cout << operand << std::endl; // 输出堆栈的内容

    }

    return operand.pop();

    }

    // 本程序演示了如何后缀表达式和中缀表达式的相互转换,并利用堆栈计算后缀表达式。

    // 转换方向:org_infix --> postfix --> infix

    int main(int argc, const char *argv[])

    {

    // const char *org_infix = "(5*(((9+8)*(4*6))+7))"; // section 4.3

    const char *org_infix = "(5*((9*8)+(7*(4+6))))"; // exercise 4.12

    std::cout << "原始中缀表达式:" << org_infix << std::endl;

    char *const postfix = new char[strlen(org_infix) + 1];

    infix2postfix(org_infix, postfix);

    std::cout << "后缀表达式:" << postfix << std::endl;

    char *const infix = new char[strlen(postfix) + 1];

    postfix2infix(postfix, infix);

    std::cout << "中缀表达式:" << infix << std::endl;

    std::cout << "计算结果是:" << postfix_eval(postfix) << std::endl;

    std::cout << "计算结果是:" << postfix_eval("5 9*8 7 4 6+*2 1 3 * + * + *") << std::endl; // exercise 4.13

    delete []infix;

    delete []postfix;

    return 0;

    }

    展开全文
  • 逆天功能:表达式查错。一般功能:前、中、后序遍历,层序遍历,逐个访问、计算。核心功能:计算表达式的值
  • 读取输入字符存入数组中,逐个扫描数组元素遇操作数进栈,遇运算符计算并将结果进栈继续上述过程,直至数组读取完
  • 数据结构程序(C语言):输入一个算术表达式,由常量、变量、运算符和括号组成(规定:操作数只能为正整数,而操作符只能是+、-、×、/这几个二元运算符,用“#”表示表达式结束),输出对算术表达式计算的结果。...
  • Problem Description Reverse Polish notation (RPN) is a method for representing expressions in which the operator symbol is placed after the arguments being operated on. Polish notation, in which ...
  • 题目概述:表达式只含+,-运算符
    题目概述:表达式只含+,-运算符,操作数为整数,以封号结尾,例:233-67+89;
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #include <ctype.h>
    #define maxn 10000
    
    int main()
    {
        char expn[maxn];
        scanf("%s",expn);
        double tmp1=0,tmp2=0;
        char ch1[10],ch2[10],op;
        int i=0,j=0;
        while(expn[i]!='+'&&expn[i]!='-'){
            ch1[j++]=expn[i++];
        }
        tmp1=atof(ch1);//得到表达式首个操作数
        while(1){
            j=0;
            op=expn[i++];
            while(expn[i]!='+'&&expn[i]!='-'&&expn[i]!=';'){
                ch2[j++]=expn[i++];
            }
            tmp2=atof(ch2);//得到第二个操作数
            //根据操作符更新第一个操作数
            if(op=='+')tmp1+=tmp2;
            else if(op=='-')tmp1-=tmp2;
            if(expn[i]==';')break;
        }
        printf("=%.2f\n",tmp1);
        //system("pause");
        return 0;
    }
    

    展开全文
  • #include<stdio.h> main() { int a; printf("请输入一个数字\n"); scanf("%d",&a); switch(a) { case 1:printf("M\n"); break; case 2:printf("T\n"); break; ...case 4:pr...

    #include<stdio.h>

    main()

    {

    int a;

    printf("请输入一个数字\n");

    scanf("%d",&a);

    switch(a)

    {

    case 1:printf("M\n"); break;

    case 2:printf("T\n"); break;

    case 3:printf("W\n"); break;

    case 4:printf("TH\n"); break;

    case 5:printf("F\n"); break;

    case 6:printf("S\n"); break;

    case 7:printf("SU\n"); break;

    default:printf("error\n");

    }

    }

    转载于:https://www.cnblogs.com/lj-1568/p/4379504.html

    展开全文
  • 负数的计算过程:(-1) 转变为 (0-1) 哈哈~   分成六个点: 1.我文件结构 2.顺序堆栈头文件 3.头文件引入与自定义常量和类型 4.主处理函数 5.测试主函数 6.测试结果   1.我文件...
  • Problem Description Here has an function: f(x)=|a∗x3+b∗x2+c∗x+d|(L≤x≤R) Please figure out the maximum result of f(x). ...Multiple test cases(less than 100). For each test case, there will be...
  • C语言实现二叉树的建立、遍历和计算表达式的值(代码已调通,直接可运行) 注意:程序控制台输入需要在英文状态下输入表达式和终止符,否则会出现非法输入而终止程序 #include <stdio.h> #include <stdlib...
  • C语言计算表达式的近似

    千次阅读 2018-11-01 20:41:55
    编写一个程序,计算上式近似(直到最后一项绝对值小于eps,其中x和eps是键盘输入,且|x|&amp;amp;lt;1.0),并将结果和自己学号(学号按字符串处理)写入到out.dat文件中保存起来。 #include&amp;...
  • 数据结构实验----表达式值C语言版。利用堆栈,解决了只能计算一位数bug。内含实验报告,以供参考。欢迎下载。呵呵 frcsun@gmail.com
  • 算术表达式C语言栈)

    千次阅读 多人点赞 2020-11-16 15:24:08
    利用教科书表3.1给出的运算符优先关系,实现对算数四则混合运算表达式的,并仿照教科书的例3.1演示在求中运算符栈、运算数栈、输入字符和主要操作的变化过程。 测试数据: 1+2+3+4 88-15 1024/48 1024/(48) ...
  • C语言 计算给定字符串表达式的值

    千次阅读 2020-06-13 09:36:08
    C语言 计算给定字符串表达式的值 可以包括加减乘除运算以及括号运算 代码 #include<stdio.h> #include<string.h> #define maxn 100005 char s[maxn],infixList[maxn][10]; char suffix[maxn][10]...
  • 利用教科书表 3.1 给出的算符优先关系,实现对算术四则混合运算表达式的,并仿照教科书的例 3.1 演示在求中运算符栈、运算数栈、输入字符和主要操作的变化过程。 实现提示 1 设置运算符栈和运算数栈辅助分析...
  • 表达式C语言

    千次阅读 多人点赞 2018-11-01 14:47:49
    代码可以实现的功能: 可以计算任意整型 但是只可以进行 + - * / () 运算 ...因为定义了两个栈(存放不同类型的值,一个存放字符,一个存放数值),所以初始化,入栈,出栈,取栈顶元素的函数都要写两遍 然后核心就...
  • 栈实现表达式C语言

    万次阅读 多人点赞 2016-10-28 11:32:41
    刚刚学习C语言的时候很多人就写过计算器,但是当时写的计算器只能进行一步四则运算;对于一次输入(1+2)*3+4这样的运算则没有办法计算。 本篇博文利用栈这种数据结构实现了支持带...然后利用后缀表达式求取表达式的值
  • 利用后缀表达式的思想,输入一个字符串,计算。   计算方案 #include "LinkStack.h" int priority(char ch) { switch(ch) { case '(': return 3; case '*': case '/': return 2; ...
  • “栈”典型应用—表达式C语言实现)

    万次阅读 多人点赞 2012-06-13 00:30:20
    表达式是程序设计语言编译中一个基本问题。它实现就是对“栈”典型应用。本文针对表达式使用是最简单直观算法“算符优先法”。 我们都知道算术四则运算运算规则是: 先乘除,后加减。 从左到...
  • 问题:break在for循环、while循环等... switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就...
  • 编写程序 expr,计算从命令行输入的逆波兰表达式的值,其中每个运算符或操作数用一个单独的参数表示。例如,命令 expr 2 3 4 + * 计算表达式2x(3+4)的值 算法实现 getfloat.c: // getfloat.c #include<stdio....
  • C语言表达式.docx

    2020-12-23 00:26:19
    一实验目的 帮助学生熟练掌握栈的基本操作 并通过用算符优先法对表达式求值的过程深刻领会用 栈解决实际问题的基本方法 二实验内容 编写程序实现从键盘终端输入语法正确的算术表达式计算表达式的值 为了避免算符的...
  • C语言实验——计算表达式

    千次阅读 2017-10-20 09:39:31
    C语言实验——计算表达式 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 计算下列表达式值:    Input 输入x和n的值,其中x为非负实数,n为正整数。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,396
精华内容 558
关键字:

计算表达式的值c语言

c语言 订阅