第五章、运算符与表达式
运算符是 C 语言表达式的组成部分,每一个不同的运算符表示不同的运算规则。
表达式和语句的概念
表达式和语句 是编译原理里面的两个重要的概念。
什么是表达式
表达式是用于计算并一定能返回一个值的字面值、变量值或计算式,它一定能返回一个结果(数字、字符串、指针等),如 1 + 2 返回 3。
什么是语句
语句 是程序执行的单位。通常一个语句作为一个完整的指令序列来执行,表达式 则是组成语句的基本单位。
白话文解释:
表达式就相当如现代汉语里面的字、词或短语,是组成一句话的基本单位。语句就相当于用字和词组成的一个完整的一句话,它能表示一个完整的意思。
1. 算术运算符
C 语言中的算术运算符 有如下 5 个。
+ // 加法
- // 减法
* // 乘法
/ // 除法
% // 求余数(取模)运算(不能用于浮点数运算)
算术运算符的语法
左操作数 算术运算符 右操作数
什么是操作数
操作数(operand) 是指参与运算的数据。
说明
- 上述算术运算符 是二元运算符,即必须有两个操作数运算后求值。
- 二元运算符 是指由两个数据元素参加运算的运算符。
- 二元算术运算符是先左后右的结合性,即左侧的操作数先求值,然后是右侧的操作数在求值,然后再进行算术运算。
在 C 语言中,除赋值运算符(后面会讲)外,二元运算符都是先左后右的结合性,即左操作数先算。
示例
#include <stdio.h>
int main(int argc, char *argv[]) {
int x = 7;
int y = 2;
float f = 3.1;
printf("%d + %d = %d\n", x, y, x + y);
printf("%d - %d = %d\n", x, y, x - y);
printf("%d * %d = %d\n", x, y, x * y);
printf("%d / %d = %d\n", x, y, x / y);
printf("%d %% %d = %d\n", x, y, x % y);
printf("%d + %f = %f\n", x, f, x + f);
printf("%d - %f = %f\n", x, f, x - f);
printf("%d * %f = %f\n", x, f, x * f);
printf("%d / %f = %f\n", x, f, x / f);
printf("1 + 2 * 3.14 = %f\n", 1 + 2 * 3.14);
return 0;
}
运行结果:
7 + 2 = 9
7 - 2 = 5
7 * 2 = 14
7 / 2 = 3
7 % 2 = 1
7 + 3.100000 = 10.100000
7 - 3.100000 = 3.900000
7 * 3.100000 = 21.699999
7 / 3.100000 = 2.258065
1 + 2 * 3.14 = 7.280000
上述程序中的 +、-、*、/和数学中的意义是一样的,计算中也是乘、除先算,加、减后算。
求余数(%)是整数除法后得到整数的商后剩余的整数,比如7个苹果分给三个人,每个人分2个,剩余1个,这个 1 就是 7 对 3 求余数的结果。
说明:
- 在 C 语言中,整数和整数运算的结果也是整数类型不会提升为浮点数。因此
7 / 3的结果是2而不是浮点数2.333333。 - 不同类型的数据类型进行运算,默认会类型提升,即:整数和浮点数运算结果是 浮点数,如:
7 / 3.0的结果就是浮点数2.333333了。 - 求余数运算符(
%)不能用于浮点数运算。
练习
- 写一个程序,输入两个整数,打印这个两个数相加、相减、相乘、相除和求余数的值。
- 写一个程序,输入两个小数,打印这个两个数相加、相减、相乘、相除值。