
C语言算术运算符、数据类型转型与数位拆分
LeonardoFox一、 基础算术运算符与操作对象
在C语言中,基础计算依赖于五大算术运算符:加(+)、减(-)、乘(*)、除(/)、取余(%)。
- 计算载体:既可以直接使用”数字’’进行计算,也可以将数字赋值给变量后再进行计算。
- 浮点数细节:对于小数(
double类型),在打印时可以使用%.Nlf来控制保留N位小数。
示例:
1 | // 直接用数字进行计算 |
二、 核心计算规则与数据类型转换
加减乘和以前一样但有几个不同
1. 整数与整数计算
- 规则:整数间运算的结果必定是整数。
- 特性:小数点后的所有部分会被全部抛弃(直接截断,不做四舍五入)。
- 示例:
10 / 3的输出结果为3。
- 示例:
2. 小数与小数计算
- 规则:小数间运算的结果必定是小数。
- 示例:
10.0 + 3.0结果为13.0。
- 示例:
3. 整数和小数混合计算
- 规则:只要有小数参与,结果必定是一个小数(编译器会自动向高精度类型提升)。
- 示例:
10 / 3.0结果为3.333333...。
- 示例:
4. 核心特例:浮点数的不精确性
细节:小数直接参与计算时,由于计算机底层二进制存储的限制,结果有可能不精确。
- 验证:试试下面的例子,会发现结果<不是我们想象的那样>,精确越多会发现小数点深处会出现更多不规则数字,无法完美循环.
1
2
3printf("%.2lf\n", 3.333333 + 6.666666); // =10
printf("%.2lf\n", 10.0 / 3.0); // = 3.33
printf("%.20lf\n", 10.0/3.0); //=3.333333333333333333236582
5. 绝对禁区:除数不能为 0
规则:在除法运算中,分母(除数)绝对不可以是 0。
VS编译器报错:若写出
10 / 0,Visual Studio 会触发安全警告报错:C2124: 除数零 (do not divide by zero)
三、 取余运算符 (%) 的细节
取余运算(求模运算)用来获取两个数相除后的余数
例如 10 % 2 恰好整除,余数为 0;10 % 3余数为 1。
1 | printf("%d\n", 10 % 2); //取他的余数 此处应为0 |
它有非常严格的底层限制:
1. 类型限制:必须为整数
规则:取余运算的左、右两个操作数必须全部为整数,绝对不能是浮点数(小数)。
编译器报错:若写出
10.0 % 3,编译器会直接报错:'%' : 无效,因为左操作数的类型为 'double'(必须为整型)
2. 正负号决定规则(跟第一个数走)
规则:获取的余数到底是正数还是负数,完全由第一个数字(被除数)的正负号决定,与第二个数无关。
10 % 3结果为1(第一个数是正,结果为正)-10 % 3结果为-1(第一个数是负,结果为负)10 % -3结果为1(第一个数是正,结果为正)
1
2
3printf("%d\n", 10 % 3); // 1
printf("%d\n", -10 % 3); //-1
printf("%d\n", 10 % -3); // 1
3. 不能对 0 取余
- 规则:同除法一样,不能写
10 % 0,否则同样会引发编译报错。
四、 应用:任意多位数的数位拆分
利用整数除法丢弃小数和取余获取尾数的特性,可以推导出拆分任意整数的通用公式。
1. 核心推导公式规律
- 个位:数值 / 1 %
- 十位:数值 / 10 % 10
- 百位: 数值 / 100 % 10
- 千位:数值 / 1000 % 10
- 后面的以此类推,即:想求哪一位,就先用除法把那一位变成个位(除多少),再 对10取余(%10) 。
2. 实战:键盘录入三位数拆分案例
题目:键盘录入一个三位数 ,将其拆分为个位十位百位后,然后打印在控制台.例:123 个位是3 十位是2 百位是1
实现代码如下:
1 | #define _CRT_SECURE_NO_WARNINGS //防止scanf报错 |
喜欢这篇文章的人也看了
评论
匿名评论隐私政策



