运算符的优先级

运算符的优先级决定了表达式中各个部分的计算顺序,核心思想与数学中的先乘除后加减一致。当优先级高的运算符先执行,若优先级相同则遵循“匹配规则”(结合性:从左至右或从右至左)。

1. 核心优先级规律(结合历史章节)

结合表3-2及前序学习的逻辑、条件运算符,常用核心优先级从高到低为:

  1. 最高:() 括号、数组下标 []、成员访问 . ->(顺序1)
  2. 单目/一元运算符:! ++ -- sizeof *(解引用) &(取址) 强制转换(顺序2,结合性从右至左)
  3. 算术运算:* / %(顺序3) > + -(顺序4)
  4. 位运算与移位:<< >>(顺序5)
  5. 关系/比较运算:< <= > >=(顺序6) > == !=(顺序7)
  6. 逻辑运算:按位与 &(8) > 按位异或 ^(9) > 按位或 |(10) > 逻辑与 &&(11) > 逻辑或 ||(12)
  7. 条件运算符:? :(顺序13,从右至左)
  8. 赋值运算:= += -= 等(顺序14,从右至左)
  9. 最低:逗号 ,(顺序15)

记忆口诀:括号单目最高,算术关系居中,逻辑条件靠后,赋值逗号垫底。

2. 面试条件判断练习解析

需求规则:

  1. 25岁以上,化学专业,非耶鲁大学
  2. 耶鲁大学化学专业
  3. 28岁以下,哈佛经济学专业
  4. 25岁以上,耶鲁大学非化学专业

代码条件映射分析(设定:哈佛=1,耶鲁=2,其他=3;化学=1,经济学=2,其他=3):

规则代码条件逻辑拆解
规则1(age>25 && subject==1) && (college==3 \|\| college==1)年龄>25 且 化学,且(其他大学 或 哈佛)
规则2college==2 && subject==1耶鲁 且 化学
规则3college==1 && subject==2 && !(age>28)哈佛 且 经济学 且 年龄≤28(用!取反)
规则4college==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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注