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 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
执⾏流程
在 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;
}
⼀般 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;
}
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;
}
打印了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;
}