分支结构

if | if …else… 条件判断

课堂练习:输出apples

分支结构程序设计 - 图1

x 为1 输出 apple, x > 1 输出 apples

方法一: 直接输出不同的提示语

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int x ;
  5. cin >> x;
  6. if(x== 1){
  7. cout << "Today,I ate 1 apple " << endl;}
  8. else{
  9. cout << "Today,I ate " << x << " apples ";
  10. }
  11. }

方法二: 判断是否在apple后追加“s”

  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4. int x ;
  5. cin >> x;
  6. cout << "Today,I ate " << x << " apple";
  7. if(x > 1){
  8. cout << "s";
  9. }
  10. }

swich case

对于一些分叉很多(常数判断)的情况下,使用if 会比较方便 使用了switch-case语句,判断一个变量是什么值,根据不同的值 来进行操作 case 只能判定常量,执行完一个分支,在下个case 前加break 如果case 的所有情况都不符合,可以使用

语法:

  1. switch (变量名) {
  2. case 变量可能的情况1: 执行语句1; break;
  3. case 变量可能的情况2: 执行语句2; break;
  4. ...
  5. default: 执行语句n;
  6. }

题3.6 小洛机器人

分支结构程序设计 - 图2

没有break,case语句会继续执行下面的条件判断语句。

  1. #include <iostream>
  2. using namespace std;
  3. /*
  4. 例3.6
  5. 提供以下指令(一个字符),机器人按照指令给出对应的回复:
  6. •输入G:打招呼,小洛会回复Hello, my master!,还会在下一行
  7. 加上一句I'm Xiaoluo.
  8. •输入N:自我介绍,小洛只会回复I'm Xiaoluo.
  9. •输入S:唱歌,小洛会哼唱Teinei teinei teinei~
  10. •输入B或者Q:告别,小洛向你说Bye bye!
  11. •其他任何字符:小洛无法理解,只能回复Sorry...
  12. */
  13. int main(){
  14. char ch;
  15. cin >> ch;
  16. switch (ch) {
  17. case 'G':
  18. cout << "Hello, my master!" << endl;
  19. // cout << "I'm Xiaoluo." << endl;
  20. // break;
  21. case 'N':
  22. cout << "I'm Xiaoluo." << endl;
  23. break;
  24. case 'S':
  25. cout << "Teinei teinei teinei~" << endl;
  26. break;
  27. case 'B':
  28. case 'Q':
  29. cout << "Bye bye!" << endl;
  30. break;
  31. default:
  32. cout << "Sorry..." << endl;
  33. }
  34. }

关系表达式与逻辑表达式

分支结构程序设计 - 图3

浮点数精度误差 ( fabs() )

浮点数可能会产生精度误差 所以一般不用== 来判断两个浮点数是否相等 正确的方式:比较这两个数的差值是否小于一定程度 假设fabs(a-b)<1e-6 成立,就可以认为浮点数a 和b 相等。 注意要用<cmath> 头文件

  1. double a, b;
  2. ......
  3. if (a == b) // 这么写是错误的!会造成浮点数误差!
  4. if (fabs(a - b) < 1e-6) // 正确的写法,注意 <cmath>

逻辑表达式

多个条件复合成一个条件进行判断。

  • 与:a&&b,当这两个条件都为真,其为1
  • 或:a||b,当两个条件至少有一个为真,其为1,否则0
  • 异或:a^b,当两个条件刚好一个为真,其为1,否则0
  • 非:!a,当a 为假时,其为1,否则0

运算的优化级

分支结构程序设计 - 图4

数的性质 (p5710)

例3.2(洛谷P5710)

一些数字可能拥有以下的性质:

  • 性质1:是偶数;
  • 性质2:大于4 且不大于12。

小A 喜欢这两个性质同时成立的数字;Uim喜欢这至少符合其中 一种性质的数字;八尾勇喜欢刚好有符合其中一个性质的数字; 正妹喜欢不符合这两个性质的数字。

现在输入一个数字x(0≤x≤100),要求输出这4 个人是否喜欢这 个数字,如果喜欢则输出1,否则输出0,用空格分隔。

闰年判断

例3.3(洛谷P5711)

输入一个年份(大于1582 的整数),判断这一年是否为闰年,如 果是输出1,否则输出0。

  • 被4 整除(p1)是闰年,除非
  • 被100 整除(p2)不是闰年,除非
  • 被400 整除(p3)又是闰年
  1. // 判断闰年
  2. #include <iostream>
  3. using namespace std;
  4. int main(){
  5. int n ;
  6. cin >> n;
  7. bool p1,p2,p3;
  8. p1 = (n % 4) == 0;
  9. p2 = (n % 100 ) == 0; // 成立是平年 不成立是闰年
  10. p3 = (n % 400 ) == 0;
  11. if(p3 || (p1 && !p2) ){
  12. cout << "闰年" << endl;
  13. }
  14. // if( n %400 == 0 || (n % 4 && !(n%100) )){}
  15. }

分支结构程序设计 - 图5