内容正文:
CCF-GESP C++一级
CCF-GESP C++一级
编程能力等级认证
分支结构2
第七课
分支结构2
第七课是分支结构
2
if-else多分支语句
01
01
第一部分是if-else多分支语句
3
if (条件1) 语句1;
else if (条件2) 语句2;
……
else if (条件n) 语句n;
else 语句n+1;
当条件为真,则执行对应的语句,并终止整个多分支语句的执行;
条件都不成立,则执行else语句。
else if的数量可以有任意多个。
最后的else语句不是必须的。
当有多个条件成立时,只会执行第一个满足条件的语句。
if-else多分支语句
知识讲解
当条件为真,则执行对应的语句,并终止整个多分支语句的执行;
条件都不成立,则执行else语句。
else if的数量可以有任意多个。
最后的else语句不是必须的。
当有多个条件成立时,只会执行第一个满足条件的语句。
4
选择题
int m=14;
int n=12;
if(m%2==0&&n%2==0)
cout<<"都是偶数";
else if(m%2==1&&n%2==1)
cout<<"都是奇数";
else
cout<<"不都是偶数或奇数";
(2023年9月)下面C++代码执行后的输出是( )
都是偶数
都是奇数
不都是偶数或奇数
以上说法都不正确
A
14%2==0&&12%2==0
1&&1
1
真题解析
首先看if后面的条件是否成立,将m和n的值带入到表达式中就是14%2==0&&12%2==0,14%2的结果是0,12%2的结果也是0,两个条件都成立,所以转换成1&&1,那么结果为1条件成立,会输出都是偶数。
当有一个条件成立时,后面的语句不会再执行,所以选A
5
选择题
int m=14;
int n=12;
if(m%2&&n%2)
cout<<"都是偶数";
else if(m%2==1&&n%2==1)
cout<<"都是奇数";
else
cout<<"不都是偶数或奇数";
(2023年9月)下面C++代码执行后的输出是( )
都是偶数
都是奇数
不都是偶数或奇数
以上说法都不正确
14%2&&12%2
0&&0
0
真题解析
首先看if后面的条件是否成立,将m和n的值带入到表达式中就是14%2&&12%2,14%2的结果是0,12%2的结果也是0,所以转换成0&&0,那么结果为0条件不成立,会继续执行下一个判断语句
6
选择题
int m=14;
int n=12;
if(m%2&&n%2)
cout<<"都是偶数";
else if(m%2==1&&n%2==1)
cout<<"都是奇数";
else
cout<<"不都是偶数或奇数";
(2023年9月)下面C++代码执行后的输出是( )
都是偶数
都是奇数
不都是偶数或奇数
以上说法都不正确
C
14%2==1&&12%2==1
0&&0
0
真题解析
将m和n的值带入到表达式中就是14%2==1&&12%2==1,14%2的结果是0,12%2的结果也是0,两个条件都不成立,所以转换成0&&0,那么结果为0条件不成立。
两个条件都不成立,所以会执行Else后面的语句,所以选C
7
选择题
int m=7;
if(m/5||m/3)
cout<<0;
else if(m/3)
cout<<1;
else if(m/5)
cout<<2;
else
cout<<3;
(2023年9月)下面C++代码执行后的输出是( )
0
1
2
3
A
7/5||7/3
1||2
1
真题解析
首先看if后面的条件是否成立,将m的值带入到表达式中就是7/5||7/3,7/5的结果是1,7/3的结果是2,所以转换成1||2,那么结果为1条件成立,会输出0。所以选A
8
每月天数(2023年3月)
【问题描述】
小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编
程方法求出给定的月份有多少天。你能做到吗?
【输入描述】
输入一行,包含两个整数,分别表示一个日期的年、月。
【输出描述】
输出一行,包含一个整数,表示输入月份有多少天。
【样例输入1】
2022 1
【样例输出1】
31
【样例输入2】
2020 2
【样例输出2】
29
真题解析
接下来完成一道编程题,是2023年3月的真题每月天数
9
月份 天数
大月 1月、3月、5月、7月、8月、10月、12月 31天
小月 4月、6月、9月、11月 30天
平月 2月 平年:28天;闰年:29天
分析每个月份的天数
真题解析
月份分为大月、小月和平月,大约的月份都是31天,小月的月份都是30天,平月的天数根据平年和闰年觉得,如果是平年就是28天,如果是闰年就是29天
10
"四年一闰,百年不闰,四百年再闰"
能被4整除但是不能被100整除,或者能被400整除
y%4==0
y%100!=0
y%400==0
&&
||
判断闰年
真题解析
所以我们要判断输入的年份是平年还是闰年,闰年的判断条件是“四年一闰,百年不闰,四百年再闰”,转换成伪代码就是能被4整除但是不能被100整除,或者能被400整除。
能被4整除但是不能被100整除,这两个条件之间是并且的关系,两个条件都成立才是闰年;这两个条件整体和第三个条件是或者的关系,只要有一个成立那么就是闰年,转换成代码表示就是y%4==0&&y%100!=0||y%400==0
,
11
思路分析
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
cout<<31<<endl;// 大月
else if(m==4||m==6||m==9||m==11)
cout<<30<<endl; // 小月
① 定义两个变量,输入年份和月份
int y,m;
cin>>y>>m;
bool leap=false;
if(y%4==0&&y%100!=0||y%400==0)
leap=true;
else if(leap)
cout<<29<<endl;// 闰年2月
else
cout<<28<<endl;// 平年2月
② 判断月份,并输出对应的天数
③ 判断闰年,输出二月份的天数
真题解析
思路分析:
首先定义两个变量,输入年份和月份,然后判断月份输出对应的天数,如果是1/3/5/7/9/12月那么就输出31天,否则如果是4/6/9/11月就输出30天,如果这两个条件都不成立那么说明月份是2月,此时需要对年份进行判断,定义一个布尔类型的变量初始值设置为flase,如果判断闰年的条件成立就将该变量的值改为true。最后判断该变量的值,如果成立说明是如年就输出29天,否则是平年就输出28天
12
写一写
#include <iostream>
using namespace std;
int main(){
int y,m;
cin>>y>>m;
bool leap=false;
// 判断闰年
if(y%4==0&&y%100!=0||y%400==0)
leap=true;
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
cout<<31<<endl;// 大月
else if(m==4||m==6||m==9||m==11)
cout<<30<<endl; // 小月
else if(leap)
cout<<29<<endl;// 闰年2月
else
cout<<28<<endl;// 平年2月
return 0;
}
真题解析
switch语句
02
02
第二部分是switch语句
14
switch表达式结果必须为整型、字符型、布尔型;
case后面不能是变量,必须为具体数值;
case后面的数值可以是整数、字符、布尔值;
case后面的数值不能重复;
default语句是默认语句,当表达式的结果和所有case都不匹配时,执行default语句。
case 数值1: 语句1; break;
case 数值2: 语句2; break;
……
case 数值n: 语句n; break;
default: 语句; break;
switch(表达式){
}
switch语法格式和注意事项
知识讲解
switch表达式结果必须为整型、字符型、布尔型;
case后面不能是变量,必须为具体数值;
case后面的数值可以是整数、字符、布尔值;
case后面的数值不能重复;
default语句是默认语句,当表达式的结果和所有case都不匹配时,执行default语句。
15
表达式
开始
case 数值1
语句1
break
结束
case 数值2
语句2
break
case 数值3
语句3
break
default
语句4
break
入口
终止
switch语句的流程图
知识讲解
计算表达式,根据计算结果找到满足的case,执行对应的语句,然后使用break终止程序,后面的case不会再被执行
switch语句的执行过程:
通过表达式的结果找到匹配的case分支或者default作为入口
直到遇到break,结束整个switch语句。
最后一条分支语句,有没有break均可。
16
break的作用是结束整个switch语句。
switch语句的执行过程:
通过表达式的结果找到匹配的case分支或者default作为入口
直到遇到break,结束整个switch语句。
最后一条分支语句,有没有break均可。
switch(表达式){
}
case 数值1: 语句1; break;
case 数值2: 语句2; break;
……
case 数值n: 语句n; break;
default: 语句; break;
break关键字的作用
知识讲解
break的作用是结束整个switch语句。
switch语句的执行过程:
通过表达式的结果找到匹配的case分支或者default作为入口
直到遇到break,结束整个switch语句。
最后一条分支语句,有没有break均可。
17
if语句适合判断条件比较复杂,但是分支比较少的情况。
switch语句适合判断条件简单,但是分支比较多的情况。
switch语句只能针对某个表达式的值做出判断,不能直接判断某个范围。
不同选择结构的特点
知识讲解
每种选择结构都有不同的特点和使用场景:
if语句适合判断条件比较复杂,但是分支比较少的情况。
switch语句适合判断条件简单,但是分支比较多的情况。
switch条件语句只能针对某个表达式的值做出判断,不能判断某个范围。
18
每月天数(2023年3月)
【问题描述】
小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编
程方法求出给定的月份有多少天。你能做到吗?
要求:使用switch语句完成。
【输入描述】
输入一行,包含两个整数,分别表示一个日期的年、月。
【输出描述】
输出一行,包含一个整数,表示输入月份有多少天。
【样例输入1】
2022 1
【样例输出1】
31
【样例输入2】
2020 2
【样例输出2】
29
真题解析
这道题目使用switch语句也可以完成
19
switch(m){
case 1: cout<<31; break;
case 3: cout<<31; break;
case 5: cout<<31; break;
case 7: cout<<31; break;
case 8: cout<<31; break;
case 10: cout<<31; break;
case 12: cout<<31; break;
case 4: cout<<30; break;
case 6: cout<<30; break;
case 9: cout<<30; break;
case 11: cout<<30; break;
case 2: 如果为闰年, 输出29天; 否则, 输出28天; break;
}
执行语句相同
执行语句相同
思路分析
真题解析
当多个case所对应的执行语句相同时,可以将这些case进行合并
20
switch(表达式){
case 数值1: case 数值2:
语句1; break;
case 数值3: case 数值4:
语句2; break;
case 数值5:
语句3; break;
......
}
合并case语句语法格式
真题解析
多个case可以合并,多个case之间使用冒号隔开,将多个case执行的语句写在多个case下边
21
switch(m){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
cout<<31; break;
case 4: case 6: case 9: case 11:
cout<<30; break;
case 2:
如果为闰年, 输出29天;
否则, 输出28天;
break;
}
执行相同语句的case分支合并
执行相同语句的case分支合并
思路分析
真题解析
这样我们可以将1/3/5/7/8/10/12月的case合并,只要是这几个月份就输出31,然后break
将4/6/9/11合并,只要是这几个月份就输出30,然后break
如果是2月,要进行判断,如果为闰年输出29天,否则输出28天,然后break
22
switch(m){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
cout<<31; break;
case 4: case 6: case 9: case 11:
cout<<30; break;
case 2:
y%4==0 && y%100!=0 || y%400==0 ? cout<<29 : cout<<28;
break;
}
思路分析
使用条件运算符
真题解析
判断平年闰年的方式跟之前讲解的是一样的,在这道题目中我们可以使用条件运算符进行判断,条件就是y%4==0&&y%100!=0||y%400==0?cout<<29,如果这个条件成立说明是闰年要输出29天,将输出语句写在问号后,否则输出28天,将输出语句写在冒号后
23
思路分析
① 定义两个变量,输入年份和月份
int y,m;
cin>>y>>m;
② 判断月份,并输出对应的天数
③ 判断闰年,输出二月份的天数
switch(m){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
cout<<31;
break;
case 4:case 6:case 9:case 11:
cout<<30;
break;
}
case 2:
y%4==0&&y%100!=0||y%400==0?cout<<29:cout<<28;
break;
真题解析
思路分析:
首先定义两个变量,输入年份和月份,然后判断月份输出对应的天数,如果是1/3/5/7/9/12月那么就输出31天,否则如果是4/6/9/11月就输出30天,如果这两个条件都不成立那么说明月份是2月,此时需要对年份进行判断,定义一个布尔类型的变量初始值设置为flase,如果判断闰年的条件成立就将该变量的值改为true。最后判断该变量的值,如果成立说明是如年就输出29天,否则是平年就输出28天
24
写一写
#include <iostream>
using namespace std;
int main(){
int y,m;
cin>>y>>m;
switch(m){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
cout<<31;
break;
case 4:case 6:case 9:case 11:
cout<<30;
break;
case 2:
y%4==0&&y%100!=0||y%400==0?cout<<29:cout<<28;
break;
}
return 0;
}
真题解析
感谢你的学习
26
$$