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

简介: 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是素数。


相关文章
|
2月前
|
C++
c++循环结构讲解
c++循环结构讲解
24 0
|
3月前
|
算法 API 计算机视觉
[opencv学习笔记] jiazhigang 30讲源码C++版本(含Makefile)
[opencv学习笔记] jiazhigang 30讲源码C++版本(含Makefile)
27 0
|
4月前
|
缓存 网络协议 Linux
Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现
Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现
55 0
|
4月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
52 0
|
4月前
|
关系型数据库 MySQL 数据库
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
52 0
|
4月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
59 0
|
4月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
39 0
|
7天前
|
C++
C++虚函数学习笔记
C++虚函数学习笔记
11 0
|
16天前
|
机器学习/深度学习 存储 算法
基础算法学习笔记(C++)
基础算法学习笔记(C++)
54 0
|
16天前
|
存储 C++ 索引
C++的STL学习笔记
C++的STL学习笔记
52 0