c 语言求模运算 取余运算符详解
核心结论 C 语言求模运算符号是百分号 %,正式名称叫取余运算,作用是计算两个整数做除法之后剩下的余数,语法格式是 a % b,只能用于整数类型,不能直接对浮点数使用,这是最基础考点。它在作业里面用途非常广,判断奇偶就是 n%2==0,判断能否整除、循环回绕、分离数字个位十位都靠求模运算。重点要记住:C 语言求余结果符号和被除数保持一致,除数不能为 0,b=0 会直接运行报错,这个是很多同学容易踩坑的地方。
基础语法与运算规则
清单
1 运算符:%,双目运算符,左右两边操作数必须是整型,int char short long 都可以
2 运算公式:a % b = a - (a / b) b,C 语言整数除法是向零取整,这个决定了负数求余的结果
3 除数禁忌:b 不能等于 0,除数为 0 属于非法运算,程序崩溃
4 结果符号:余数符号跟被除数 a 保持一致,例如 -7 % 3 结果是 -1,7 % -3 结果是 1
常见应用场景
清单
判断奇偶:if(n % 2 == 0) 偶数,否则奇数
判断整除:if(x % y == 0) 代表 x 可以被 y 整除,素数判断核心就是这个写法
提取个位数字:n % 10 得到数字个位
循环下标回绕:数组环形队列常用 index % 数组长度
判断闰年、数字拆分、密码校验题大量使用求模运算
运算示例表格
| 表达式 | 结果 | 说明 |
|---|---|---|
| 10 % 3 | 1 | 10 除以 3 商 3,余数 1 |
| 8 % 2 | 0 | 可以整除,余数为 0 |
| -7 % 3 | -1 | 被除数是负数,余数为负 |
| 7 % -3 | 1 | 被除数正数,余数为正 |
| 15 % 5 | 0 | 整除余数等于 0 |
深度易错点说明
第一 区分求模和求余,很多教材口语叫求模,严格来说数学上求模和 C 语言 % 是有差别,数学模运算结果永远非负,但是 C 语言 % 是取余,负数结果可以是负数,考试题目一般统称为求模运算,按 C 语言规则答题即可
第二 浮点数不能直接 %,如果要对小数做取模,需要调用 math 库里面的 fmod 函数
第三 优先级,% 和乘除同级,高于加减,混合运算的时候优先执行求模,必要时加括号
第四 char 类型本质是整数编码,所以 char 也可以参与 % 运算
编码注意事项
第一 素数判断、输出 1 到 100 素数这类经典题,核心就是内层循环 n % i == 0,一旦成立代表可以整除,不是素数
第二 环形队列里面 (front+1)%MaxSize,这个就是利用求模实现下标循环,数据结构必考
第三 不要把百分号 % 和 printf 里面的格式符混淆,printf 里面%d是占位符,不是求模运算,这是初学者高频混淆点
【相关 FAQ】
问题 1 c 语言求模运算符号是什么,可以对小数使用吗
回答 1 c 语言求模运算符号是百分号 %,只支持整数运算,浮点数不能直接使用 %,小数取余需要使用 math.h 中的 fmod 函数。
问题 2 c 语言求模运算,除数能不能是 0
回答 2 c 语言求模运算,除数不能等于 0,除数为 0 属于非法运算,运行的时候程序会报错崩溃,写代码一定要提前判断除数。
问题 3 c 语言求模运算,负数求余结果符号是怎样的
回答 3 c 语言求模运算,C 语言取余结果符号和被除数保持一致,例如 - 7%3 结果是 - 1,和数学上模运算永远非负的规则不一样。
问题 4 c 语言求模运算,printf 里面的 % 是不是求模
回答 4 c 语言求模运算,printf 里面 % d % f 是格式占位符,不是求模运算符,二者含义完全不同,不要混淆。
免责申明:本文仅作为 c 语言求模运算相关知识学习参考,不同教材对求模取余术语叫法略有差异,答题请以课程教材和考试要求为准。
