内容正文:
CCF-GESP C++一级
CCF-GESP C++一级
编程能力等级认证
分支结构1
第六课
分支结构1
第六课是分支结构
2
其他常见运算符
01
01
第一部分是其他常见运算符
3
2、后++和前++、后--和前--的区别是其表达式的计算结果不同。
变量i加1之后的值
变量i加1之前的值
1
2
i++
i--
i+=1
i-=1
自增:
自减:
1、自增和自减运算符
int i=1;
i++;
int i=1;
++i;
自增和自减运算符
知识讲解
后++和前++,后—和前--的区别都是其表达式的计算结果不同。以自增运算符为例,后++是变量加1之前的值,而前++的结果就是变量i加1之后的值
4
自增运算符++和自减运算符--是单目运算符
类别 运算符
小括号 ()
自增自减 ++ --
逻辑非 !
算术运算符 * / %
+ -
输出运算符 <<
比较运算符 < <= > >=
== !=
逻辑运算符 &&
||
赋值运算符 = += -= *= /= %=
运算符的优先级
知识讲解
自增自减是单目运算符,单目运算符的优先级高于双目运算符
5
已知已定义整型变量w,x=0,y=0,z=0, 执行表达式w=++x||y++&&++z 后,w的值为( ) 。
A. 0
B. 1
C. 2
D. 3
B
选择题
w=++x||y++&&++z
w=1||0&&1
w=1||0
w=1
课堂练习
答案:B
解析:根据运算符的优先级,先算++,表达式为w=1||0&&1 ,再算逻辑与运算,表达式为w=1||0,最后算逻辑或运算,结果为1,赋值给变量w,所以w的值为1,选B
已知整型变量a=5,b=3,表达式 a+=a*=++b*3的值为( ) 。
A. 65
B. 80
C. 100
D. 120
D
选择题
a+=a*=++b*3
a+=a*=4*3
a+=a*=12
a+=60
120
课堂练习
答案:D
解析:根据运算规则,先算++,表达式为a+=a*=4*3,再算算术运算*,表达式为a+=a*=12,然后计算*=,a+=60,注意此时变量a的值为60,所以最终结果为120,选D
逗号运算符
逗号运算符可以把多个表达式连接在一起,构成一个更大的表达式;
计算规则:从左到右依次计算每一个表达式,整个逗号表达式的计算结果为最后一个表达式的计算结果。
int j=10;
10
111
1010
j++, j+100, 999+j;
计算结果
知识讲解
逗号运算符可以把多个表达式连接在一起,构成一个更大的表达式;
计算规则:依次计算每一个表达式,整个逗号表达式的计算结果为最后一个表达式的计算结果。
例如定义这里使用逗号链接了三个表达式,执行的时候会从左到右依次计算每一个表达式,第一个表达式的结果是10(后加加),j变成了11,第二表达式的结果111,第三个表达式的结果999+11=1010,整个逗号表达式的值为最后一个表达式的值,也就,1010
8
逗号运算符
int j=10;
int i;
i=j++,j+100,999+j;
cout<<i;
将运算结果保存到变量中
10
逗号运算符可以把多个表达式连接在一起,构成一个更大的表达式;
计算规则:从左到右依次计算每一个表达式,整个逗号表达式的计算结果为最后一个表达式的计算结果。
1010
知识讲解
将运算结果保存到一个新的变量i中,直接像这样赋值保存,发现保存的是第一个表达式的结果,这是因为逗号表达式优先级的问题
9
逗号运算符的优先级最低。
运算符的优先级
类别 运算符
小括号 ()
自增自减 ++ --
逻辑非 !
算术运算符 * / %
+ -
输出运算符 <<
比较运算符 < <= > >=
== !=
逻辑运算符 &&
||
赋值运算符 = += -= *= /= %=
逗号运算符 ,
int i;
i=(j++,j+100,999+j);
int j=10;
cout<<i;
1010
需要添加小括号
int i;
i=j++,j+100,999+j;
知识讲解
逗号运算符的优先级是最低的,比赋值运算符的优先级还低,所以在保存逗号表达式的计算结果时要用括号括起来
10
(2023年9月)C++语句cout<<(2, 3, "23")的输出为2,3,23。
判断题
正确 错误
真题解析
逗号运算符,只返回最后一个表达式的值,所以只输出23。
11
(2023年9月)对int类型的变量a、b、c,下列语句不符合C++语法是( )
A. c+=5;
B. b=c%2.5;
C. a=(b=3, c=4, b+c);
D. a-=a=(b=6)/(c=2);
选择题
B
只有整数才能进行取余运算
真题解析
因为只有整数才能进行运算,所以B项错误
12
if-else语句
02
02
第二部分学习if-else语句
13
顺序结构
顺序结构:代码默认是顺序执行,这种结构称为顺序结构
选择结构:根据条件成立与否,选择其中一条语句执行,也称为分支结构
实现分支结构的语句称为分支语句
条件
成立
不成立
语句1
语句2
语句2
语句1
语句3
选择结构
选择结构
知识讲解
我们之前学习的程序都是顺序执行的,这种结构称为顺序结构,本节课我们学习选择结构,选择结构是根据条件成立与否,选择其中一条语句执行,也称为分支结构,实现分支结构的语句称为分支语句
14
if ( 条件 ) 语句;
条件
true
成立
false
不成立
语句
if ( 条件 ) 语句1;
else 语句2;
条件
true
成立
false
不成立
语句2
语句1
if语句就是一种分支语句,由关键字if和else构成,
它有如下两种形式:
if语句
知识讲解
if语句就是一种分支语句,由关键字if和else构成,
它有如下两种形式:第一种是只有if语句,如果条件成立就执行对应的语句,如果不成立什么也不做。还有一种是if-else语句,如果条件成立执行语句1,否则执行语句2
15
将多条语句使用{}括起来称为复合语句
if(x<y) max=y;
else max=x;
if(x<y) { max=y; }
else { max=x; }
if(a>b){
t=a;
a=b;
b=t;
}
换行和缩进不是必须的
{}不是必须的
当有多条语句,必须使用{}
复合语句
知识讲解
if_else结构中当只有一条需要执行的语句时,{}可以有也可以没有。
当有多条需要执行的语句时,必须使用复合语句,使用{}包含。
我们之前在写代码的时候经常会用到换行和缩进,例如这段复合语句中的代码就使用了缩进,那么缩进和换行是必须的吗?
16
(2023年3月)if语句中的条件表达式的结果必须为bool类型。
判断题
正确 错误
真题解析
本题主要考察控制语句结构。if 语句的条件表达式不一定是 bool 类型, 也可能是其他类型,任何非零值都会被视为真,而零值会被视为假。
例如,如果 a 为 int 类型变量,则 if (a) ; 是否符合 C++语法的 if 语句,表示判断 a 是否为 0: a 不等于 0 时,则视为真,if 条件成立;反之,如果 a 等于 0,则视为假,if 条件 不成立。但 a 的类型为 int 类型,并不是 bool 类型,所以本题错误
17
(2023年6月)if语句可以没有else子句。
判断题
正确 错误
真题解析
本题考察 C++中分支结构中的 if 语句,if...else...语句的区别;if...else... 语句中,当 if 语句条件不满足,会执行 else 中的语句;if 语句可以独立存在,条 件满足,执行下级代码,条件不满足,跳过下级代码继续执行。所以本题正确
18
条件运算符
03
03
第三部分学习条件运算符
19
表达式2
条件
?
表达式1
:
true
false
条件运算符根据某个条件,计算表达式的结果。
运算规则:
条件成立,其计算结果为表达式1的值;
条件不成立,其计算结果为表达式2的值。
条件运算符 ?:
知识讲解
条件运算符是由一个问号和一个冒号组成的。它的作用是根据某个条件,计算表达式的结果。
唯一的三目运算符
使用条件运算符的语法格式是在问号前面填写条件,问号之后写两个表达式,中间用冒号分隔。
使用条件运算符运算的规则为:如果条件成立,计算表达式1,条件不成立,则计算表达式2。
20
表达式2
x>y
?
表达式1
:
条件
x
y
int x,y;
cin>>x>>y;
int max;
if(x>y) max=x;
else max=y;
cout<<max;
true
false
max= ;
计算较大的数
知识讲解
使用if-else编写的判断较大值的代码,使用条件运算符进行化简。问号之前填写条件x>y,问号之后添加第一个表达式x,第二个表达式y,两个表达式之间使用冒号分隔。使用条件运算符的运算规则为:当x>y成立,运算结果为x;当x>y不成立,运算结果为y。
21
类别 运算符 优先级
小括号 ()
算术运算符 * / %
+ -
输出运算符 <<
比较运算符 < <= > >=
== !=
条件运算符 ?:
赋值运算符 = += -= *= /= %=
逗号运算符 ,
由
高
到
低
条件运算符的优先级
知识讲解
条件运算符的优先级高于赋值运算符的优先级,因此我们可以将条件运算符运算的结果赋值给变量。另外条件运算符的优先级低于目前学习的其他运算符。
22
选择题
以下代码的输出结果是什么( )
int i=1,j=2,k=3;
i==1?(i=j+k,j=5):(k++,k++);
cout<<i<<" "<<j<<" "<<k;
A. 1 2 4
B. 1 2 5
C. 5 5 3
D. 5 5 5
C
条件
成立时执行
不成立时执行
课堂练习
答案:C
此题考察三目运算符,条件为i==1,条件成立,执行?后面的表达式,i=j+k所以i的值为5,j=5所以j的值为5,k的值不变,所以输出为5 5 3,选择C选项。
23
买文具(2023年9月)
【问题描述】
开学了,⼩明来到⽂具店选购⽂具。签字笔2元⼀⽀,他需要X⽀;记事本5元⼀本,他需要Y本;直尺3元⼀把,他需要Z把。⼩明⼿⾥有Q元钱。请你通过编程帮⼩明算算,他⼿⾥的钱是否够买他需要的⽂具。
【输入描述】
输⼊4⾏。
第⼀⾏包含⼀个正整数X,是⼩明购买签字笔的数量。约定1≤X≤10。
第⼆⾏包含⼀个正整数Y,是⼩明购买记事本的数量。约定1≤Y≤10。
第三⾏包含⼀个正整数Z,是⼩明购买直尺的数量。约定1≤Z≤10。
第四⾏包含⼀个正整数Q,是⼩明⼿⾥的钱数(单位:元)。
【输出描述】
输出2⾏。
如果⼩明⼿⾥的钱够买他需要的⽂具,则第⼀⾏输出"Yes",第⼆⾏输出⼩明会剩下的钱数(单位:元);
否则,第⼀⾏输出"No",第⼆⾏输出⼩明缺少的钱数(单位:元)。
真题解析
本题为2023年9月真题
24
买文具(2023年9月)
【样例输入1】
1
1
1
20
【样例输出1】
Yes
10
【样例输入2】
1
1
1
5
【样例输出2】
No
5
1*2+1*5+1*3=10
20-10=10
1*2+1*5+1*3=10
10-5=5
真题解析
分析样例:
输入的前3个整数表示数量,第4个整数表示带的钱数,先计算出购买对饮数量的物品需要多少钱,再使用带的钱数减去花费的钱数就是剩余的钱数
25
思路分析
③ 判断是否够买需要的文具,并按要求输出结果
if(q>=t){
cout<<"Yes"<<endl;
cout<<q-t<<endl;
}else{
cout<<"No"<<endl;
cout<<t-q<<endl;
}
① 定义四个变量,按要求输入4个整数
int x=0,y=0,z=0,q=0;
cin>>x>>y>>z>>q;
② 计算花费的钱数,使用变量t保存
int t=x*2+y*5+z*3;
真题解析
思路分析:
1、定义四个变量,输入4个整数
2、计算买对应的文具需要花费的钱数,将结果使用变量t保存
3、根据钱数进行判断,如果q大于等于t,说明够买,那么输出yes,然后计算剩余的钱数q-t并将结果输出;否则条件不成立,说明不够买,那么输出no,计算差的钱数t-q并将结果输出
26
写一写
#include <iostream>
using namespace std;
int main(){
int x=0,y=0,z=0,q=0;
cin>>x>>y>>z>>q;
int t=x*2+y*5+z*3;
if(q>=t){
cout<<"Yes"<<endl;
cout<<q-t<<endl;
}else{
cout<<"No"<<endl;
cout<<t-q<<endl;
}
return 0;
}
真题解析
感谢你的学习
28
$$