目录
一、前言
算术运算符可以用来计算数据, 它包含了加, 减, 乘, 除, 取模五种运算符, 以及递增递减运算. 下面分别来介绍这五种运算符以及两种运算的用法.
二、运算符
2.1 加法
加法就是使用一个或多个加号"+
", 使两个或两个以上的数字进行加法运算的符号. 下面展示用C语言实现两个和三个数进行加法计算并输出的例子:
例1:
#include <stdio.h>
int main()
{
printf("%d\n", 1 + 2); // 两个数字相加, 1+2=3
printf("%d\n", 1 + 2 + 3); // 三个数相加, 1+2+3=6
return 0;
}
输出结果:
2.2 减法
减法就是使用一个或多个减号"-
", 使两个或两个以上的数字进行相减的运算. 下面展示用C语言实现两个和三个数进行减法计算并输出的例子:
例2:
#include <stdio.h>
int main()
{
printf("%d\n", 2 - 1); // 两个数字相减, 2-1=1
printf("%d\n", 3 - 2 - 1); // 三个数相减, 3-2-1=0
return 0;
}
输出结果:
2.3 乘法
乘法就是使用一个或多个乘号"*
", 使两个或两个以上的数字进行相乘的运算. 下面展示用C语言实现两个和三个数进行乘法计算并输出的例子:
例3:
#include <stdio.h>
int main()
{
printf("%d\n", 1 * 2); // 两个数字相乘, 1*2=2
printf("%d\n", 1 * 2 * 3); // 三个数相乘, 1*2*3=6
return 0;
}
输出结果:
2.4 除法
除法就是使用一个或多个除号"/
", 使两个或两个以上的数字进行相除的运算. 下面展示用C语言实现两个和三个数进行除法计算并输出的例子:
例4:
#include <stdio.h>
int main()
{
printf("%d\n", 1 / 2); // 两个数字相除, 1/2=0(int类型运算规则, 不保留小数位)
printf("%d\n", 3 / 2 / 1); // 三个数相除, 3/2/1=1
return 0;
}
输出结果:
问: 为什么三个数相除3/2/1最后输出的结果为1呢?
答: 这和printf()
输出语句所使用的占位符与int类型除法法则有关. "%d
"代表的是十进制整数, 因此它不能输出十进制小数, 这时它只能输出整数. 而int
类型与int
类型的数据相除, 是直接去掉小数位, 仅保留整数结果. 因此看到的输出结果只有一位整数, 并且没有进行四舍五入的操作. 有关占位符的内容请看这篇文章[C语言] printf()函数及占位符的使用问: 要怎样才能输出小数结果呢?
答: 由于"3 / 2 / 1
"这个表达式进行计算的数据为int类型, 因此编译器默认是使用int类型相除的法则进行计算. 若要使输出结果显示小数位, 就要进行强制转换数据类型的操作. 具体详见下方例子:
例5:
#include <stdio.h>
int main()
{
double a = (double)3 / 2 / 1; // 以double为例, 将int类型的3强转位double类型
printf("%.2f\n", a); // 占位符精确到小数点后两位
return 0;
}
输出结果:
或者也可以将其中一位数字改为小数, 使之变为double
类型的数据进行计算:
例6:
#include <stdio.h>
int main()
{
double a = 3.0 / 2 / 1; // 添加小数转换数据类型
printf("%.2f\n", a); // 占位符精确到小数点后两位
return 0;
}
输出结果:
2.5 取模
取模就是就是使用取模符号"%
", 将两个数字进行取模的运算.
所谓取模运算, 就是计算两个数整除之后的余数的运算, 通常来判断其中一个数是否为奇数或者是偶数. 下面展示用C语言实现两个数进行取模计算并输出的例子:
例7:
#include <stdio.h>
int main()
{
printf("%d\n", 31 % 2); // 两个数字相除, 31/2的余数为1, 因此31%2=1
return 0;
}
输出结果:
注意: 取模运算通常只适用于两个int类型的整数的计算.
三、自增自减运算
3.1 后置++
与后置--
3.1.1 后置++
后置++
通常用于条件判断语句和循环语句. 它的作用是递增变量, 即将变量递增1.
格式: 变量名++;
解释: 将变量递增1
例8:
#include <stdio.h>
int main()
{
int a = 0;
a++;
printf("a++ = %d\n", a); // 将a递增1, 并输出. 此时输出 a++ = 1
return 0;
}
输出结果:
3.1.2 后置--
后置--
通常也是用于条件判断语句和循环语句的运算符, 它的作用是递减变量, 即将变量递减1.
格式: 变量名--;
解释: 将变量递减1
例9:
#include<stdio.h>
int main()
{
int a = 2;
a--;
printf("a-- = %d\n", a); // 使用后置--将a递减1, 并输出. 此时 a-- = 1.
return 0;
}
输出结果:
3.2 前置++
与前置--
前置++
和前置--
在初学阶段比较不常用, 但也可以了解一下. 了解这些对于编写正确和高效的代码非常重要, 特别是在涉及复杂表达式或需要精确控制变量值的场景中.
前置与后置的主要区别就是返回结果和递增或递减的顺序. 在使用后置++
或--
时, 是先返回该变量的值, 再对该变量进行递增或递减运算; 使用前置++
或--
时, 是先对该变量进行递增或递减运算, 再返回该变量的值.
下面以递增运算举例介绍前置++与后置++的区别:
例10: 前置++
与后置++
的对比
#include<stdio.h>
int main()
{
// 定义初始变量
int a = 0;
int b = 0;
/*后置++*/
int res1 = a++;
// 先返回a的原始值,赋值给res1, 再对a进行递增运算.
printf("初始变量值: %d; 递增后变量的值: %d\n", res1, a); // 此时输出结果分别为0; 1.
/*前置++*/
int res2 = ++b;
// 先对b进行递增计算,赋值给res2, 再返回b的值.
printf("初始变量值: %d; 递增后变量的值: %d\n", res2, b); // 此时输出结果分别为1; 1.
return 0;
}
输出结果:
3.2.1 前置++
理解了上方的例子, 再理解下方有关与前置++
的例子就很轻松了.
例11: 前置++
#include<stdio.h>
int main()
{
// 定义初始变量
int a = 0;
// 将++a赋值给res
int res = ++a;
// 输出res以及a的值. 先进行递增运算, 再赋值.
printf("res = %d; a = %d\n", res, a);
return 0;
}
输出结果:
3.2.2 前置--
下面对前置--
举个例子:
例12: 前置--
#include<stdio.h>
int main()
{
// 定义初始变量
int a = 0;
// 将--a赋值给res
int res = --a;
// 输出res以及a的值. 先进行递减运算, 再赋值.
printf("res = %d; a = %d\n", res, a);
return 0;
}
输出结果:
四、复合赋值符的使用
首先看看下方这几个符号:
+=
, -=
, *=
, /=
, %=
这就是复合赋值符. 复合赋值符可以和赋值符号同时使用, 这就是复合赋值符. 复合赋值符可以减少多余变量的定义, 使代码更加清晰简洁.
通过观察上方举例的几个复合赋值符, 可以发现, 在赋值符“=”之前加上其它二目运算符可构成复合赋值符. 那么复合赋值符要如何理解呢?
a = a + 1
⟺
\iff
⟺ a += 1
下面以%=
举例:
例13:%=
#include<stdio.h>
int main()
{
int a = 10;
a %= 2; // 将a与2进行取模运算, 最后重新赋值给a.
printf("a %%= 2 后 a = %d\n", a);
return 0;
}
输出结果:
五、运算优先级
在编程中, 运算同样存在优先级的问题. 下方总结了+
, -
, *
, /
, %
这五种运算符的优先级:
*
= /
= %
> +
= -
举例:
在表达式 a + b * c / d % e
中, 根据运算符的优先级, 运算的执行顺序是:
-
- 乘法
b * c
- 乘法
-
- 除法
上一步结果 / d
- 除法
-
- 取模
上一步结果 % e
- 取模
-
- 加法
a + 最终结果
- 加法
如果需要改变默认的计算顺序, 可以使用小括号 ()
来提高指定表达式的运算优先级. 例如, (a + b) * (c / d) % e
将首先计算括号内的表达式, 然后再按照运算符的优先级计算整个表达式.
六、注意事项
在C语言中, 运算符的使用是非常重要的, 同时也存在一些容易忽视的细节和注意事项. 以下是一些注意事项:
- 1. 数据类的型转换: 在运算过程中, 可能会发生隐式类型转换(如整数和浮点数混合运算时).
- 2. 注意原始变量的值: 使用自增自减运算符和赋值运算符等可能改变变量原始的值, 在使用这些运算符之后使用该变量时要注意原始变量的值的改变.