内容正文:
CCF-GESP C++一级
CCF-GESP C++一级
编程能力等级认证
break和continue关键字
第十课
break和continue关键字
本次课程内容只在考试大纲中有,在往期真题里还没有出现过
2
break关键字
01
01
第一部分是break关键字
3
break:结束、终止。
当break语句出现在循环中,用于终止循环。
游戏中的退出按钮
秒表计时
break终止
知识讲解
break关键字在之前学习分支结构switch时使用过,除了用于结束switch,还可用于结束循环。
Break是终止的意思,可以理解为生活中直接结束,直接退出,例如我们想将执行着的某个任务关闭,点击结束任务,那么这个任务就彻底结束了
4
for(循环变量;循环条件;循环步长){
if(判断条件){
break;
}
语句1;
}
语句2;
break终止
知识讲解
在for循环中使用break语句时通常和if语句一起使用,当满足if语句的条件时,就执行break语句,这样循环结束,不会再执行语句1,而是跳出循环执行语句2
5
#include <iostream>
using namespace std;
int main(){
for(int i=1;i<=10;i++){
cout<<i<<" ";
if(i==6)
break;
}
return 0;
}
以下程序的输出结果是什么( )
填空题
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 7 8 9 10
B
课堂练习
代码的含义是循环1~10之间的数字,输出i值,如果i值为6,那么执行break语句,终止循环,所以会输出1 2 34 5 6,选B
6
特殊求和
【问题描述】
如果一个数能够被7整除或者含有数字7,那么我们称这个数为幻数,比如17,21,73是幻数,而6,59不是。求出1~100(包含1和100)中所有幻数的和,当累加和大于等于1000时停止累加,输出所有满足条件的数字。
【输出描述】
一行,1~100中所有满足条件的数字,使用空格隔开。
【样例输出】
7 14 17 21 27 28 35 37 42 47 49 56 57 63 67 70 71 72 73 74 75
课堂练习
7
for(int i=1; i<=100; i++){
//判断是否能被7整除,或者个位为7 ,或者十位为7
if( || || )
i%7==0
i%10==7
//循环1~100之间的整数
}
i/10==7
思路分析
//定义变量sum进行累加
int sum=0;
cout<<i<<" ";
sum+=i;
//如果累加和大于等于1000,终止循环
if(sum>=1000) break;
}
{
课堂练习
首先要循环1~100之间所有的数字,然后判断数字是否为幻数,判断能否被7整数,也就是对7取余结果为0,含7表示该数字的十位或者个位为7,所以需要将数字的十位和个位上的数字取出来,让这个数对10进行取余,得到的余数就是个位上的数字,判断是否等于7,十位上的数字就是除以10,判断是否为7。这三个条件只要满足其中一个就是幻数,所以三个条件之间是或者的关系。如果这个条件成立,那么就是幻数,输出该数,然后进行累加,定义一个变量sum保存累加和。如果累加和大于等于1000,终止循环
8
写一写
#include <iostream>
using namespace std;
int main(){
int sum=0;
for(int i=1;i<=100;i++){
if(i%7==0||i%10==7||i/10==7){
cout<<i<<" ";
sum+=i;
}
if(sum>=1000) break;
}
return 0;
}
课堂练习
continue关键字
02
02
第二部分是continue关键字
10
下一曲
continue:继续,结束本次循环,进入到下一次循环当中。
continue
知识讲解
continue是继续、跳过的继续,类似于我们听音乐时的下一曲,当按下这个按钮时,当前播放的歌曲就会立刻停止,播放下一首音乐,当在循环中使用continue语句时,会直接结束本次循环,进入到下一次循环当中
11
for(循环变量;循环条件;循环步长){
if(判断条件){
语句1;
continue;
}
语句2;
}
continue语句的作用是跳过本次循环,进入下一次循环。
for(循环变量;循环条件;循环步长){
if(判断条件){
break;
}
语句1;
}
语句2;
break语句的作用是终止整个循环,执行循环后面的语句。
continue和break区别
知识讲解
当时for循环中使用continue语句时,如果if条件成立,就会跳过本次循环,不会再执行语句2,而是改变循环步长,进入下一次循环。
在这里可以比较一下continue和break的区别,continue是语句的作用是跳过本次循环,进入下一次循环,break语句的作用是终止整个循环,执行循环后面的语句
12
(2023年9月)在下面的C++代码中,由于循环中的continue是无条件被执行,因此将导致死循环。
for(int i=1;i<10;i++) continue;
判断题
正确 错误
真题解析
在这个代码示例中,循环将从 i = 1 开始,然后在每次迭代时 continue 将会执行。由于 continue 是无条件的,它会导致当前迭代立刻结束,然后进行下一次迭代。因此,这个循循环实际上会在循环的条件 i < 10 满足时进行9次迭代(i 从 1 到 9),然后在 i 变成 10 时循环终止。所以,这个代码不会导致死循环,它会正常执行,并在 i 到达 10 时退出循循环。
13
#include <iostream>
using namespace std;
int main(){
for(int i=5;i>=1;i--){
if(i%2==0)
continue;
cout<<i<<" ";
}
return 0;
}
以下程序的输出结果是什么( )
填空题
5
5 4
5 3 1
4 2
C
i 输出
5 5
4 过
3 3
2 过
1 1
0 循环结束
课堂练习
此段代码的含义是循环5~1之间的数字,如果i的值能够被2整除,就跳过本次循环,也就是不会输出i,而是进入下一次循环。所以输出5 3 1,选C
14
满足条件的数的累加
【问题描述】
现有n个整数,将其中个位数为k的数进行累加求和。
【输入描述】
第一行两个整数n、k,以空格分隔。(0<n<1000, 0≤k≤9)
第二行n个非负整数,以空格分隔,每个数不大于100000。
【输出描述】
输出满足题目要求的累加和。
【样例输入】
10 7
2 5 7 17 11 18 4 27 1 7
【样例输出】
58
课堂练习
15
【样例输入】
10 7
2 5 7 17 11 18 4 27 1 7
【样例输出】
58
10个整数
个位数为7
满足条件的数的累加
课堂练习
输入的一个整数表示整数的个数有10个,第二个整数表示找到个位数为7的数字
第二行输入10个整数,找到其中个位数为7的数字相加,分别是7 17 27 7,相加得到58,输出结果为58
16
思路分析
int a;
for(int i=0;i<n;i++){
cin>>a;
}
① 定义变量n,k,输入两个整数
int n,k;
cin>>n>>k;
④ 输出累加和
cout<<sum;
② 循环输入n个整数
如果 个位数不为k
过
累加a
③ 累加满足条件的数
if(a%10!=k)
continue;
sum+=a;
int sum=0;
课堂练习
1、定义两个变量nk,输入两个整数
2、使用循环输入n个整数,定义变量a,将输入的整数保存到变量a中
3、在循环中判断输入的数字个位数是否为7,取到一个数字个位数的方式是用该数对10取余,如果结果不为7说明个位数不为7,不需要累加,直接跳过,所以这里使用continue语句跳过本次循环,条件不成立的时候就是个位数为7的数字,此时将数字累加到变量sum中
4、输出累加和sum
17
写一写
#include <iostream>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
int a;
int sum=0;
for(int i=0;i<n;i++){
cin>>a;
if(a%10!=k) continue;
sum+=a;
}
cout<<sum;
return 0;
}
课堂练习
18
格式化输入输出
03
03
第三部分的内容是格式化输入输出
19
scanf() 按规定格式输入内容 scanf("格式字符串",数据1,数据2……)
printf() 按规定格式输出内容 printf("格式字符串",数据1,数据2……)
printf()和scanf()包含在cstdio文件中,所以必须在程序中先包含该文件
printf()和scanf()
printf("%d-%d-%d
",2023,5,1);
占位符
换行符
取地址符
int a;
scanf("%d", &a);
占位符
知识讲解
除了使用cin、cout输入输出以外,有时需要按照固定的格式进行输入输出,这时可以使用scanf和printf完成,printf()和scanf()包含在cstdio文件中,所以必须在程序中先包含该文件:#include <cstdio>
scanf的输入格式是,第一部分是格式化字符串,使用逗号分隔,接下来是变量名,多个变量名使用逗号分隔,变量名的前面需要使用取地址符&
printf的输出格式是,第一部分是格式化字符串,使用对应的数据类型占位符,第二部分是要输出的变量名,多个变量名使用逗号间隔
换行在使用cout输出时是endl,使用printf输出时是使用换行符
整数类型的占位符使用%d表示,%02d表示输出内容的宽度设置为2,如果原宽度比2大,则原数据原样输出,如果原宽度比2小,则填充0后进行输出
20
占位符
占位符 说明
%d 整数int
%c 字符char
%f 浮点数float
%g 浮点数去除小数尾0
%lf 双精度浮点数double
%lg 去除双精度浮点数double小数尾0
知识讲解
整数int的占位符是%d,字符char的占位符是%c,浮点数float的占位符是%f,浮点数去除小数尾0使用%g,双精度浮点数double使用%lf,去除双精度浮点数double小数尾0使用%lg
21
修饰符
%02d
设置输出内容宽度
原宽度比2大,则原数据原样输出
原宽度比2小,则填充0后进行输出
设置填充字符
可以在占位符中添加修饰符,进一步修饰格式
知识讲解
整数int的占位符是%d,字符char的占位符是%c,浮点数float的占位符是%f,浮点数去除小数尾0使用%g,双精度浮点数double使用%lf,去除双精度浮点数double小数尾0使用%lg
22
指定小数位数
float b=2.50;
printf("%.1f",b);
printf("%.2f",b);
printf("%.5f",b);
小数点后输出保留2位
小数点后输出保留5位
小数点后输出保留1位
2.5
2.50
2.50000
知识讲解
使用printf输出小数可以指定小数位数,例如有浮点类型变量2.50,小数点后输出保留1位的方式是%.1f,1就代表保留1位,同样的道理如果保留两位小数就写%.2f,保留5位就是%.5f,不够的位数会自动补0
23
例如输入形式为:23-12
23-12
23-12
23:12
23-0
指定输入格式
int a,b;
scanf("%d-%d",&a,&b);
printf("%d-%d",a,b);
一定要按照scanf()指定格式输入!
知识讲解
此时scanf中设置输入格式是中间连字符连接,之后进行输出
我们测试23-12,正常打印输出,但是当我们输入23:12后,此时只有第一个变量a能成功接受到数据23,所以一定要按照scanf指定格式输入
24
小玉家的电费
【题目描述】
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写,据闽价电 [2006]27规定:
月用电量在150千瓦时及以下部分按每千瓦时 0.4463元执行,
月用电量在151∼400千瓦时的部分按每千瓦时0.4663执行,
月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;
小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
要求:使用scanf()和printf()完成。
【输入格式】
输入一个小数,精确到小数点后2位,表示用电总计(单位以千瓦时计),不超过10000。
【输出格式】
输出一个小数,保留到小数点后1位(单位以元计)。
【输入样例】
267.50
【输出样例】
121.7
课堂练习
25
思路分析
② 判断电量属于哪个等级并计算费用,保存到变量m中
double m=0;
if(a<=150)
m=a*0.4463;
else if(a>=151&&a<=400)
m=150*0.4463+(a-150)*0.4663;
else if(a>=401)
m=150*0.4463+250*0.4663+(a-400)*0.5663;
① 输入一个小数,表示用电量
double a;
scanf("%lf",&a);
③ 输出结果,保留一位小数
printf("%.1lf",m);
电量 单价
<=150 0.4463
151~400 0.4663
>=401 0.5663
课堂练习
将电量分为三个阶段,小于等于150的部分,单价为0.4463
电量在151~400的部分,单价为0.4663
电量大于等于401的部分,单价为0.5663
1、定义double类型的变量,输入一个小数表示用电总量
2、判断电量属于哪个等级并计算费用,如果电量小于等于150,费用为a*0.4463;如果电量在151到400之间,那么费用包含两部分,一部分是150电量的费用,一部分是超过150的部分;如果电量大于等于401,那么费用包括三部分,一部分是小于等于150的部分,第二部分是在151~400之间的,第三部分是大于等于401的
3、将结果保存到变量m中,输出时保留一位小数,double类型的占位符是%lf,所以输出为%.1lf
26
写一写
#include <iostream>
using namespace std;
int main(){
double a;
scanf("%lf",&a);
double m=0;
if(a<=150) m=a*0.4463;
else if(a>=151&&a<=400) m=150*0.4463+(a-150)*0.4663;
else if(a>=401) m=150*0.4463+250*0.4663+(a-400)*0.5663;
printf("%.1lf",m);
return 0;
}
课堂练习
感谢你的学习
28
$$