C 语言表达式

17 Mar 2025 | 5 分钟阅读

表达式是操作数通过运算符相互连接的公式,用于计算一个值。操作数可以是函数引用、变量、数组元素或常量。

让我们看一个例子

在上面的表达式中,减号 (-) 是一个运算符,a 和 b 是两个操作数。

C 语言中有四种类型的表达式

  • 算术表达式
  • 关系表达式
  • 逻辑表达式
  • 条件表达式

每种类型的表达式都接受特定类型的操作数,并使用一组特定的运算符。特定表达式的求值会产生一个特定的值。

例如

上面整行是一个语句,不是表达式。等号后面的部分是表达式。

C_Expressions

算术表达式

算术表达式是由操作数和算术运算符组成的表达式。算术表达式计算 int、float 或 double 类型的值。

当表达式只包含整型操作数时,称为纯整型表达式;当它只包含实型操作数时,称为纯实型表达式;当它同时包含整型和实型操作数时,称为混合模式表达式。

算术表达式的求值

表达式通过一次执行一个操作来求值。运算符的优先级和结合性决定了单个操作的求值顺序。

当执行单个操作时,可能会发生以下情况:

  • 当两个操作数都为整数类型时,将执行算术运算,运算结果将是整数值。例如,3/2 的结果将是 1,而不是 1.5,因为小数部分被忽略了。
  • 当两个操作数都为浮点类型时,将执行算术运算,运算结果将是实数值。例如,2.0/2.0 的结果将是 1.0,而不是 1。
  • 如果一个操作数是整数类型,另一个操作数是实数类型,则将执行混合算术运算。在这种情况下,第一个操作数将被转换为实数操作数,然后执行算术运算以产生实数值。例如,6/2.0 的结果将是 3.0,因为 6 被转换为 6.0,然后执行算术运算得到 3.0。

让我们通过一个例子来理解。

6*2/ (2+1 * 2/3 + 6) + 8 * (8/4)

表达式求值每个操作的描述
6*2/( 2+1 * 2/3 +6) +8 * (8/4)给出一个表达式。
6*2/(2+2/3 + 6) + 8 * (8/4)2 乘以 1,得到值 2。
6*2/(2+0+6) + 8 * (8/4)2 除以 3,得到值 0。
6*2/ 8+ 8 * (8/4)2 加到 6,得到值 8。
6*2/8 + 8 * 28 除以 4,得到值 2。
12/8 +8 * 26 乘以 2,得到值 12。
1 + 8 * 212 除以 8,得到值 1。
1 + 168 乘以 2,得到值 16。
171 加到 16,得到值 17。

关系表达式

  • 关系表达式是用于比较两个操作数的表达式。
  • 它是一个用于决定是否应采取行动的条件。
  • 在关系表达式中,不能将数值与字符串进行比较。
  • 关系表达式的结果可以是零或非零值。在这里,零值等价于假,非零值等价于真。
关系表达式描述
x%2 = = 0此条件用于检查 x 是否为偶数。如果 x 是偶数,则关系表达式的结果为 1,否则结果为 0。
a!=b它用于检查 a 是否不等于 b。如果 a 不等于 b,则此关系表达式的结果为 1,否则为 0。
a+b = = x+y它用于检查表达式 "a+b" 是否等于表达式 "x+y"。
a>=9它用于检查 a 的值是否大于或等于 9。

让我们看一个简单的例子

输出

C_Expressions

逻辑表达式

  • 逻辑表达式是计算零值或非零值的表达式。
  • 这是一个用于决策的复杂测试条件。

让我们看一些逻辑表达式的例子。

逻辑表达式描述
( x > 4 ) && ( x < 6 )这是一个测试条件,用于检查 x 是否大于 4 且 x 是否小于 6。仅当两个条件都为真时,条件才为真。
x > 10 || y <11这是一个测试条件,用于检查 x 是否大于 10 或 y 是否小于 11。如果任一条件为真,则测试条件的结果为真。
! ( x > 10 ) && ( y = = 2 )这是一个测试条件,用于检查 x 是否不大于 10 且 y 是否等于 2。仅当两个条件都为真时,条件才为真。

让我们看一个关于 "&&" 运算符的简单程序。

输出

C_Expressions

让我们看一个关于 "| |" 运算符的简单示例

输出

C_Expressions

条件表达式

  • 条件表达式是返回 1(如果条件为真)否则为 0 的表达式。
  • 条件运算符也称为三元运算符。

条件运算符的语法

假设 exp1、exp2 和 exp3 是三个表达式。

exp1 ? exp2 : exp3

上面的表达式是一个条件表达式,它基于 exp1 表达式的值进行求值。如果 exp1 表达式的条件为真,则最终的条件表达式由 exp2 表示;否则由 exp3 表示。

让我们通过一个简单的例子来理解。

输出

C_Expressions
下一个主题数据段