本章重点 • 赋值运算符 • 算术运算符 • 比较运算符 • 逻辑运算符
大家学习了上一章中介绍的变量和常量,现在已经可以将数据保存在程序中了,下一步的工作就是操作并利用保存的数据。本章将介绍C语言中的运算符,在这些运算符的帮助下,可以完成变量赋值、变量比较、数学计算、组合逻辑关系等基本的变量操作。此外,本章还将简单介绍两种控制程序流程的方法:选择和循环。经过本章的学习之后,大家就可以编写一些简单的小程序了。
3.1 运算符与表达式
在C语言中,表达式是一种有值的语法结构,它是由变量、常量和有返回值的函数调用组合这几种基本元素而成的。如果一个表达式中包含多个基本元素,那么就需要运算符作为它们的黏合剂。
根据上述定义,变量、常量和有返回值的函数调用本身都可以看作一个表达式。对于前两者而言,表达式的值就是这两个量本身;对于函数调用而言,表达式的值就是函数调用的返回值。不清楚函数的概念不要紧,后文中会详细介绍函数的定义和使用方法。
下面是一个最简单的常量表达式:
100
同样地,下面对函数func的调用也是一个表达式:
func()
下面是一个略微复杂一点儿的表达式:
250100 + 3func()
上面的表达式也可以看成是下面两条表达式使用加号“+”相连接的结果:
250100
3func()
需要注意的是,在C语言中,两个表达式基本元素之间必须由运算符相连接,这样程序才能明白如何创建一个新的包含这两个基本元素的表达式,并对其赋值。
3.2 赋值运算符
等号“=”是大家非常熟悉的一个符号,通常它被用来在等式中表示左右两边的相等关系,例如5 + 8 = 13就是由等号组成的一个正确的等式。
在C语言中,等号“=”的作用不是表示相等关系,而是赋值,即将等号右侧的值赋给等号左侧的变量。接下来列举几种常用的赋值运算符,如表3-1所示。
表 31 常用的赋值运算符
上表中第三行及之后的运算符都被称为复合赋值运算符,这是因为它们同时完成了算术运算和赋值的两种功能。这些算术运算符会在本章中加以介绍。
脚下留心:变量与变量值 大家可能会有疑问:变量不就是变量本身吗?为什么会有“变量值”这一说法呢?应当注意的是,一个变量在不同时刻可以对应多个不同的值,这意味着“变量”和“变量值”并不是一一对应的关系。考虑例程3-1: 例程 31 为变量value进行三次赋值
variable = 20;
variable = 30;
variable = 40;
执行第二条语句后,变量variable的值被设为20,执行第三条语句后,变量variable的值被设为30,最后一条语句执行后,variable的值又变成了40。执行结束后,变量variable仍然是开始时声明的那个变量,但是在整个执行过程中,它的值(即变量值)发生了三次变化,因此变量和变量值是不同的两个概念。 赋值语句还有其它的写法吗?能不能同时给两个变量赋值?能不能将等号左右两边的标识符交换呢?很遗憾,类似例程3-3中的语句在C语言中是无效的: 例程 32 无效的赋值语句
variable1, variable2 = 45, 60;
第一条语句的含义是“将variable的值赋给常量20 + 35”,但是常量的值是不能修改的。试问如果通过赋值语句将20 + 35的值修改为variable的值(例如100),那下一次在程序中出现20 + 35时,它是等于55呢,还是等于100呢?大家会发现这是很荒谬的,因为一个常量的值就是它本身,而不能被修改为不等于其本身的另外一个值。
第二条语句或许是要将45和60分别赋给变量variable1和variable2,但是C语言并不支持这种写法。必须将其拆分成两条语句,如例程3-4所示:
例程 33 为两个变量赋值
3.3 算术运算符
算术运算符用来帮助程序员完成各种数学运算。本小节将讲解C语言里的算术运算符的使用方法,学过本小节之后,大家就可以实现出一些有意义的算术表达式了。
3.3.1 算术运算符示例 表3-2中列出了C语言中所有的算术运算符: 表 32 C语言中的算术运算符