分支结构
if | if …else… 条件判断
课堂练习:输出apples
x 为1 输出 apple, x > 1 输出 apples
方法一: 直接输出不同的提示语
#include <iostream>
using namespace std;
int main(){
int x ;
cin >> x;
if(x== 1){
cout << "Today,I ate 1 apple " << endl;}
else{
cout << "Today,I ate " << x << " apples ";
}
}
方法二: 判断是否在apple后追加“s”
#include <iostream>
using namespace std;
int main(){
int x ;
cin >> x;
cout << "Today,I ate " << x << " apple";
if(x > 1){
cout << "s";
}
}
swich case
对于一些分叉很多(常数判断)的情况下,使用if 会比较方便 使用了switch-case语句,判断一个变量是什么值,根据不同的值 来进行操作 case 只能判定常量,执行完一个分支,在下个case 前加break 如果case 的所有情况都不符合,可以使用
语法:
switch (变量名) {
case 变量可能的情况1: 执行语句1; break;
case 变量可能的情况2: 执行语句2; break;
...
default: 执行语句n;
}
题3.6 小洛机器人
没有break,case语句会继续执行下面的条件判断语句。
#include <iostream>
using namespace std;
/*
例3.6
提供以下指令(一个字符),机器人按照指令给出对应的回复:
•输入G:打招呼,小洛会回复Hello, my master!,还会在下一行
加上一句I'm Xiaoluo.
•输入N:自我介绍,小洛只会回复I'm Xiaoluo.
•输入S:唱歌,小洛会哼唱Teinei teinei teinei~
•输入B或者Q:告别,小洛向你说Bye bye!
•其他任何字符:小洛无法理解,只能回复Sorry...
*/
int main(){
char ch;
cin >> ch;
switch (ch) {
case 'G':
cout << "Hello, my master!" << endl;
// cout << "I'm Xiaoluo." << endl;
// break;
case 'N':
cout << "I'm Xiaoluo." << endl;
break;
case 'S':
cout << "Teinei teinei teinei~" << endl;
break;
case 'B':
case 'Q':
cout << "Bye bye!" << endl;
break;
default:
cout << "Sorry..." << endl;
}
}
关系表达式与逻辑表达式
浮点数精度误差 ( fabs() )
浮点数可能会产生精度误差
所以一般不用== 来判断两个浮点数是否相等
正确的方式:比较这两个数的差值是否小于一定程度
假设fabs(a-b)<1e-6
成立,就可以认为浮点数a 和b 相等。
注意要用<cmath> 头文件
double a, b;
......
if (a == b) // 这么写是错误的!会造成浮点数误差!
if (fabs(a - b) < 1e-6) // 正确的写法,注意 <cmath>
逻辑表达式
多个条件复合成一个条件进行判断。
- 与:a&&b,当这两个条件都为真,其为1
- 或:a||b,当两个条件至少有一个为真,其为1,否则0
- 异或:a^b,当两个条件刚好一个为真,其为1,否则0
- 非:!a,当a 为假时,其为1,否则0
运算的优化级
数的性质 (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)又是闰年
// 判断闰年
#include <iostream>
using namespace std;
int main(){
int n ;
cin >> n;
bool p1,p2,p3;
p1 = (n % 4) == 0;
p2 = (n % 100 ) == 0; // 成立是平年 不成立是闰年
p3 = (n % 400 ) == 0;
if(p3 || (p1 && !p2) ){
cout << "闰年" << endl;
}
// if( n %400 == 0 || (n % 4 && !(n%100) )){}
}