运算符的优先级决定了表达式中各个部分的计算顺序,核心思想与数学中的先乘除后加减一致。当优先级高的运算符先执行,若优先级相同则遵循“匹配规则”(结合性:从左至右或从右至左)。
1. 核心优先级规律(结合历史章节)
结合表3-2及前序学习的逻辑、条件运算符,常用核心优先级从高到低为:
- 最高:
()括号、数组下标[]、成员访问.->(顺序1) - 单目/一元运算符:
!++--sizeof*(解引用)&(取址) 强制转换(顺序2,结合性从右至左) - 算术运算:
*/%(顺序3) >+-(顺序4) - 位运算与移位:
<<>>(顺序5) - 关系/比较运算:
<<=>>=(顺序6) >==!=(顺序7) - 逻辑运算:按位与
&(8) > 按位异或^(9) > 按位或|(10) > 逻辑与&&(11) > 逻辑或||(12) - 条件运算符:
? :(顺序13,从右至左) - 赋值运算:
=+=-=等(顺序14,从右至左) - 最低:逗号
,(顺序15)
记忆口诀:括号单目最高,算术关系居中,逻辑条件靠后,赋值逗号垫底。
2. 面试条件判断练习解析
需求规则:
- 25岁以上,化学专业,非耶鲁大学
- 耶鲁大学化学专业
- 28岁以下,哈佛经济学专业
- 25岁以上,耶鲁大学非化学专业
代码条件映射分析(设定:哈佛=1,耶鲁=2,其他=3;化学=1,经济学=2,其他=3):
| 规则 | 代码条件 | 逻辑拆解 |
|---|---|---|
| 规则1 | (age>25 && subject==1) && (college==3 \|\| college==1) | 年龄>25 且 化学,且(其他大学 或 哈佛) |
| 规则2 | college==2 && subject==1 | 耶鲁 且 化学 |
| 规则3 | college==1 && subject==2 && !(age>28) | 哈佛 且 经济学 且 年龄≤28(用!取反) |
| 规则4 | college==2 && (subject==2 \|\| subject==3) && age>25 | 耶鲁 且(经济 或 其他专业)且 年龄>25 |
优先级在代码中的体现:
!(逻辑非) 优先级高于>(关系),!(age>28)先算age>28得真假再取反(加括号更清晰)。&&优先级高于||,规则1中(college==3 || college==1)加括号明确“或”的归属,避免被&&截断。- 关系运算符(
>==)优先级高于逻辑运算符,因此age>25 && subject==1无需额外括号也能先比较后逻辑与。
3. 完整代码与执行流程
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
int age = 0;
int college = 0;
int subject = 0;
bool interview = false;
printf("\n什么大学?哈佛1,耶鲁2,其他3: ");
scanf("%d",&college);
printf("\n什么科目?化学1,经济学2,其他3: ");
scanf("%d", &subject);
printf("\n申请人多大了? ");
scanf("%d",&age);
/* 利用逻辑或 || 合并四个独立条件,满足其一即触发面试 */
if( ((age>25 && subject==1) && (college==3 || college==1)) ||
(college==2 && subject==1) ||
(college==1 && subject==2 && !(age>28)) ||
(college==2 && (subject==2 || subject==3) && age>25) )
{
interview = true;
}
if(interview)
printf("\n\n给他们面试");
else
printf("\n\n拒绝他们");
return 0;
}Code language: PHP (php)
Previous: 练习:使用条件运算符实现多级别折扣计算
Next: 多路选择结构