,逗号表达式

将两个不同的表达式写在了一起,变成了一条语句,变成了逗号表达式。
有时可以使语句变得精炼。

  1. //正确写法 1 使用大括号包括多个语句
  2. if (t1 + t2 > maxtime) {
  3. maxtime = t1 + t2; maxday = 1;
  4. }
  5. //正确写法2使用逗号表达式链接多个语句成为一个语句
  6. if (t1 + t2 > maxtime)
  7. maxtime = t1 + t2, maxday = 1;
  8. //错误写法,第二个语句不在if管辖范围内
  9. if (t1 + t2 > maxtime)
  10. maxtime = t1 + t2; maxday = 1;

通常用于类似 “变量交换”

  1. int a = 8, b =6, tmp;
  2. // 交换 a,b
  3. tmp = a, a = b, b = tmp;

?问号表达式

问号表达式与叫“三目表达式”

问号表达式的形式是 S1?S2:S3 如果S1条件成立,那么这个表达式的值是S2,否则是S3。 例如: 意思是b= (a==1) ? 2 : 3 也就是当a==1 成立时,(a==1) ? 2 : 3 的值是2,即b 赋2;否 则(a==1) ? 2 : 3 的值是3,b 赋值3. b=a==1?2:3

  1. cout << status == 1 ? "已阅读" : "未读";

python 中的三目运算,使用if …else… 来实现

  1. #python
  2. tmp = a if a == b else b;

icode大师赛中第18题:

复习二 - 图2

三位数排序(p5715)

复习二 - 图3

方法一: 排列组合进行穷举(列举)所有的可能。

  1. int a, b, c;
  2. scanf("%d%d%d", &a, &b, &c);
  3. if (a <= b && b <= c) printf("%d %d %d\n", a, b, c);
  4. else if (a <= c && c <= b) printf("%d %d %d\n", a, c, b);
  5. else if (b <= a && a <= c) printf("%d %d %d\n", b, a, c);
  6. else if (b <= c && c <= a) printf("%d %d %d\n", b, c, a);
  7. else if (c <= a && a <= b) printf("%d %d %d\n", c, a, b);
  8. else /*if (c <= b && b <= a)*/ printf("%d %d %d\n", c, b, a);

方法二:

求出某个最大值,再对别两个值进行判断

首先拎出最大的一个数字,分为3 种情况:a 最大、b 最大和c 最大。对于每一种情况,比较剩下两个变量的大小关系。
这样还是有6 种情况。注意层级问题

  1. int a, b, c;
  2. scanf("%d%d%d", &a, &b, &c);
  3. if (a >= b && a >= c)
  4. if (b >= c)
  5. printf("%d %d %d\n", c, b, a);
  6. else
  7. printf("%d %d %d\n", b, c, a); // 这个else搭配哪个if呢?
  8. else if (b >= a && b >= c)
  9. if (a >= c)
  10. printf("%d %d %d\n", c, a, b);
  11. else
  12. printf("%d %d %d\n", a, c, b);
  13. else // if (c >= a && c >= b) 本句可加可不加
  14. if (a >= b)
  15. printf("%d %d %d\n", b, a, c);
  16. else
  17. printf("%d %d %d\n", a, b, c);

方法三: 三次交换

确保第一个数是最小的:如果第一个数大于第二个数则他们交换;

如果第二个数小于第三个数则他们交换 然后确认第二个数是第二小的:如果第二个数大于第三个数则他们交换;这里使用了逗号表达式,也可以用分号加大括号

  1. int a, b, c, p;
  2. scanf("%d%d%d", &a, &b, &c);
  3. if (a > b)
  4. p = a, a = b, b = p;
  5. if (a > c)
  6. p = a, a = c, c = p;
  7. if (b > c)
  8. p = b, b = c, c = p;
  9. printf("%d %d %d", a, b, c);

总结

  • if 语句、if-else 语句
    • 如果给定的表达式为真,那么执行指定语句
    • 否则(else)执行另外的语句
  • switch-case 分支语句
    • 判断某个表达式的值在几个常量的值(int | char)
    • 每个分支要加break 退出,default 其余情况
  • 条件语句嵌套
    • 可以多个else 多个分支,或者分支中还有分支
    • 注意复杂的分支语句,以及大括号的用法
  • 缩进、逗号表达式、注释、问号表达式

    • 让编程更容易的一些窍门
  • 关系表达式

    • 真(1)假(0)
    • 大于小于等于不等于,注意优先级
  • 逻辑表达式
    • 与(&&):同时为真则为真
    • 或(||):至少有一个为真则为真
    • 异或(^):刚好有一个为真则为真
    • 非(!):颠倒黑白
  • 浮点数精度误差、短路判断