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

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

时间:2025-01-05 22:31:01浏览次数:11  
标签:语句 初始化 循环体 变量 信奥赛 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;
}

标签:语句,初始化,循环体,变量,信奥赛,while,循环
From: https://blog.csdn.net/ALISHENGYA/article/details/144952083

相关文章

  • 《约瑟夫问题 循环链表》
    约瑟夫问题循环链表题解来了!!!#include<bits/stdc++.h>usingnamespacestd;intm,n;structNode{ intdata; Node*next;}*head,*p,*tail,*temp;intmain(){ cin>>m>>n; head=newNode; head->next=NULL; tail=head; for(inti=1;i&......
  • 流程控制第二弹: 从小白到高手-Java While 循环的进阶秘籍(文中有福利赠送)
    ......
  • 15C++循环结构-while循环(2)——教学
    一、while语句的应用(第44课角谷猜想)参考视频1问题:对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1,这就是由日本数学家角谷静夫发现的角谷猜想,又称为3n+1猜想。如取一个数字6,根据上述公式,得出6→3→10→5→16→8→4→2→1。试编一......
  • list和字典哪个性能高?for循环下哪个性能高?为啥?
    在选择数据结构时,性能取决于具体的操作和使用场景。列表(List)和字典(Dictionary)是两种常见的数据结构,它们有不同的性能特性。以下是对这两种数据结构在不同操作下的性能比较,特别是针对for循环下的性能表现。列表(List)列表是一种有序的集合,通常用于存储一组元素,并按顺序访问这......
  • 循环结构
    循环结构while循环语法:while(布尔表达式){//循环内容}只要表达式为true,循环就会一直执行下去大多数情况会让循环停止下来,需要一个表达式失效的方式来结束循环少部分情况需要循环一直执行,比如服务器的请求相应监听循环条件一直为true就会造成无限循环【死循环】,正常业务......
  • 数据结构:循环单链表
    循环单链表(CircularSinglyLinkedList)循环单链表是单链表的一种变体,其特点是链表的尾节点指向头节点,形成一个闭环。这种结构允许在链表中进行无缝的遍历,并且可以从任何节点开始遍历整个链表。循环单链表通常用于需要循环访问元素的场景,如轮询调度、环形缓冲区等。1.节点结......
  • 视频号直播自动回复浏览器插件,帮我自动回评论,也可以不停的循环发评论 vx: llike620
    开启直播以后,一定要在视频号助手后台,有直播管理页面下,就是那个展示评论和能发送评论框的页面,启动插件。要把自己当前发评论的昵称屏蔽掉,否则会捕获到自己回复的,造成死循环。视频号直播在回复时,会自动点击这条评论,然后再点击回复按钮,那么在用户那边看就是单独回复给我的。并且因......
  • 14C++循环结构-while循环(1)
    一、while语句问题:试编一程序,在屏幕上输出1~5这几个数字。今天,我们用while语句来编写这个程序。while语句的特点是先判断表达式,后执行语句。其一般形式为:while(表达式)语句;当表达式的值为真(非0)时,就不断地执行循环体内的语句,所以while循环称为当型循环。while语句的执行过程......
  • python基础while循环(break、continue)、格式化输出、运算符
    day2while循环break、continue相关知识、格式化输出打印1~100的数字a=1whilea<=100:print(a)a=a+1#continue结束本次循环,开始下一次开启下一次循环break直接结束循环flag=Truewhileflag:print(1)print(2)flag=Falsecontinueprint......
  • 第8章 汇编语言--- 循环结构
    汇编语言是一种低级编程语言,它几乎是一对一地映射到计算机的机器码指令。在汇编语言中实现循环结构通常涉及到使用条件跳转指令(如JMP、JE、JNE等)来控制程序流程。下面我将通过一个简单的例子来讲解如何用x86汇编语言实现一个循环结构。假设我们要编写一个程序,它会计算从1......