C++学习笔记:循环结构

1. 用for语句实现循环结构

1.1 问题的提出

我们经常会遇到需要对某个操作重复执行多次的情况。例如,求1~100的累计和,我们需要将每个数相加并保存结果。这种情况下,使用循环结构可以很方便地解决问题。

【例1-1】求1~100的累计和
下面是求1~100的累计和的一个示例代码:

#include <iostream>
using namespace std;
int main() 
{
	int sum = 0;
	for (int i = 1; i <= 100; i++) 
	{
 	 sum += i;
	}
 	cout << "1~100的累计和为:" << sum << endl;
	return 0;
}

这段代码使用了for语句来实现循环,通过定义一个变量i来追踪循环的次数,每次循环将i加1,并将其累加到sum中。

1.2 for语句的一般格式

for语句的一般格式如下:

for (initialization; condition; increment/decrement) 
{
  // 执行循环体的代码
}

其中:

  • initialization:在循环开始之前执行一次的代码,一般用来初始化循环变量。
  • condition:判断循环是否继续的条件,如果条件为true,则继续循环;如果条件为false,则退出循环。
  • increment/decrement:每次循环后执行的代码,用来改变循环变量的值。

【例1-2】打印水仙花数
下面是一个打印水仙花数的示例代码:

#include <iostream>
using namespace std;
int main() 
{
	for (int num = 100; num <= 999; num++) 
	{
  		int a = num / 100;  // 获取百位数字
  		int b = (num / 10) % 10;  // 获取十位数字
  		int c = num % 10;  // 获取个位数字
  		if (num == a*a*a + b*b*b + c*c*c) 
 		 {
    		cout << num << "是水仙花数" << endl;
  		 }
	}
	return 0;
}

在这段代码中,循环变量num的取值范围是100到999,通过将num拆分成百位、十位和个位的三个数字,并判断其立方和是否等于num本身,从而判断是否是水仙花数。

1.3 改变步长

在for循环中,通过改变循环变量的增量或减量,可以控制循环的步长。如果不指定步长,默认步长为1。

【例1-3】求100以内的偶数之和
下面是一个求100以内的偶数之和的示例代码:

#include <iostream>
using namespace std;

int main() 
{
	int sum = 0;
	for (int i = 2; i <= 100; i += 2) 
	{
  		sum += i;
	}
	cout << "100以内的偶数之和为:" << sum << endl;
	return 0}

在这段代码中,我们通过将i的步长设定为2,从而只取偶数进行累加运算。

2. 使用while语句与do-while语句实现循环结构

2.1 while语句

while语句在执行循环体之前,先判断条件是否成立,如果条件为真,则执行循环体;如果条件为假,则跳出循环。

【例1-4】使用while语句求1~100的累加和
下面是一个使用while语句求1~100的累加和的示例代码:

#include <iostream>
using namespace std;

int main() 
{
	int sum = 0;
	int i = 1;
	while (i <= 100) 
	{
  		sum += i;
  		i++;
	}
	cout << "1~100的累计和为:" << sum << endl;
	return 0}

在这段代码中,我们先初始化循环变量i为1,然后在每次循环结束后将i加1,直到i超过100为止。

【例1-5】求一个整数的阶乘
下面是一个求一个整数的阶乘的示例代码:

#include <iostream>
using namespace std;

int main() 
{
	int n;
	cout << "请输入一个整数:";
	cin >> n;
	int result = 1;
	int i = 1;
	while (i <= n) 
	{
  		result *= i;
  		i++;
	}
	cout << n << "的阶乘为:" << result << endl;
	return 0}

在这段代码中,我们首先通过cin输入一个整数n,然后使用while循环计算n的阶乘。

2.2 do-while语句

do-while语句先执行一次循环体,再判断条件是否成立。如果条件为真,则继续执行循环体;如果条件为假,则跳出循环。

【例1-6】用do-while语句求1~100的累计和
下面是一个用do-while语句求1~100的累计和的示例代码:

#include <iostream>
using namespace std;

int main() 
{
	int sum = 0;
	int i = 1;
	do 
	{
  		sum += i;
  		i++;
	} while (i <= 100);
 	cout << "1~100的累计和为:" << sum << endl;
 	return 0}

与while语句不同的是,在do-while循环中,循环条件的判断发生在循环体执行之后。

2.3 for语句、while语句与do-while语句的比较

for语句、while语句和do-while语句都可以用于实现循环结构,但在不同的情况下选择合适的循环结构是非常重要的。

  • for语句:适用于循环次数已知的情况,循环变量的初始化、条件判断和步长控制都在一条语句中完成,代码简洁。
  • while语句:适用于循环次数不确定的情况,条件判断发生在循环体之前,确保至少执行一次循环体。
  • do-while语句:适用于循环次数不确定的情况,条件判断发生在循环体之后,确保至少执行一次循环体。

【例1-7】循环次数事先不确定的循环
下面是一个循环次数事先不确定的循环的示例代码:

#include <iostream>
using namespace std;

int main() 
{
	int num;
	int sum = 0;
	cout << "请输入一系列正整数,以-1结束输入:";
	cin >> num;
	while (num != -1) 
	{
	  sum += num;
	  cin >> num;
	}
	cout << "输入的数的累计和为:" << sum << endl;
	return 0}

这段代码会循环读取一系列正整数,直到输入-1为止,然后将累计和输出。

【例1-8】使用for语句完成例1-7的功能
下面是使用for语句完成例4-7功能的示例代码:

#include <iostream>
using namespace std;

int main() 
{
	int num;
	int sum = 0;
	cout << "请输入一系列正整数,以-1结束输入:";
	for (cin >> num; num != -1; cin >> num) 
	{
	  sum += num;
	}
	cout << "输入的数的累计和为:" << sum << endl;
	return 0}

这段代码中,我们通过将读取输入的代码放在for循环的初始化部分和循环体中,实现了与例1-7相同的功能。

3. continue语句与break语句

3.1 continue语句

continue语句用于跳过循环体中剩余的代码,直接进入下一次循环。

【例1-9】求1~100中不能被3整除的整数之和
下面是一个求1~100中不能被3整除的整数之和的示例代码:

#include <iostream>
using namespace std;

int main() 
{
	int sum = 0;
	for (int i = 1; i <= 100; i++) 
	{
	  if (i % 3 == 0) 
	  {
	    continue;
	  }
	  sum += i;
	}
	cout << "1~100中不能被3整除的整数之和为:" << sum << endl;
	return 0}

在这段代码中,当i能够被3整除时,通过continue语句跳过了将i累加到sum中的代码。

3.2 break语句

break语句用于跳出最内层的循环,完全终止循环的执行。

【例1-10】从键盘输入一个整数,判断是否是素数
下面是一个从键盘输入一个整数,判断是否是素数的示例代码:

#include <iostream>
using namespace std;

int main() 
{
	int num;
	cout << "请输入一个整数:";
	cin >> num;
	bool isPrime = true;
	for (int i = 2; i <= num / 2; i++) 
	{
	  if (num % i == 0) 
	  {
	    isPrime = false;
	    break;
	  }
	}
	if (isPrime) 
	{
	  cout << num << "是素数" << endl;
	} 
	else 
	{
	  cout << num << "不是素数" << endl;
	}
	return 0;
}

在这段代码中,我们通过循环从2到num的一半(即num/2),判断num是否能被这些数整除。如果能被整除,说明num不是素数,将isPrime设为false,并通过break语句跳出循环。否则,说明num是素数。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦当当兄弟肯德德

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值