核心结论 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 % 3110 除以 3 商 3,余数 1
8 % 20可以整除,余数为 0
-7 % 3-1被除数是负数,余数为负
7 % -31被除数正数,余数为正
15 % 50整除余数等于 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 语言求模运算相关知识学习参考,不同教材对求模取余术语叫法略有差异,答题请以课程教材和考试要求为准。