返回 课程

信奥AC之路-1级

0% 完成
0/0 步骤
  1. 第1课 开发环境与基础输出
    5 主题|小节
  2. 第2课 算术运算符
    7 主题|小节
  3. 第3课 printf与运算输出
    7 主题|小节
  4. 第4课 数的进制与拆位
    6 主题|小节
  5. 第5课 变量与基础运算
    17 主题|小节
  6. 第6课 常量与取整运算
    8 主题|小节
  7. 第7课 关系运算
    8 主题|小节
  8. 第8课 逻辑运算
    9 主题|小节
  9. 第9课 输入与计算进阶
    10 主题|小节
  10. 第10课 if语句及双分支语句
    8 主题|小节
  11. 第11课 if语句及双分支进阶
    11 主题|小节
  12. 第12课 三目运算
    9 主题|小节
  13. 第13课 多分支、多if和switch语句
    11 主题|小节
  14. 第14课 循环(基本输出)
    7 主题|小节
  15. 第15课 循环(While+If)
    8 主题|小节
  16. 第16课 循环(计数、求和、求乘积)
    10 主题|小节
  17. 第17课 循环进阶(While+)
    8 主题|小节
  18. 第18课 do-while及while其他用法
    8 主题|小节
  19. 第19课 For循环基础
    9 主题|小节
  20. 第20课 For循环进阶
    8 主题|小节
课 9, 主题|小节 3
进行中

9.2 混合运算的魔法

2025年9月22日
课 进展
0% 完成

“现在,”我拿起粉笔,”让我们看看如何把不同的运算组合在一起!”

9.2.1 算术运算符与关系运算符的组合

int a, b;
double x, y;
scanf("%d%d%lf%lf", &a, &b, &x, &y);

// 算术运算和关系运算的组合
bool result1 = (a + b > 10);           // 和是否大于10
bool result2 = (a * b <= 100);         // 积是否不超过100
bool result3 = ((a + b) / 2 >= a);     // 平均值是否不小于a
bool result4 = (x / y < 2.5);          // 两个小数的除法比较

// 多重运算组合
bool result5 = ((a + b) * 2 > (x + y));  // 整数运算结果与小数比较

[图片:展示运算符优先级的层次结构]

练习题:

  1. 选择题:表达式 a + b > c * d 的运算顺序是:
    A. 先算加法再算乘法再比较
    B. 先算乘法再算加法再比较
    C. 从左到右依次计算
    D. 先比较再算术运算

正确答案:B
解析:乘法优先级高于加法,而算术运算优先级高于关系运算。

  1. 判断题:在表达式 (a + b) * c > d 中,如果去掉括号,运算结果可能会不同。

正确答案:√
解析:没有括号时,会先计算b*c,改变运算顺序,可能导致结果不同。

9.2.2 逻辑运算符的组合使用

// 输入数据
int age, score;
double height;
scanf("%d%d%lf", &age, &score, &height);

// 简单逻辑运算
bool isTeenager = (age >= 13 && age <= 19);     // 判断是否是青少年
bool isQualified = (score >= 60 || height > 1.7);  // 判断是否达标

// 复杂逻辑组合
bool canJoin = (age >= 15 && score >= 85) || (height > 1.8 && score >= 75);
                // 15岁以上且85分以上,或身高超过1.8米且75分以上可以参加

// 带括号的复杂逻辑
bool isSpecial = !(age < 18) && (score > 90 || height > 1.75);
                // 年满18岁,且成绩高于90或身高超过1.75米

[图片:展示逻辑运算的真值表和组合]

9.2.3 复杂混合运算实战

// 示例:学生评分系统
int score, attendance;
double homework_rate;
scanf("%d%d%lf", &score, &attendance, &homework_rate);

// 多重条件判断
// 条件1:成绩大于85且出勤率大于90%
bool condition1 = (score > 85 && attendance > 90);

// 条件2:成绩大于75,出勤率大于85%,作业完成率大于95%
bool condition2 = (score > 75 && attendance > 85 && homework_rate > 0.95);

// 最终评判(满足任一条件)
bool isExcellent = condition1 || condition2;

🔬 实验一:成绩评估器
题目描述:
输入一个学生的三科成绩和考试用时(分钟),判断是否达到优秀标准:

  • 三科总分超过250分,或者
  • 平均分超过85分且用时少于120分钟
// 输入处理
int s1, s2, s3, time;
scanf("%d%d%d%d", &s1, &s2, &s3, &time);  // 依次输入三科成绩和用时

// 计算总分和平均分
int total = s1 + s2 + s3;          // 计算总分
double avg = total / 3.0;          // 计算平均分(使用3.0确保结果为小数)

// 判断条件
bool cond1 = (total > 250);        // 总分条件
bool cond2 = (avg > 85 && time < 120);  // 平均分和时间条件

// 最终判断(满足任一条件即可)
bool isExcellent = cond1 || cond2;

// 输出结果
printf("%dn", isExcellent);  // 1表示达标,0表示不达标

练习题:

  1. 选择题:以下哪个表达式可以判断一个数是否在10到20之间(包含10和20)?
    A. x > 10 && x < 20
    B. x >= 10 || x <= 20
    C. x >= 10 && x <= 20
    D. x > 10 || x < 20

正确答案:C
解析:需要使用>=和&&来表示”大于等于10且小于等于20″。

  1. 判断题:!(a > b) && c 与 !(a > b && c) 是等价的。

正确答案:×
解析:根据德摩根定律,!(a > b && c) 等价于 (!a > b) || !c。