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

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(while循环语句)

在C++编程中,循环结构是控制程序流程的重要工具之一。前面介绍了for循环相关内容,对于for循环来讲,可以明确循环变量的初始值和终值,即可以确定循环的次数,对于循环次数不确定的情况,可以使用while循环来解决,while循环作为最基本的循环结构之一,允许代码在满足特定条件时重复执行。本文将深入探讨C++中while循环的工作原理、语法、实际应用以及一些常见的注意事项。

while循环的基本语法:

while循环是c++的一种基本循环模式。当循环条件成立时,去执行一次循环体,执行完循环体后再判断循环条件是否成立,当循环条件不成立时,就跳出循环,否则就继续执行循环体。while循环的基本语法结构非常简单明了:


while (condition) {
    // 循环体:当condition为true时,这些语句会被重复执行
}

其中,condition:这是一个布尔表达式,在每次循环迭代之前都会判断这个表达式,如果表达式的结果为true,则执行循环体中的语句;如果为false,则跳出循环。循环体:包含一组要重复执行的语句。这些语句被大括号{}包围(如果循环体只包含一条语句,那么可以将{}省略)。

while循环的工作原理:

首先会进行初始化:在while循环之前,通常会进行一些初始化操作(虽然这不是必须的,因为初始化可以在循环之前单独进行);其次进行条件判断:判断while循环的条件表达式。如果条件为true,则执行循环体,循环体执行完之后再进行条件表达式的判断,决定是否继续执行循环体;如果条件为false,则跳出循环,继续执行循环之后的代码。

while循环的示例:

下面是一个简单的例子,演示如何使用while循环来计算1到10的总和,具体程序代码如下:


#include <bits/stdc++.h>
using namespace std;
int main() {
    int sum = 0;//首先定义和变量sum,并初始化为0 
    int i = 1;//定义循环变量i并初始化为1 
    while (i <= 10) {//判断i是否小于等于10 
        sum += i;//如果i小于等于10,则将i累加到和变量sum中 
        i++;//i进行更改,自增成为下一个数,例如刚开始i为1,将1累加到sum中之后,i需要变成2 
    }
    cout << "Sum of numbers from 1 to 10 is: " << sum << endl;
    return 0;
}

在这个例子中,首先定义一个和变量sum并初始化为0,循环变量i的初始值为1。循环条件是i <= 10,循环体内,将i的值加到sum上,然后将i递增1。当i大于10时,循环终止,程序输出总和。

while循环的注意事项

避免无限循环:确保循环条件最终会变为false,否则会导致无限循环,通常称为"死循环"。无限循环会消耗系统资源,可能导致程序崩溃或系统无响应。例如以下程序代码:


#include <bits/stdc++.h>
using namespace std;
int main() {
    while (1) { 
        cout<<'#'; 
    }
    return 0;
}

while循环里面的条件表达式恒为True,在循环体里面没有提前结束循环的break语句,因此会一直不断输出'#',陷入了无限循环中,程序无法停止。

初始化:虽然while循环本身不包含初始化语句,但确保在循环前正确初始化所有需要的变量是很重要的。

更新循环变量:在循环体中更新循环变量,以确保循环能够正确终止。

可读性:对于复杂的循环条件,使用括号和适当的空格来提高代码的可读性。

实战训练—角谷猜想:

问题描述:

所谓角谷猜想,是指对于任意一个正整数,若是奇数,则乘以3加1,若是偶数,则除以2。得到的结果再按照上述规则重复处理,最终总能得到1。例如假定初始整数为5,每步计算的结果分别为16,8,4,2,1。程序要求输入一个正整数,将得到1的过程输出来。

输入格式:

一行一个正整数n(n<=20000000)。

输出格式:

从输入正整数到1的步骤,每一步为一行,每一步中描述计算过程。最后一行输出End。如果输入1,那么直接输出End。

输入输出样例:

输入样例1

输出样例1

6

6/2=3

3*3+1=10

10/2=5

5*3+1=16

16/2=8

8/2=4

4/2=2

2/2=1

End

输入样例2

输出样例2

7

7*3+1=22

22/2=11

11*3+1=34

34/2=17

17*3+1=52

52/2=26

26/2=13

13*3+1=40

40/2=20

20/2=10

10/2=5

5*3+1=16

16/2=8

8/2=4

4/2=2

2/2=1

End

问题分析:

对于任意一个输入的正整数,按照奇偶性的不同做不同的处理,然后重读执行这一过程,直到结果为1,到底需要循环多少次,没有一个确定的值来表示次数,只需要判断结束的条件(结果不是1),循环就要继续执行下去,所以使用while循环来解决此问题;其次当输入的正整数可能达到2000000时,需要考虑整数类型的范围,为了防止在运算过程中出现溢出的情况,提高代码的健壮性和可移植性,将n的类型修改为long long类型。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n;//首先定义正整数变量n 
    cin>>n;//输入n的值 
    while(n>1){//只要n大于1 
        long long tmp;//定义临时变量tmp存储对n计算之后的值 
        if(n%2==0){//如果n为偶数 
	     tmp = n/2;//n为偶数,则执行n除以2 
            cout<<n<<'/'<<2<<'='<<tmp<<endl;//输出n为偶数的计算过程 
            n=tmp;//修改n为计算之后的值 
        }else if(n%2==1){//如果n为奇数 
            tmp = n*3+1;//n为奇数,则执行n乘以3加1 
            cout<<n<<'*'<<3<<'+'<<1<<'='<<tmp<<endl;//输出n为奇数的计算过程 
            n=tmp;//修改n为计算之后的值 
        }
    }
    cout<<"End"<<endl;//最后输出End,如果n的输入值为1,那么不执行while循环,直接输出End 
    return 0;
}

http://www.kler.cn/a/468505.html

相关文章:

  • 20241231在Ubuntu20.04.5系统中下载安装Android Studio 2024.2.1.12
  • Kafka 消费者专题
  • 如何通过本地部署的DIFY辅助学习算法(PS可以辅助帮你学习任何想学习的资料)
  • 探索WebAssembly:前端与后端的新未来
  • unity学习6:unity的3D项目的基本界面和菜单
  • MCP(Model Context Protocol)模型上下文协议 进阶篇3 - 传输
  • 互动为王:开源AI智能名片链动2+1模式商城小程序在社群运营中的深度应用与价值探索
  • 解锁AI Agent潜能:智能时代的信息处理利器2(18/30)
  • ES-深度分页问题
  • LeetCode题练习与总结:随机翻转矩阵--519
  • 使用FDBatchMove的几个问题总结
  • 数据结构:ArrayList与顺序表
  • 每日一学——日志管理工具(Graylog)
  • C++和OpenGL实现3D游戏编程【连载19】——着色器光照初步(平行光和光照贴图)(附源码)
  • 主从复制(Redis的特性)
  • 深入探索 Kubernetes:从基础概念到实战运维
  • 复杂对象的创建与组装 - 建造者模式(Builder Pattern)
  • flutter在windows平台中运行报错
  • BOOST 库在机器视觉中的应用及示例代码分析
  • 【C++】B2099 矩阵交换行