第 5 章 运算符、表达式和语句
第五章 运算符、表达式与语句¶
👉【复习题】【编程练习题】¶
1. 基本运算符¶
1.1 赋值
运算符¶
注意点:C语言中,=
不意味着 “ 相等 ”,而是一种赋值
运算符。
=
被称为赋值
运算符。
注意读法:不是score等于98,而是“把值98赋给变量score”。
赋值运算符左侧
必须引用
一个存储位置
,最简单的方式就是使用“变量名”
。
C使用可修改的左值(modifiable lvalue)标记可赋值的实体。
- 几个术语:数据对象、左值、右值和运算符
赋值表达式语句的目的:把值储存到内存位置上。
数据对象(Data Object):用于储存值的数据存储区域
使用变量名是标识对象的一种方法。
左值(lvalue):C语言的术语,用于标识特定数据对象的名称
或者表达式
。
对象 指的是实际的数据存储,而左值是用于标识或定位存储位置的标签。
C标准新增了:可修改的左值(Modifiable lvalue)
,用于标识可修改的对象。
右值:可以是常量、变量或其他可求值的表达式(如:函数调用)。
运算对象:运算符操作的对象。
1.2 加减法
运算符¶
-
计算加法
加法运算符(addition operator)
:用于加法
运算,使其两侧的值相加。 -
计算减法
减法运算符(Subtraction operator)
:用于减法
运算,使其左侧的数减去右侧的数。+ 和 -
运算符都被称为“二元运算符(Binary Operator)”
:需要两个运算对象
才可以完成操作。
1.3 符号
运算符+、-
¶
一元运算符(unary operator)
:只需要一个运算对象。
1.4 乘除法
运算符¶
乘法运算符 *
。
除法运算符 /
。/左侧是被除数,右侧的值是除数。
⚠️注意点
-
整数除法和浮点数除法不相同,因为浮点数除法的结果是浮点数,而整数除法的结果是整数。整数是没有小数部分的数。
-
整数的除法结果的小数部分会被丢弃,这种过程叫做
截断(truncation)
。不会四舍五入结果。 -
混合整数和浮点数计算的结果都是浮点数。C99使用的是趋零截断。
2. 其他运算符¶
2.1 sizeof
运算符和size_t
类型¶
-
sizeof()
运算符-
sizeof
运算符以字节
为单位返回运算对象的大小
。 -
在C语言中,1字节定义为char类型占用的空间大小.
-
-
size_t
类型-
C语言规定,
sizeof
返回size_t
类型的值。是无符号整数类型,但它不是新类型。 -
size_t
是语言定义的标准类型。
-
2.2 求模
运算符(modulus operator)¶
用于整数运算
。
求模运算符给出左侧整数除以右侧整数的余数(Remainder)
。
⚠️注意:求模
运算符只能用于整数
,不能用于浮点数。
2.3 递增/递减
运算符¶
递增/递减运算符(Increment Operator)
执行简单的任务,将其运算对象递增/递减1
。
有两种形式:
-
后缀模式(i++/i--)
使用i的值之后
,递增/递减1 -
前缀模式(++i/--i)
前缀:
使用i之前
的值之前,递增/递减1
3. 表达式与语句¶
C语言的基本步骤由语句组成,大多数的语句由表达式构成。
3.1 表达式(Expression)¶
表达式由运算符
和运算对象
组成。
3.2 语句(statement)¶
语句是C程序的基本模块。一条语句相当于一条完整的计算机指令。在C中,大部分语句以分号
结尾。
-
简单的语句是空语句(一个分号结尾)。
-
赋值表达式语句:
shoes = 40
; - 函数表达式语句:
printf("sam = %d\n",sam)
;
3.3 复合语句(块)¶
复合语句(compound statement)
使用花括号括起来的一条或者是多条语句,复合语句也称为块(block)
。
例如:while语句块
4. 类型转换¶
4.1 基本的类型转换规则¶
-
当类型转换出现表达式时,无论是unsigned还是signed的char和short都会自动转换成int.
-
涉及到两种类型的运算,两个值会被分别转换成两种类型的更高级别。
-
类型的级别从高到低依次是:long double、double、float、unsigned long、long long、unsigned long、long unsigned int、int。
如果当long和int的大小相同是,unsigned int 会比 long 的级别高。
-
赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。会发生升级或者是降级。
升级
:从较小类型转换成较大类型。降级
:把一种类型转换成更低级别的类型。当浮点类型被降级为整数类型时,原来的浮点值会被截断。 -
当作为函数参数传递时,char和short被转换成int,float被转换成double。
4.2 对于待赋值的值与目标类型不匹配的情况时,规则如下:¶
-
目标类型是
无符号整型
,且待赋的值是整数
,额外的位将被忽略。 -
如果目标类型是一个
有符号整型
,且待赋的值是整数
,结果因实现而异。 -
如果目标类型是一个
整型
,且待赋的值是浮点数
,这种行为是未定义的。
5. 带参数的函数¶
函数原型
:就是函数的声明,描述了函数的返回值
和参数
。
如果函数不接受任何参数
,函数头的圆括号
中应该写上关键字void
。
声明函数就创建了被称为形式参数(formal argument或者formal parameter,简称形参)
的变量。
被函数调用传递的值
称为实际参数(actual argument或者是actual parameter,简称实参)
。
形参
是变量
,实参
就是函数调用提供的值
,实参被赋给相应的形参。
变量名是函数私有的,即在函数中定义的函数名不会和别处的相同名称发生冲突。