精华内容
下载资源
问答
  • C语言描述--Part1(关于表达式的所有你应该知道的东西) 在本文中,我将详细的讲解一个重要的程序设计概念,即代数表达式,它的不同的表示方式如前缀,后缀,中缀表示,如何将一种表示方式转换成另一种表示方式...
     表达式,转换和计算,用C语言描述--Part1
    (关于表达式的所有你应该知道的东西)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    在本文中,我将详细的讲解一个重要的程序设计概念,即代数表达式,它的不同的表示方式如前缀,后缀,中缀表示,如何将一种表示方式转换成另一种表示方式,以及如何用计算机计算代数表达式的值。

    每一个原理都会附有算法,C语言编写的示例性程序,以帮助新手们更清楚地理解这些概念。

    我们将使用栈和二叉树来转换表达式并计算表达式的值,所以要求读者在阅读本文之前要清楚这些基本概念。

    本文覆盖的主题有:

    • 什么是代数表达式?

    • 什么是表达式的中缀,前缀,后缀表示法?

    • 为什么对同一表达式我们需要有不同的表示方法?

    • 为什么我们要把表达式从一种形式转换成另一种形式?

    • 我们如何把表达式从一种表示形式转换成另一种表示形式?(算法,程序,例子)

    • 表达式树

    • 怎样计算一个表达式的值?(算法,程序)

    代数表达式简介:

    代数表达式是由操作数和运算符连接起来的合法的串。操作数是一个数量(数据的单位),数学运算在操作数的基础上运行。操作数可以是一个变量,比如x,y,z,也可以是一个常量,比如5,4,0,9,1等等。运算符是一个表示操作数间数学或逻辑操作的符号。大家熟悉的运算符有+,-,,*/^(本教程中^用来表示指数运算符)等等。根据操作数和运算符的定义,现在我们可以写出一个表达式的示例,如x+y*z。注意代数表达式定义中的用语“合法的串”,在前面提到的例子x+y*z中,操作数x,y,x和运算符+,*就形成了某种形式的合法的串。再举另一个例子+xyz*,此表达式中操作数和运算符就没有组成合法的串;这个表达式不是一个有效的表达式。

    一个代数表达式有三种表示方法:

    中缀表示:从我们的学校时代开始,我们就已经熟悉了这种用操作数包围着运算符的表示法,比如x+y,6*3等等。这种书写表达式的方法被称为中缀表示法。

    前缀表示:前缀表示法也被称为波兰表示法,它是一种由波兰数学家Jan Lukasiewicz发明的逻辑记法。顾名思义,前缀表示法中,运算符要放到操作数前面,比如+xy*+xyz等。

    后缀表示:后缀表示法也被称为逆波兰表示法。它与中缀和前缀表达式不同之处在于,后缀表示法中,运算符放在操作数之后,如xy+xyz+*等。

    现在,我们自然而然地会想到一个问题,我们已经由了可爱而简单的中缀表示法,为什么还要这些古怪的前缀和后缀表示法?

    事实上,令我们感到惊讶的是中缀表示并不像它看起来那么简单,特别是当计算中缀表达式的值的时候。为了计算中缀表达式的值我们需要考虑运算符的优先级和结合性的问题。

    举例说明,表达式35*4被看作(3+5)*4时计算结果得32,被看作3+(5*4)是计算得23。为了解决这个问题,需要定义运算符之间的优先级。运算符优先级规定了计算的次序。优先级高的运算符先计算,优先级低的运算符后计算。

    下表以递减的顺序列出了各个运算符的优先级。

    <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-5-62257440.gif

    现在,我们已经知道了各运算符的优先级,我们就可以确定地计算出表达式35*4的值为23。但是请等等,问题还没完全解决,对表达式6/3*2又该怎么办呢?当把这个表达式看作(6/3*2时得2,看作6/(3*2)时得1,因为*/的优先级相同。为了解决这个冲突,我们要用到运算符的结合性这个概念。运算符的结合性规定了同优先级的运算符间的运算次序。对有左结合性的运算符而言,计算次序是从左到右,而对右结合性的运算符,是从右到左计算。

    */ + -都具有左结合性。所以上面的表达式最后计算得4,而不是1

    注意:我们使用结合性的概念只是为了解决同优先级操作符间的冲突问题。

    由于使用中缀表示法时还要考虑运算符的优先级和结合性的问题,我们换用前缀和后缀表示。前缀和后缀表示相比中缀表示的优点在于计算表达式值的时候不需要考虑运算符的优先级和结合性。比如,x/y*z用前缀表示就变成了*/xyz,用后缀表示就变成xy/z*。前缀和后缀表示都能使表达式值的计算变得容易得多。(关于这点,我们将在后面详细讨论)

    但是这两种表示方式都不便于记忆,也不便于手工书写。比如,(x+y)/z*a (中缀表示)和xy+z/a*(后缀表示),哪一个更容易记住呢?

    所以,实际上我们要做的就是由用户扫描中缀表达式;将其转换成前缀或后缀形式,然后计算其值,而不用考虑括号和运算符的优先级。

    展开全文
  • C语言描述--Part1(关于表达式的所有你应该知道的东西)在本文中,我将详细的讲解一个重要的程序设计概念,即代数表达式,它的不同的表示方式如前缀,后缀,中缀表示,如何将一种表示方式转换成另一种表示方式,...
    展开全文
  • 2.如变量a,b,c都是整数,则代数式3cba++的C语言表达式为。3.C语言支持模块化程序设计方法,C程序中的模块是。4.表达式21/6*6的运算结果是。5.定义符号常量TITLE为字符串“JAVA”的命令是。6.要使用库函数,必须使用...

    一、填空题

    1.C语言以_____________作为语句的结束字符。

    2.如变量a,b,c都是整数,则代数式

    3c

    b

    a+

    +的C语言表达式为。

    3.C语言支持模块化程序设计方法,C程序中的模块是。

    4.表达式21/6*6的运算结果是。

    5.定义符号常量TITLE为字符串“JAVA”的命令是。

    6.要使用库函数,必须使用命令把存放人该库函数声

    明的文件包含到相应的源程序文件中。

    7.C语言中的函数通常由和组成。

    8.存放字符串″beijing″所需空间为字节。

    9.表达式3*20/4%10的计算结果为。

    10.已知int x=10;执行x+=x-=x-x;后,x的值

    为。

    11.标识符break不能作为用户标识符,是因为break

    是。

    12.存储字符串"\0"需要占用字节的存储单元。

    13.有int x=5;x=-5;则x的值为。

    14.定义x,y为双精度型变量的语句是。

    15.C程序的基本单位是函数,一个C程序至少包含一个

    函数。

    16.定义符号常量NUM为10的C语言表达式是。

    17.在内存中存储“A”要占用个字节

    18.是构成C语言的基本单位。

    19.设x的值为12,y的值为2;则表达式x%=(y+=3)运算后x的

    值为。

    20.C语言中,把“战争与和平”定义为符号常量BOOK的表达式

    为。

    21.当表达式中的运算符优先级相同时根据来确定

    运算的先后次序

    22.有定义int m=5;则表达式m+=m- =m%m的值为。

    23.与数学表达式

    ab y

    x

    5

    3+有相同功能的C语表达式为。

    24.C语言中,函数由函数头和函数体组成。

    展开全文
  • (49) 按条件f对关系R进行选择,其关系代数表达式为(C) A. R|X|R B. R|X|Rf C. бf(R) D. ∏f(R) (50) 数据库概念设计的过程中,视图设计一般有三种设计次序,以下各项中不对的是(D) 注:P127,要牢记 A. 自顶向下 B....
  • C语言表达式是( ) A.1.0/x/y/zB.1/x * Y * zC.1/(x * Y * z)D.1/x/y/(double)z 参考答案A 参考解析代数表达式1/(XYz)是小数转为cf语言的表达式必须是小数A选项由于l.0为浮点数计算结1果自动转换为浮点
  • 且各变量已赋正整数值则以下能正确表示代数 式 的 C 语言表达式是 ( ) A,1,0/x /y /zB.1/x * Y * zC.1/(x * Y * z)D.1/x/y/(double)z 参考答案 A 参考解析代数表达式 1/(X Y z) 是小数转为 cf 语言的表达式必须是...
  • 第3章 表达式

    2012-09-09 20:24:50
    第1章分析计算机与C语言的关系时曾提出:C语言代数式命令运算器进行各种运算。准确地说,C语言表达式命令计算机进行各种操作。“代数式”仅是表达式的一种。 C语言又称表达式语言,可见表达式C语言中的重要...

    章节导学

    第1章分析计算机与C语言的关系时曾提出:C语言用代数式命令运算器进行各种运算。准确地说,C语言用表达式命令计算机进行各种操作。“代数式”仅是表达式的一种。

    C语言又称表达式语言,可见表达式在C语言中的重要作用。

    表达式是用操作符把操作数连接起来的式子,如表达式3+a中的“+”就是操作符,3和a就是操作数(这里的a应理解为一个变量)。

    C语言表达式最重要的特征是每个表达式都有一个确定的值及类型(由上一章可知,只有数据类型确定了,相关数据的实际值才能确定)。

    数学上求值时遵循类似“先乘除后加减;只有乘除或加减时,谁在左边先算谁” 的规则。规则中的前半句有关操作符的优先级,后半句有关操作符的结合性。表达式求值时各操作符的“执行”次序由操作符的优先级、结合性和序列点决定。

    种类繁多的操作符使得C语言不仅灵活,而且功能强大。C语言中有许多常见的操作符如+、-、*、>、=等,也有许多专用于编程语言的操作符如++、--、%等。全面理解每个操作符的功能、优先级、结合性是学好C语言表达式的关键。

    学习操作符时需注意方法。以记忆操作符的优先级为例,刚接触某操作符时可以只记它大概(相对)的级别(是高?是中?还是低?)。思考是识记的前提,为什么这个操作符的优先级比那个操作符的高呢?

    准确理解操作符的功能有一定的难度,学习时需结合计算机实际的“执行”过程思考。如C语言中操作符=的作用是“赋值”而并非“等于”;3/2的值是1,而3.0/2的值是1.5等等。

    C语言中有些表达式的样子可能比较独特,如n > 5 && i % 3 = = 0、a=b=23等,但是,只要注意了优先级、结合性、序列点和数据类型四个要素,再独特、再复杂的表达式也不会成为学习的障碍。

    表达式求值的过程实际上就是计算机执行表达式的过程。实际问题用计算机解决的过程最终表现为计算机对一系列的C语言表达式求值的过程,因此,只有精通了C语言表达式,才能熟练地用表达式“指挥”计算机解决实际问题。从这个角度看,编程就是写表达式。

    第3章 表达式... 80

    3.1 概述... 80

    3.2 赋值操作符和赋值表达式... 84

    3.2.1 赋值操作符... 84

    3.2.2 类型不匹配时的赋值操作... 86

    3.2.3 复合赋值操作符... 89

    3.3 算术操作符和算术表达式... 90

    3.3.1 算术表达式的求值... 90

    3.3.2 强制类型转换操作符... 92

    3.3.3 自增自减操作符... 94

    3.4 逗号操作符和逗号表达式... 96

    3.5 值与编译系统相关的表达式... 97

    3.6 典型例题... 98

    练习3. 103


    展开全文
  • 4、设有定义:float a=2,b=4,h=3;,以下C语言表达式代数计算结果不相符的是( ) A.(a+b)*h/2 B.(1/2)*(a+b)*h C.(a+b)*h*1/2 D.h/2*(a+b)答案 B
  • 1、以下叙述正确的是( B ) A)C语言的源程序不必通过编译就可以直接运行。...以下C语言表达式中与代数式的计算结果不相符的是( B ) A)(a+b)*h/2 B)(1/2)*(a+b)*h C)(a+b)*h*1/2 D)h/2*(a+b)
  • 函数的调用 //函数的调用/*单行语句的调用,如:max(x,y);... *///实例5-2:计算代数式1+1/2!+1/3!+.....+1/m!#include"stdio.h"#include"conio.h"double jie(int m);void main(){ int i,m; float sum; ...
  • 结构静力分析计算 ─━ 线性代数方程组 全球天气预报 ─━ 环流模式方程 非数值计算的程序设计问题 例一: 求一组(n个)整数中的最大值 算法: 基本操作是“比较两个数的大小” 模型:? 例二:计算机对弈 算法:对弈...
  • 是一个python库,可用于定义,优化和计算数学表达式,结合了计算机代数系统(Computer Algebra System, CAS)和优化编译器,可以为多种数学运算生成定制的C语言代码。 由于诞生于研究机构,服务于研究...
  • (内有最新习题和ppt教程) 最新二级公共基础知识填空40题+80选择题 (1) 算法的复杂度主要包括______复杂度和空间复杂度。 答:时间 (2) 数据的逻辑结构在计算机存储空间中的存放形式称为数据的______。...
  • 5. 练习:在C语言中使用正则表达式 33. 信号 1. 信号的基本概念 2. 产生信号 2.1. 通过终端按键产生信号 2.2. 调用系统函数向进程发信号 2.3. 由软件条件产生信号 3. 阻塞信号 3.1. 信号在内核中的表示 3.2. 信号集...
  • 示该代数式的C语言表达式是 A)sqrt(abs(n^x+e^x)) B) sqrt(fabs(pow(n,x)+pow(x,e))) C)sqrt(fabs(pow(n,x)+exp(x))) D) sqrt(fabs(pow(x,n)+exp(x))) (18)设有定义:int k=0;,以下选项的四个表达式中与其他三个...
  • 嵌入式软件笔试题

    2019-07-08 15:19:00
    ,以下C语言表达式代数式 (a+b)+c计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,...
  • ,以下C语言表达式代数式 (a+b)+c计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,...
  • ,以下C语言表达式代数式 (a+b)+c计算结果不一致的是  A.(a+b)*c/2  B.(1/2)*(a+b)*c  C.(a+b)*c*1/2  D.c/2*(a+b)  参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2...
  • 笔试题 5

    2017-08-13 10:48:34
    以下C语言表达式代数式(a+b)+c计算结果不一致的是: A. (a+b)*c/2 B. (1/2)*(a+b)*c C. (a+b)*c*1/2 D. c/2*(a+b)为了向二进制文件尾部增加数据,打开文件的方式采用: A. “ab” B. “rb+” C. “wb” D. ...
  • ,以下C语言表达式代数式 (a+b)+c计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,...
  • 嵌入式笔试题

    2014-10-20 17:04:47
    ,以下C语言表达式代数式 (a+b)+c计算结果不一致的是A.(a+b)*c/2B.(1/2)*(a+b)*cC.(a+b)*c*1/2D.c/2*(a+b)参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/...
  • 北京和兴宏图科技软件笔试题目

    千次阅读 2015-07-20 20:48:49
    ,以下C语言表达式代数式 (a+b)+c计算结果不一致的是 B A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 2:为了向二进制文件尾部增加数据,打开文件的方式应采用 D A.″ab″ B.″rb+″ ...
  • 浙江大华嵌入式软件工程师笔试题

    千次阅读 2015-03-16 15:18:05
    ,以下C语言表达式代数式 (a+b)c计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 2:为了向二进制文件尾部增加数据,打开文件的方式应采用 A.″ab″ B.″rb+″ C.″wb″ D.″wb+″ 3:...
  • ,以下C语言表达式代数式 (a+b)+c计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 2:为了向二进制文件尾部增加数据,打开文件的方式应采用 A.″ab″ B.″rb+″ C.″wb″ D.″wb+″
  • 我们用C语言的位级操作来说明布尔代数的原理和应用。 我们从两个方而讲述了兀EE标准的浮点格式: 一是如何用它来表示数值, 一是评点运算的数学属性。对计算机的笲术运算有深刻的理解是写出可妎主程序的关键。 比如...
  • VexCL :用于OpenCL/CUDA 的C++向量表达式模板库。 Quantum:建立在boost::coroutines2顶层的强大的C++协同调度程序框架。 STAPL:C++并行编程框架,旨在工作在共享和分布式内存并行电脑上。 配置 配置文件,INI...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

计算代数表达式c语言

c语言 订阅