// 优先级示例:先乘除后加减
#include
int main() {
int result = 5 + 3 * 2; // 先算3*2=6,再加5
printf("结果:%d\n", result); // 输出11
return 0;
}
// 结合性示例:同级自左向右
#include
int main() {
int result = 10 / 2 * 5; // 先算10/2=5,再乘5
printf("结果:%d\n", result); // 输出25
return 0;
}
三、常见运算规则(高频考点)
1. 整数除法 vs 浮点除法
#include
int main() {
// 整数除法:截断小数
int a = 7 / 2; // a = 3
// 浮点除法:保留小数(至少一个操作数为浮点)
float b = 7.0 / 2; // b = 3.5
float c = (float)7 / 2; // 强制类型转换实现浮点除法,c=3.5
printf("a=%d, b=%.1f, c=%.1f\n", a, b, c);
return 0;
}
2. 取模运算规则
#include
int main() {
int a = 9 % 4; // 9/4余1 → a=1
int b = -9 % 4; // 余数符号与被除数一致 → b=-1
int c = 9 % -4; // 余数符号与被除数一致 → c=1
// float d = 9.0 % 4; // 错误:取模仅适用于整数
printf("a=%d, b=%d, c=%d\n", a, b, c);
return 0;
}
3. 自增/自减前置vs后置
#include
int main() {
int x = 5, y = 5;
int m = ++x; // 前置:x先加1(x=6),再赋值给m → m=6
int n = y++; // 后置:先赋值给n(n=5),y再加1(y=6)
printf("m=%d, x=%d, n=%d, y=%d\n", m, x, n, y); // 输出m=6,x=6,n=5,y=6
return 0;
}
四、算术运算常见错误(高频考点)
除零错误:除数为0(如 5/0),程序直接崩溃
取模运算类型错误:操作数含浮点型(如 5.0%2)
整数除法陷阱:误将浮点除法写成整数除法(如求平均值时 7/2 得到3而非3.5)
自增/自减误用:用于常量(如 10++)或表达式(如 (a+b)++)
优先级错误:未加括号导致运算顺序错误(如 5+3*2 误算为16)
// 错误示例1:除零错误
#include
int main() {
int a = 5 / 0; // 运行时崩溃:division by zero
return 0;
}
// 错误示例2:取模运算类型错误
#include
int main() {
float a = 8.5 % 3; // 编译错误:invalid operands to binary %
return 0;
}
// 错误示例3:自增运算符误用
#include
int main() {
int a = 2, b = 3;
int c = (a + b)++; // 编译错误:lvalue required as increment operand
int d = 10++; // 编译错误:lvalue required as increment operand
return 0;
}
#include
int main() {
int x = 4;
int y = ++x * 2; // 前置自增:x先加1为5,再乘2
int z = x++ * 2; // 后置自增:先乘2(5*2=10),x再加1为6
printf("x=%d, y=%d, z=%d\n", x, y, z);
return 0;
}