首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C++条件判断与循环(三)(算法竞赛)

C++条件判断与循环(三)(算法竞赛)

作者头像
散峰而望
发布2025-12-23 12:59:56
发布2025-12-23 12:59:56
1010
举报

前言

前面已对对逻辑操作符、switch 语句、while 语句的详细讲解,不知各位是否能够熟练的掌握。接下来将对 for 循环、do - while 循环、break 和 contunue 语句,以及非常重要的循环嵌套进行讲解、分析和练习。希望这篇文章能够帮助每一位算法竞赛的前行者,更好的了解条件判断与循环。

7. for 循环

7.1 for 循环语法形式

for循环是三种循环中使用最多的,for循环的语法形式如下:

代码语言:javascript
复制
//形式1 
for(表达式1; 表达式2; 表达式3)
    语句;  
代码语言:javascript
复制
//形式2 
//如果循环体想包含更多的语句,可以加上
大括号 
for(表达式1; 表达式2; 表达式3)
{
    语句1;
    语句2;
    ...
}

表达式1:用于循环变量的初始化 表达式2:用于循环结束条件的判断 表达式3:用于循环变量的调整

7.2 执行流程

在这里插入图片描述
在这里插入图片描述

首先执行表达式 1 初始化循环变量,接下来就是执行表达式 2 的判断部分,表达式 2 的结果如果 ==0,则循环结束;表达式2的结果如果 !=0 则执行循环语句,循环语句执行完后,再去执行表达式 3 ,调整循环变量,然后再去表达式2的地方执行判断,表达式 2的结果是否为0,决定循环是否继续。

整个循环的过程中,表达式 1 初始化部分只被执行 1 次,剩下的就是表达式 2、循环语句、表达式 3 在循环。

7.3 实践

练习:使用 for 循环在屏幕上打印 1~10 的值

参考代码:

代码语言:javascript
复制
//代码1
#include <iostream>
using namespace std;

int main()
{
	int n;
	for(n = 1; n <= 10; n++)
	{
		cout << n << " ";
	}
	return 0;
 } 
代码语言:javascript
复制
//代码2
#include <iostream>
using namespace std;

int main()
{
	
	for(int n = 1; n <= 10; n++)
	{
		cout << n << " ";
	}
	return 0;
 } 

运行结果:

在这里插入图片描述
在这里插入图片描述

提示: 上面两种代码的差异是,代码 1 中 for 循环结束后,i的值还可以继续使用;但是代码 2 中 for 循环的外边是不能使用的,i 只能在 for 循环中使用。

7.4 while和for对比

在这里插入图片描述
在这里插入图片描述

for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候 while 循环的三个部分就比较分散,所以从形式上 for 循环要更优一些。

7.5 练习

  1. 求和

计算 1~100 之间 3 的倍数的数字之和

  1. 要想 1~100 之间的数全部输出就需要使用循环
  2. 之后使用 % 3 == 0,来判断是否为 3 的倍数
  3. 然后将 3 的倍数接收相加

参考代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	int i = 0;
	int sum = 0;
	for(i = 1; i <= 100; i++)
	{
		if(n % 3 == 0)
		{
			sum += i;
		}
	}
	cout << sum <<endl;
	return 0;
 } 

这里由于产生的数比较多,计算运算时间比较长,我们可以小小的优化一下,直接生成 3 的倍数。

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	int i = 0;
	int sum = 0;
	for(i = 3; i <= 100; i += 3)
	{
		if(i % 3 == 0)
		{
			sum += i;
		}
	}
	cout << sum <<endl;
	return 0;
 } 
  1. 求平均年龄

  1. 读取 n 表示学生数量
  2. 接收 n 个学生的年龄 – for 求和
  3. 循环
  4. 取平均值

参考代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	int n;
	int age = 0;
	int sum = 0;
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> age;
		sum += age;		
	}
	printf("%.2lf\n", sum * 1.0 / n); 
	return 0;
 } 
  1. 奥运奖牌计数

  1. 输入 n
  2. 循环 n 次,读取每一天奖牌数量,累积各奖牌的个数
  3. 计算总奖牌数

参考代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;
int n, p1, p2, p3, sum, a, b, c;
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> a >> b >> c;
        p1 += a;
        p2 += b;
        p3 += c;
    }
    sum = p1 + p2 + p3;
    cout << p1 << " " << p2 << " " << p3 << " "<< sum << endl;
    return 0;
}

错误演示:

在这里插入图片描述
在这里插入图片描述
  1. 鸡尾酒疗法
  2. 救援
  3. 计算分数加减表达式的值

这些题可以自行先试一试做做,后面会集中讲解

8. do-while 循环

8.1 do-while 语法形式

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

代码语言:javascript
复制
//形式1 
do
    语句;
while( 表达式 );
代码语言:javascript
复制
//形式2 
do
{
    语句1;
    语句2;
    ...
}
while( 表达式 );

while 和 for 这两种循环都是先判断,条件如果满足就进入循环,再执行循环语句,如果不满足就跳出循环;

do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

8.2 执行流程

在这里插入图片描述
在这里插入图片描述

在 do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是 !=0,则继续循环,执行循环语句;判断表达式的结果 ==0,则循环结束。

所以在 do while 语句中循环体是至少执行一次的,这是 do while 循环比较特殊的地方。

8.3 实践

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

代码语言:javascript
复制
#include <iostream>
using namespace std;
int main()
{
    int i = 1;
    do
    {
        cout << i << " ";
        i = i + 1;
    } while (i <= 10);
    return 0;
}
在这里插入图片描述
在这里插入图片描述

8.4 练习

  1. 统计正整数的位数

输入一个正整数,计算这个整数是几位数?

例如: 输入:1234 输出:4 输入:123 输出:3

  1. 输入正整数
  2. 运用 n / 10 得到个位数 计数
  3. 循环统计

参考代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	int n = 0;
	cin >> n;
	int count = 0;
	do
	{
		n = n / 10;
		count++;
	}while(n);
	cout << count << endl;
	return 0;
 } 
  1. 球弹跳高度的计算

该题可以自己研究研究,后续会讲。

9. break 和 continue 语句

9.1 break 和 continue 介绍

  • 在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C++中提供了break和continue两个关键字,就是应该到循环中的。
  • break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行。
  • continue的作用是跳过本次循环continue后边的代码,在for循环和while循环中有所差异的。

9.2 break 举例

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	int i = 1;
	while(i<=10)
	{
		if(i == 5)
		{
			break;
		}
		cout << i << " ";
		i++;
	}
	return 0;
 } 
代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	int i = 0;
	for(i=1; i<=10; i++)
	{
		if(i == 5)
		{
			break;
		}
		cout << i << " ";
	}
	return 0;
 } 
代码语言:javascript
复制
#include <iostream>
using namespace std;

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

演示结果:

在这里插入图片描述
在这里插入图片描述

最终打印的都为:1 2 3 4

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

9.3 continue 举例

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

上面的代码,如果把break换成continue会是什么结果呢?

while

代码语言:javascript
复制
#include <iostream>
using namespace std;

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

演示结果:

在这里插入图片描述
在这里插入图片描述

for

代码语言:javascript
复制
#include <iostream>
using namespace std;

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

演示结果:

在这里插入图片描述
在这里插入图片描述

do-while

代码语言:javascript
复制
#include <iostream>
using namespace std;

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

演示结果:

在这里插入图片描述
在这里插入图片描述

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

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

9.4 练习

练习质因数分解

解析:首先要了解什么是质数,质数是只能被 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。

参考代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

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

10. 循环嵌套

10.1 循环嵌套的使用

前面学习了三种循环while,do while,for,这三种循环往往会嵌套在一起才能更好的解决问题,就是我们所说的:循环嵌套。这三种循环都可以任意嵌套使用,这里我们通过一个示例来了解循环嵌套。

比如:写一个代码,打印一个乘法口诀表

在这里插入图片描述
在这里插入图片描述
  1. 我们首先研究一下这个打印的内容,我们发现打印的内容是分为 9 行的,第 1 行打印1 项,第 2 行打印 2 项,第 3 行打印 3 项,以此类推,第 9 行打印 9 项。
  2. 如果观察每一行的信息,也能找到一些规律每一项的第一个乘数和列号是一致的,每一项的第二个 乘数和行号是一致的,两个乘数的积就是第三个数。
  3. 打印 9 行,我们可以使用循环解决,总共循环 9 次,每次进入循环打印一行,循环变量使用 i 来控制,i 从1开始,循环到 9。

参考代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	for(int i=1; i<10; i++)
	{
		for(int j=1; j<=i; j++)
		{
			printf("%d*%d=%2d ", i, j, i*j);
		}
		cout << endl;
	}
	return 0;
}

演示结果:

在这里插入图片描述
在这里插入图片描述

10.2 练习

  1. 乘法表

参考上面的就行

  1. 包含数字9的数

  1. 先产生 1~2019 数字,借助循环
  2. 判断这个数字是否包含 9,如果包含 9 就计数,并跳出求每一项的循环 计数器计数

参考代码:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()
{
	int i = 0;
	int count = 0;
	for(i = 1; i <= 2019; i++)
	{
		int n = i;
		while(n)
		{
			if(n%10 == 9)
		   {
			  count++;
			  break;
		   } 
		 n /= 10;
		}
	}
	cout << count <<endl;
}
  1. 斐波那契数列

  1. 输入n
  2. 循环n次 每次输入a 计算第a个斐波那契数 打印
代码语言:javascript
复制
#include<iostream>
using namespace std;

int main()
{
	int n;
	int a;
	cin >> n;
	while(n--)
	{
		cin >> a;
		int x = 1;
		int y = 1;
		int z = 1;
		while(a > 2)
		{
			z = x + y;
			x = y;
			y = z;
			a--;
		}
		cout << z << endl;
	}
	 
	return 0;
	
 } 
  1. 求出 e 的值

  1. 输入n
  2. sum = 1(第一项不用算)
  3. 循环 n 次 算出阶乘(借助循环) 1/阶乘 求和
代码语言:javascript
复制
#include <iostream>
using namespace std;
int main()
{
    int n = 0;
    cin >> n;
    int i = 1;
    double e = 1;
    while (i <= n)
    {
        int j = 0;
        long long fac = 1;
        for (j = 1; j <= i; j++)
        {
            fac *= j;
        }
        e += 1.0 / fac;
        i++;
    }
    printf("%.10lf\n", e);
    return 0;
}
  1. 画矩形
  2. 第 n 小的质数
  3. 水仙花数

这些题可以先练练手,后期会讲。

结语

好了,条件判断与循环如今已经结束,希望能给各位带来帮助,能够更好的了解并使用它,接下来我们将会对数组进行详细的探讨。

同时愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 7. for 循环
    • 7.1 for 循环语法形式
    • 7.2 执行流程
    • 7.3 实践
    • 7.4 while和for对比
    • 7.5 练习
  • 8. do-while 循环
    • 8.1 do-while 语法形式
    • 8.2 执行流程
    • 8.3 实践
    • 8.4 练习
  • 9. break 和 continue 语句
    • 9.1 break 和 continue 介绍
    • 9.2 break 举例
    • 9.3 continue 举例
    • 9.4 练习
  • 10. 循环嵌套
    • 10.1 循环嵌套的使用
    • 10.2 练习
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档