精华内容
下载资源
问答
  • C语言 表达式计算

    2014-09-06 01:00:03
    对从键盘输入一个表达式,进行运算,最后输出计算结果。 计算范围:包括一般的算术运算(加、减、乘、除、括号)和常用的函数运算(三角函数、自然指数函数、自然对数函数、绝对值函数、平方根函数)。
  • C语言表达式计算

    2012-02-01 19:52:45
    能够计算如:-5+3,(3+5)*(5+3),sin(3.2)*cos(6.5)/(6*exp(6))等表达式,基本上可以解析C语言的全部表达式,但暂不支持C语言中返回值为int或自变量为2个的函数。
  • C语言表达式计算原代码详解,可进行+-*/等包括括号运算
  • C语言里,优先级和结合性规则告诉我们哪些符号组成一个意群,同时这些意群内部如何进行计算的次序始终未定义。在表达式: x = f() + g() * h(); g() 和 h() 组成一个意群进行乘法运算,单两者的调用可能以任何顺序...

    C语言里,优先级和结合性规则告诉我们哪些符号组成一个意群,同时这些意群内部如何进行计算的次序始终未定义。在表达式:
    x = f() + g() * h();
    g() 和 h() 组成一个意群进行乘法运算,单两者的调用可能以任何顺序次序出现。同理f()调用,可能在乘法之前,也可能在乘法之后,也可能在g() 和 h()调用之间。唯一可以确定的是乘法在加法之前进行。之所以未定义是想让编译器利用自身架构特点,或者充分利用寄存器中的值。
    有专家建议,在C语言里记住 乘法先于加法和减法,涉及其他操作符时一律加上括号,加以明确。

    “&&” 和 "||"的计算次序是严格先左后右的。

    展开全文
  • c语言表达式计算顺序

    2020-03-28 11:18:57
    C 语言中,任何表达式的子表达式求值顺序是未指定的,编译器可能以任意顺序对这个表达式求值,而且同一表达式再度求值时可能会采用另一种顺序。 C 中有运算符从左到右 / 从右到左结合性,但没有从左到右 / 从右到左...
    • 普通的表达式计算按运算符优先级来就可以了。
      在表达式中,若有几个优先级相同的操作符,结合性就起仲裁的作用,由它决定哪个操作符先执行,先执行可以看做是加上括号。大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减号结合, 执行a- b 的运算, 再执行加 c 的运算。除了自左至右的结合性外, C 语言有三类运算符参与运算的结合方向是从右至左。即: 单目运算符, 条件运算符, 赋值运算符

    比如右结合(从右到左),那就是,把右边的运算用括号先括起来,再与左边的进行计算,这样自然是先执行右边的了。 比如 int a,b=1,c=2; a=b=c; 这里 '='的结合性是从右到左。 故 a=b=c; 可变为 a=(b=c); 即 a 最终为 2。

    再比如,求 -i++-++i 的值:由于 -++ 都是单目运算符,且处于同一大优先级。所以 都是先执行 ++ 操作。但在 -i++ 中, ++ 后置于变量,所以 i 原来的值先被使用,然后再自加。


    • C 语言没有指定任何表达式的子表达式求值顺序
      编译器可能以任意顺序对这个表达式求值,而且同一表达式再度求值时可能会采用另一种顺序。

    如:表达式 ( f1( ) + f2( ) ) ,操作符 + 具有从左到右的结合性,但在运行时对f1( )f2( ) 这 2 个函数的调用可以是任意顺序。f1( ) 可能是第一个被调用,也有可能是 f2( ) 第一个被调用。
    f1( ) 或者 f2( ) 会改变另一个函数所使用的变量,那么整个表达式的结果会依赖于这两个函数的计算顺序!!!

    • C 语言也没有指定函数各个参数求值顺序。
    printf("%d 	%d\n", ++n, power(2, n));
    

    上面的语句执行结果不同的编译器可能不一样!!

    展开全文
  • 这是用C语言写的表达式计算的工具,可以算加减剩除括号等
  • 但是表达式计算顺序(或者说每个逗号分割的函数调用)其实是没有规定的。这在K&R影印版第二版52页最末一段说的非常清楚,下面的f和g不一定谁先调用: C, like most languages, does not specify the order in ...

    http://sunxiunan.com/?p=1742

    浏览Q.yuhen的博客这篇文章 http://www.rainsts.com/article.asp?id=959 发现一个小问题,估计有类似想法的同学也有,所以记录一下。

    问题在于这句话:

    “很显然,依据 cdecl 规则,"printf(…, test(2), test(1))" 中的 printf 函数参数依次从右向左 "入栈"(暂且用这个说法)。因此 test(1) 被先调用,然后才是 test(2),上面的汇编代码也说明了这点。”

    尽管事实是这样的,但这是一个有问题的说法。

    cdecl的入栈顺序是没错的,这个入栈顺序是针对每个逗号分隔的表达式结果而言。也就是说对于每个结果一定是这样的顺序。但是表达式计算顺序(或者说每个逗号分割的函数调用)其实是没有规定的。这在K&R影印版第二版52页最末一段说的非常清楚,下面的f和g不一定谁先调用:

    C, like most languages, does not specify the order in which the operands of an operator are evaluated. (exceptions are && || ?: and ",") for example x = f() + g();

    另外在63页开始:

    The commas that separate function arguments, variables in declarations, etc., are NOT comma operators, and do NOT guarantee left to right evaluation.

    这也就是说逗号分隔的函数参数与逗号操作符是不一样的,不保证从左至右的计算顺序(当然也没有保证从右至左)。

    注意这个evaluation,其实就是对test(2), test(1)的调用。如果这些调用有边界效应,在不同编译器、操作系统上可能会得到不同的结果。另外类似的问题有对在参数列表中,同一个变量调用++两次以上。

    如果要保证求值顺序(注意不是求值结果的入栈顺序),只能用临时变量保存调用结果,或使用逗号操作,&& || :? 这样可以保证求值顺序的操作才行。

    其实我在前面这篇博客已经提到了这个问题,只是看到这个提法再重申一次。“C语言中的表达式求值问题http://sunxiunan.com/?p=1684

    参考资料:

    http://www.andromeda.com/people/ddyer/topten.html 参考第七条

    C陷阱与缺陷 3.7求值顺序

    转载于:https://www.cnblogs.com/lua5/archive/2010/12/29/1901576.html

    展开全文
  • 用两种方式实现表达式自动计算 - PAGE 2 - 设计思想 计算算术表达式可以用两种方法实现 1.中缀转后缀算法 此算法分两步实现先将算术表达式转换为后缀表达式然后对后缀表达式进行计算具体实现方法如下 中缀转后缀 ...
  • 关于C语言表达式匹配

    2009-10-15 19:40:04
    输入一个C语言表达式,判断是否符合表达式规则,并计算
  • C语言表达式计算如下归纳,希望能帮到大家理解。 任何式子只要含有i++,即便是带有(i++)也不会影响其的运算,i++还是只是代表+1而已。如第一题。 逗号运算不管是带括号是覆盖前面的值,不带括号的是累加。...

    C语言表达式的计算如下归纳,希望能帮到大家理解。

     

    • 任何式子只要含有i++,即便是带有(i++)也不会影响其的运算,i++还是只是代表+1而已。如第一题。

    • 逗号运算不管是带括号是覆盖前面的值,不带括号的是累加。如第二题

    • 关于赋值运算,都是先计算右边的式子,一步一步回到最左边。如第三题

     

    蓝色表示正确答案

    题目:下面所有变量的定义为:int i=3,j=5,b; float x=2.5; double y=5.0; char a='a';

     

    第一题

    (X+Y)+i++   

    根据运算的规则,应该先算(X+Y)=7.5然后再算(X+Y)+i=10.5,最后算++,但是并不是10.5+1,而是i+1;

    所以(X+Y)+i++ =10.5

     

    第二题

    a=a+i, a+j 

    先计算a=97+3(a的ASCII值为97)=100  然后  a=a+5=100+5=105,

    所以a=a+i, a+j=105   

    a=(a+i,a+j) 

    同样也是先计算a=a+i=97+3=100,然后a=a+j=97+5=102;因为()的原因所以a的值并没有被修改。

    所以a=(a+i,a+j)=102

     

    第三题

    i-=j*=x+y   

    值得注意的是此处有一个*号,是不是以为他的优先级会更高呢?不是这样的。正确是解法是:

    x+y=7.5;       j=j*7.5=37;   i=i-37=3-37=-34;(这里的i=37是因为i为整形的,所以最后会舍去小数部分)。

    所以i-=j*=x+y=-34

     

     

     

    展开全文
  • C语言表达式与语另类解释

    千次阅读 2014-04-22 15:32:55
    C语言表达式与语另类解释 这段日子断断续续的研究C语言,前一时间批判了传统的C语言运算符分类法,接下来很自然的对象是C语言表达式和语句,因为一直对C语言表达式和语句有相当多的“牢骚”,这些牢骚多是些对...
  • c语言中缀表达式计算

    2015-01-03 18:15:23
    利用c语言写的中缀表达式,主要数据结构是栈。
  • C语言表达式求值.docx

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

    2019-03-05 18:14:09
    /*----------------------------------------------...功能:实现表达式计算,其中可包括+ - * / () 输入示例: 3 1+2+3+4+5+10 2.2/3+100 (56-40)/(4+2) 输出示例: res = 25.0 res = 100.7 res = 2.7 ...
  • C语言实现表达式计算

    2010-04-21 10:40:30
    本段程序为以课程的作业(数据结构),有两段程序(中缀转后缀计算表达式,直接计算两种),完全用turbo c编写,兼容性良好(不存在turbo c上能运行,在vc上报错的现象)!当时做的时候费了很多脑经,现在分享出来,...
  • C语言表达式求值

    2012-07-16 15:09:01
    自己的期末作业,主要是用数据结构里面的栈的知识实现的表达式求值,有括号,小数点,也有输入不规范判错等等,并且计算结果能以文本形式存起来
  • 第二步,读出后缀表达式并进行计算;边转换边计算的算法;此算法的基本思路是将中缀表达式按照转换后缀的表达;首先,用一个char数组将中缀表达式读入,对数组;为了方便计算计算 一、设计思想 两种
  • 一个表达式是一系列运算符和算子的组合,用来计算一个值 例如: total = 86; count = count + 1; a = (b / c) * d; ... 运算符(operator) 指进行运算的动作,比如加法运算符“+”,减法运算符“-” 算子...
  • 用两种方式实现表达式计算,包括整数,小数,括号等的运算。
  • /* 表达式求值输入一个表达式如 1+2*3#程序可计算出结果为 7 支持以下符号 + - * / ( ) ^ . 可以计算整数小数 其中^表示次方2^5 表示 2 的 5 次方 */ /*头文件*/ #include <stdio.h> #include <malloc.h> #include ...
  • 计算时要考虑运算符的优先级、结合性及数据类型的转换;计算机中的表达式都写在一行中。表达式有算术、赋值、关系、逻辑、条件和逗号等。在表达式的后边加个分号就是表达式语句。除了控制语句外,几乎都是表达式...
  • 本程序支持括号以及小数计算 基本思想 先将中缀表达式转换为后缀表达式,再求值 中缀转后缀可以借鉴该博文 表达式求值可以借鉴该博文 我的代码 #include <stdio.h> #include <stdlib.h> #include <...
  • C语言----内存中的数据运算 1、数据在内存中的存储方式----补码 C语言程序中,所有变量的值都以补码的形式存储在内存之中。计算机中数据的表示方法有三种形式:原码、反码和补码。 原码:直接将数据转化为二进制...
  •   之前一个好兄弟问我表达式计算的一个程序,这个主要锻炼栈的使用。但是他向我提出了一个问题,如果多位数计算,好像常规的表达式转化就不灵了。即常规的程序只能计算10以下的数字,对于这个问题进行下探索。  ...
  • 算法实现核心思想为先计算括号内的表达式,当无括号时先计算次方再计算乘除加减。 首先,先实现对无括号表达式的处理算法。 因为是使用链表进行存储表达式的,所以先贴出链表的源码 #ifndef LIST_H #define LIST...
  • 优先级与结合性理解 ...那么当表达式中有两个或两个以上的运算符的优先级相同,那么此时我们应该先计算哪一个运算符呢?比如​   ​int b=8/4*2;   ​这个语句,我们应该是将其当做   ​int b=(8/4
  • 给大家搞了一个C语言用栈实现表达式计算 可以支持±*/() 可以进行小数,整数运算,但是吧,精度这个问题我就没解决 建立了两个栈,一个存储运算符,一个存储数字 (是存在运算符栈的 遇到)就要pop栈直到把遇到的第...
  • c语言表达式求值顺序

    千次阅读 2007-09-23 21:29:00
    c语言没有明确规定表达式的求值顺序!除了逻辑表达式的短路求值! 例如下面的程序:int a = 10;int func(){ a = 5; return 5;}a + func()的值就不定。在gcc下是先计算func,所以值为10java明确规定了求值顺序是从...
  • 表达式表示在编译或运行期间计算出来的一个值,由地址(如常量、变量或函数调用)和运算符(如*, /, + 或 -)组成。地址的数据类型和所用的运算符决定了表达式的类型。在SCL中可能有下列表达式:一、表达式概述:1、算术...

空空如也

空空如也

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

c语言表达式计算

c语言 订阅