
3.1 运算基础
运算的本质是根据已有数据,进行各种运算处理,得到新的数据。所以,运算的基础就是数据。在数据的表示方法中,声明的变量只是一个空的指代,并没有和具体的数据进行关联。如果要使用变量,就要把数据和变量进行关联,让指代具体化。本节将详细讲解如何将变量和数据进行关联。
3.1.1 变量赋值

赋值就是将变量和数据进行关联,明确变量的指代关系。例如,当人们说去买衣服,这里的衣服是一个泛指。衣服的好坏是无法评价的。只有将衣服买回来,这件衣服才是一个具体的东西。这样才能与朋友评价这件衣服的好坏。
同理,声明变量只是告诉程序有一个数据,但数据还未知,还要将获取的值赋给变量,建立明确的指代关系,这样才能参与后续的处理。在C语言中,变量获取值的方式有以下两种。
1. 用户输入
用户输入是常见的变量赋值方式。获取用户输入值(简称输入值)的方式有很多种,在这里使用函数scanf()获取输入值,并将其赋给变量。函数scanf()的语法,如下:

在函数scanf()中包含占位符、&及变量名3个部分。这3个部分都是必须存在的。函数scanf()常用的占位符如表3.1所示。
表3.1 函数scanf()常用的占位符

【示例3-1】使用函数scanf()获取输入值并将其赋给变量。
程序如下:

运行程序,输出以下内容:

在上面程序中,用户输入数字3后按回车键,函数scanf()会将获取到的数字3赋给变量Age。这样就将变量指向了数字3。
函数scanf()除了可以获取单个输入值,还可以获取多个输入值。函数scanf()获取多个输入值的语法如图3.1所示。scanf()语法中的占位符个数和变量名个数是相同的。如果占位符为3个,变量名也要有3个,而且占位符的类型要与变量的一致。

图3.1 函数scanf()获取多个输入值的语法
这里的分隔符可以是任何符号,但是在程序中使用了什么符号作为分隔符,那么在用户输入值时就要使用什么符号分隔值,并且要注意中/英文输入法要一致。例如,如果在程序中使用中文逗号作为分隔符,那么用户在输入两个数字时也要使用中文逗号分隔这两个数字,而不能使用英文逗号分隔这两个数字。
【示例3-2】使用函数scanf()获取多个输入值并将其赋给对应变量。
程序如下:

运行程序,输出以下内容:

在上面程序中,获取了用户输入的“100.5”“空格”“31.5”后按回车键,函数scanf()会将获取到的输入值分别赋给变量height与weight。这样就将变量height与weight分别指向了数据“100.5”与“31.5”。
2. 等号赋值
在声明变量后,可以使用运算符等号(=)为变量赋值。等号为变量赋值的语法如图3.2所示。

图3.2 等号为变量赋值的语法
【示例3-3】先声明变量,再为变量赋值。
程序如下:

运行程序,输出以下内容:

等号还可以直接在变量声明中为变量赋值。等号在变量声明中为变量赋值如图3.3所示。

图3.3 等号在变量声明中为变量赋值
【示例3-4】等号在变量声明中为变量赋值。
程序如下:

运行程序,输出以下内容:

当使用等号为变量赋值时,等号是C语言的一种运算符,其作用就是将某个数值赋给特定的变量,所以又将等号称为赋值运算符,等号两侧的变量和数值称为操作数,并可以表示如下:

将操作数的个数称为元或目。根据操作数的个数,运算符被分为3种类型,分别为一元运算符、二元运算符、三元运算符,也可以称为一目运算符、二目运算符与三目运算符。赋值运算符属于二目运算符。
3.1.2 表达式

表达式是由数值、运算符等按照特定规则排列构成的组合。例如,distance=100就是一个表达式,将该表达式称为赋值表达式。赋值表达式包含了操作数(distance、100)与赋值运算符(=)两部分。
1. 最简单的表达式
在C语言中,最简单的表达式就是常数和变量,但在程序中不能直接书写常数或变量。如果直接在程序中书写常数是没有任何意义的。如果在程序中直接书写变量,程序运行时会提示变量未被定义。
【示例3-5】直接在程序中书写常数与变量。
程序如下:

运行程序,输出以下错误信息:

2. 表达式的值
表达式的值是指表达式运算后的值。在赋值运算中,将数值赋给变量就是一次运算。
【示例3-6】输出表达式的值。
程序如下:

运行程序,输出以下内容:

3. 表达式的数据类型
和变量一样,表达式也有数据类型之分。表达式的数据类型是根据运算的值来确定的。例如,int age=10,那么age=10表达式的数据类型就是int。
3.1.3 多个表达式

表达式不仅可以单个使用,还可以利用运算符逗号(,)让多个表达式组合起来使用,并将这个组合起来使用的表达式称为逗号表达式。
逗号表达式的语法如下:

在逗号表达式中,运算是按从左向右的顺序进行的。整个逗号表达式的值、数据类型都与最后运算的子表达式的值、类型一致。
【示例3-7】输出逗号表达式的值。
程序如下:

运行程序,输出以下内容:

从程序运行结果可以看出,逗号表达式的值为最后一个表达式的值。
【示例3-8】验证逗号表达式的数据类型。
程序如下:

运行程序,输出以下内容:

从程序运行结果可以看出,逗号表达式的运算结果为双精度类型,与最后一个表达式的运算结果的数据类型一致。