当前位置: 首页 > news >正文

NO.17十六届蓝桥杯备战|do-while循环|break和continue语句|三道练习(C++)

do-while循环

do-while语法形式

在循环语句中 do while 语句的使⽤最少,它的语法如下:

//形式1  
do  
	语句;  
while( 表达式 );

//形式2  
do  
{  
	语句1;  
	语句2;  
	...  
}  
while( 表达式 );

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环;
⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

执⾏流程

![[Pasted image 20250213173353.png]]

在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。
所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

实践

使⽤ do while 循环在屏幕上打印1~10的值

#include <iostream>  
using namespace std;  

int main()  
{  
	int i = 1;  
	
	do  
	{  
		cout << i << " ";  
		i = i + 1;  
	} while (i <= 10);
	
	return 0;  
}

![[Pasted image 20250213173526.png]]

⼀般 do while 使⽤在循环体⾄少被执⾏⼀次的场景下,所以较少⼀些。

练习

统计正整数的位数

输⼊⼀个正整数,计算这个整数是⼏位数?
例如:
输⼊:1234 输出:4
输⼊:12 输出:2

#include <iostream>
using namespace std;

int n;

int main()
{
	cin >> n;
	int cnt = 0;
	do
	{
		n /= 10;
		cnt++;
	}while (n);
	cout << cnt << endl;

	return 0;
}

这⾥并⾮必须使⽤ do while 语句,但是这个代码就⽐较适合使⽤ do while 循环,因为n即使是0,也是1位数,要统计位数的。

B2076 球弹跳高度的计算
#include <iostream>
using namespace std;

int main()
{
    double h;
    cin >> h;
    double sum = 0;
    for (int i = 1; i <= 10; i++)
    {
        sum += h;
        h /= 2;
        sum += h;
    }
    cout << sum - h << endl;
    cout << h << endl;
    
    return 0;
}
#include <iostream>  
using namespace std; 

int main()  
{  
	double h = 0;  
	cin >> h;  
	int i = 1;  
	double total = h;  
	
	do  
	{  
		h /= 2;  
		total += h * 2;  
		i++;  
	} while (i <= 9);  
	
	cout << total << endl;  
	cout << h / 2 << endl;  
	
	return 0;  
}

![[Pasted image 20250214095000.png]]

break和continue语句

break和continue介绍
  • 在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C++中提供了 break 和 continue 两个关键字,就是应该到循环中的。
  • break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。
  • continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。
    注意: break 和 continue 在各个循环语句中的使⽤⽅式基本相同,这⾥仅以 while 循环举例。
break举例
#include <iostream>  
using namespace std;  

int main()  
{  
	int i = 1;  
	while (i <= 10)  
	{  
		if (i == 5)  
		{
			break; //当i等于5后,就执⾏break,循环就终⽌了  
		}  
		cout << i << " ";  
		i = i + 1;  
	}  
	
	return 0;  
}

![[Pasted image 20250214095607.png]]

打印了1,2,3,4后,当i等于5的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。
所以 break 的作⽤就是永久的终⽌循环,只要break被执⾏, break外的第⼀层循环就终⽌了。
那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。

continue举例

continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续往下 执⾏。

#include <iostream>  
using namespace std; 

int main()  
{  
	int i = 1;  
	while (i <= 10)  
	{  
		if (i == 5)  
			continue;  
		cout << i << " ";  
		i = i + 1;  
	}  
	
	return 0;
}

到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。

#include <iostream>  
using namespace std; 

int main()  
{  
	int i = 0;  
	for (i = 1; i <= 10; i++)  
	{  
		if (i == 5)  
			continue;  
		cout << i << " ";  
	}  
	return 0;  
}

代码输出

1 2 3 4 6 7 8 9 10

在 for 循环中, continue 跳过本次循环中 continue 后边的代码,接下来执⾏的是 i++ ,在这⾥循环变量得到了调整,就没有造成死循环,所以 continue 在 while 循环和 for 循环中略有差异

练习

解析:
⾸先要了解什么是质数,质数是只能被 1 和它本⾝整除的数字,也就是质数只有2个因⼦,就是 1 和它本⾝。
所以假设 n 有两个质数的因⼦,⾸先就是 n = m1 * m2 , m1 和 m2 是两个质数因⼦。m1 和 m2 是质数的话,就说明没有除了 1 和它本⾝的因⼦,所以 n 的因⼦也只能是 1 、m1 、m2 和 n
所以我们只需要找出 2~n-1 (不包含 1 和 n )之间较⼩的因⼦ m1 ,则 m2 = n / m1 。

#include <iostream>
using namespace std;

int n;

int main()
{
    cin >> n;
    int i = 0;
    for (i = 2; i < n; i++)
    {
        if (n % i == 0)
            break;
    }
    cout << n / i << endl;
    
    return 0;
}
#include <iostream>  
using namespace std;  

int main()  
{  
	int n = 0;  
	cin >> n;  
	int i = 0;  
	
	for (i = 2; i < n; i++)  
	{  
		if (n % i == 0)  
		{  
			cout << n / i << endl;  
			break;  
		}  
	}  
	
	return 0;  
}

相关文章:

  • ICIR2025 | CubeDiff:重新利用基于扩散的图像模型来生成360°全景图
  • 基于WebAssembly的后端服务突破:打造高性能、安全的新型微服务架构
  • LabVIEW国内外开发的区别
  • MySQL数据库的数据文件保存在哪?MySQL数据存在哪里
  • 【DeepSeek】Ollama部署本地大模型DeepSeek-R1,交互界面Open-WebUI,RagFlow构建私有知识库
  • 数据结构——Makefile、算法、排序(2025.2.13)
  • ECP在Successfactors中paylisp越南语乱码问题
  • CSS 怎么实现样式隔离?
  • (萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
  • 蓝桥杯试题:归并排序
  • 《open3D+pyqt 》第一章:点云读取、显示与保存用——open3d原生显示框架
  • 开源赋能,智造未来:Odoo+工业物联网,解锁智能工厂新范式——以真实案例解读制造业数字化转型的降本增效密码
  • 前端vue引入特殊字体不生效
  • mysql的主从配置
  • DNS污染:网络世界的“隐形劫持”与防御
  • 人才画像如何助力企业 “看准人”、“看透人”
  • ORDER BY盲注攻击:原理、实现与防御(附Python多线程爆破脚本)
  • Spring Boot 3 集成Xxl-job 3.0.0 单机
  • 【算法】动态规划专题⑪ —— 区间DP python
  • 【MySQL】 基本查询(上)
  • 营销型网站建设品牌/推广代理平台登录
  • 做曖网站/网站自然排名怎么优化
  • 政府网站信息化建设调查表/潍坊关键词优化排名
  • 厦门做网站优化/什么平台可以推销自己的产品
  • 网络规划设计师教程第2版 下载/网站推广优化网址
  • 舆情报告单/seowhy论坛