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

在C++编程中,循环结构是一种用于重复执行某段代码直到特定条件不再满足的控制流语句。除了常见的for循环和while循环之外,C++还提供了一种特殊的循环结构——do-while循环。这种循环结构在某些场景下非常有用,特别是在需要至少执行一次循环体的情况下。本文将深入探讨C++中的do-while循环,包括其语法、工作原理、应用场景以及注意事项。

do-while循环的基本语法

do-while循环的含义为:重复执行循环体,直到循环体条件不成立,结束循环。和while循环的主要区别是,do-while的循环体保证会执行一次。do-while循环的基本语法结构如下:


do {
    // 循环体:要重复执行的代码块
} while (条件表达式);

主要由三部分构成:1、do 关键字后紧跟一对花括号 {},花括号内是循环体,即需要重复执行的代码。2、while 关键字后是一个条件表达式(通常为布尔表达式),用于控制循环是否继续执行。3、分号:在do-while循环的末尾有一个分号,这是循环语句的结束标志,不能省略。

do-while的工作原理:

1、首次执行:do-while循环首先无条件地执行一次循环体。

2、条件判断:执行完循环体后,程序会检查while后的条件表达式。

3、重复执行:如果条件表达式为真(true),则再次执行循环体;如果条件表达式为假(false),则跳出循环,继续执行do-while循环之后的代码。

这种机制确保了循环体至少会被执行一次,无论条件表达式在第一次判断时是否为真。

do-while循环的示例:

下面是一个简单的例子,演示如何使用do-while循环来输入一个正整数(如果输入的数为一个小于等于0的数,那么需要反复地输入,直到输入一个正整数为止),具体程序代码如下:


#include <bits/stdc++.h>
using namespace std;
int main() {
    int number;//定义一个正整数变量 
    do {//do-while循环首先执行一次循环体 
        cout << "请输入一个正整数: ";//输入提示 
        cin >> number;//输入number的值 
    } while (number <= 0);//如果number的值小于等于0,则需要重复执行循环体 
    cout << "您输入的正整数是: " << number << endl;
    return 0;
}

代码的运行过程,首先声明一个整型变量number;接着进入do-while循环,首次执行循环体,输出提示信息"请输入一个正整数: ",等待用户输入,并将输入的数字读取到变量number中;然后进行条件判断:检查number的值,如果number小于或等于0,循环继续,回到循环体的开始,再次输出提示信息并等待用户输入,如果number大于0,条件判断为假,跳出do-while循环;循环结束后,输出用户输入的正整数。

假设用户第一次输入的是-5,程序会输出提示信息并要求用户重新输入。如果用户第二次输入的是3,则程序会跳出do-while循环,并输出"您输入的正整数是: 3",然后程序结束。

do-while循环的注意事项:

避免无限循环:由于do-while循环至少执行一次,如果条件表达式始终为真,循环将成为无限循环。因此,务必确保循环体中有改变条件表达式的逻辑,以避免这种情况。

代码可读性:虽然do-while循环在某些场景下非常有用,但在大多数情况下,for循环和while循环可能更直观、更易读。因此,在选择循环结构时,应根据具体需求权衡利弊。

条件表达式的位置:与while循环不同,do-while循环的条件表达式在循环体之后。这意味着在编写do-while循环时,需要特别注意条件表达式的逻辑,以确保循环按预期执行。

实战训练—级数求和

问题描述:

已知:Sn=1+1/2+1/3+……+1/n。显然对于任意一个整数K,当n足够大时,Sn>K。现给出一个整数K(1<=K<=15),要求计算出一个最小的n,使得Sn>K。

输入格式:

一行一个整数K。

输出格式:

一行一个整数n。

输入输出样例:

输入样例1

输出样例1

1

2

输入样例2

输出样例2

5

83

问题分析:

根据题意,不确定对级数进行几项求和后可以超过给定的K值,但是可以根据条件来决定是否继续计算,而且题目要求计算出最小的n,使得Sn>K,也就意味着在累加的过程中,一旦和大于K,循环结束。采用do-while实现,从n = 1开始累加每一项1/n到Sn,每次循环中,检查当前的Sn是否大于K,如果Sn大于K,则退出循环,此时的n即为所求的最小值,如果Sn不大于K,则继续累加下一项。具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main(){
    int k;//定义一个正整数k 
    cin>>k;//输入k的值 
    double sum=0.0;//定义级数和sum,并初始化为0 
    int n=0;//定义累加变量n并初始化为0 
    //使用do-while循环计算级数和
    do{
        n++;//从1开始累加 
        sum+=1*1.0/n;//累加当前项1/n 
    }while(sum<=k); //当Sn不大于k时继续循环
    cout<<n<<endl; //输出n的值 
    return 0;
}

代码说明:程序首先提示用户输入一个整数k;初始化变量:Sn初始化为0.0,用于存储级数和;累加变量n初始化为0;do-while循环:首先将n进行自增运算,循环体内Sn累加当前项1/n;循环条件是Sn<=k,当Sn大于k时退出循环;输出结果:循环结束后,输出使得Sn>k的最小n值。当然本题用while语句来进行解决,需要使用while循环条件是否满足条件决定是否继续进行计算,即只要Sn<=k,那么循环就继续,具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main(){
    int k;//定义一个正整数k 
    cin>>k;//输入k的值 
    double sum=0;//定义级数和sum,并初始化为0 
    int n=0;//定义累加变量n并初始化为0 
    //使用while循环计算级数和
	while(sum<=k){ //当Sn不大于k时继续循环
        n++;//从1开始累加 
        sum+=1*1.0/n;//累加当前项1/n 
    }
    cout<<n<<endl; //输出n的值 
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/949493.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一款好用的书签管理工具

多平台同步&#xff1a;可以在网页端、手机&#xff08;iOS 和 Android&#xff09;端同步使用。无论你是在电脑上浏览网页添加书签&#xff0c;还是在外出时使用手机&#xff0c;都能方便地访问和管理书签。例如&#xff0c;你在办公室电脑上收藏了一篇关于行业研究的网页&…

ansible-api分析(Inventory)

一. 简述&#xff1a; 通过ansible 实现系统初始化功能&#xff0c; 为和平台嵌入&#xff0c; 需要通过ansible的api进行功能实现。 准确来说&#xff0c;ansible并没有纯粹的外部接入api功能&#xff0c; 只是官方提供了原生类&#xff0c;用于继承接入&#xff0c;从而实现a…

智元机器人千台量产,开启具身智能新纪元

近日&#xff0c;智元机器人正式官宣一则重磅消息&#xff1a;其第 1000 台通用具身机器人成功下线&#xff0c;这无疑在科技领域投下了一颗震撼弹&#xff0c;引发行业内外的广泛关注。 这千台下线的机器人中&#xff0c;涵盖 731 台双足人形机器人&#xff0c;如远征 A2、灵…

ROS2 跨机话题通信问题(同一个校园网账号)

文章目录 写在前面的话校园网模式&#xff08;失败&#xff09;手机热点模式&#xff08;成功&#xff09; 我的实验细节实验验证1、ssh 用户名IP地址 终端控制2、互相 ping 通 IP3、ros2 run turtlesim turtlesim_node/turtle_teleop_key4、ros2 multicast send/receive5、从机…

SUB输入5V升压充电16.8V芯片HU5912

HU5912芯片&#xff0c;作为航誉微电子有限公司推出的一款高性能升压充电管理IC&#xff0c;自其面世以来&#xff0c;便以其出色的性能和广泛的应用领域&#xff0c;受到了业界的高度关注和赞誉。本文将详细介绍HU5912芯片的技术特点、应用优势、市场定位以及其在各类电子设备…

导出中心设计

业务背景 应用业务经常需要导出数据&#xff0c;但是并发的导出以及不合理的导出参数常常导致应用服务的内存溢出、其他依赖应用的崩溃、导出失败&#xff1b;因此才有导出中心的设计 设计思想 将导出应用所需的内存转移至导出中心&#xff0c;将导出的条数加以限制&#xf…

构建智能企业:中关村科金大模型企业知识库的技术解析与应用

在数字化转型的浪潮中&#xff0c;企业对智能化知识管理的需求日益增长。知识作为企业的核心资产&#xff0c;其高效管理和应用对于提升企业运营效率和决策质量至关重要。中关村科金大模型企业知识库凭借其强大的技术架构和广泛的应用场景&#xff0c;成为构建智能企业的重要工…

多线程访问FFmpegFrameGrabber.start方法阻塞问题

一、背景 项目集成网络摄像头实现直播功能需要用到ffmpeg处理rtmp视频流进行web端播放 通过网上资源找到大神的springboot项目实现了rtmp视频流转为http请求进行视频中转功能&#xff0c;其底层利用javacv的FFmpegFrameGrabber进行拉流、推流&#xff0c;进而实现了视频中转。 …

C++11——2:可变模板参数

一.前言 C11引入了可变模板参数&#xff08;variadic template parameters&#xff09;的概念&#xff0c;它允许我们在模板定义中使用可变数量的参数。这样&#xff0c;我们就可以处理任意数量的参数&#xff0c;而不仅限于固定数量的参数。 二.可变模板参数 我们早在C语言…

ENSP综合实验(中小型网络)

一、实验背景 在当今数字化的企业环境中&#xff0c;一个稳定、高效且安全的网络架构对于业务的持续运营和发展至关重要。随着企业内部各部门业务的不断拓展&#xff0c;如财务部门对数据保密性要求极高&#xff0c;访客区域的网络接入需求逐渐增多&#xff0c;以及对外提供特定…

nvidia控制面板找不到怎么回事?这有解决方法!

NVIDIA控制面板是一款用于管理和调整NVIDIA显卡的软件&#xff0c;它可以让你优化游戏和图形应用程序的性能和画质&#xff0c;以及设置多显示器、音视频、CUDA等功能。但是&#xff0c;有时候你可能会发现你的电脑上找不到NVIDIA控制面板&#xff0c;这可能是由于以下原因造成…

在Vue3项目中使用svg-sprite-loader

1.普通的svg图片使用方式 1.1 路径引入 正常我们会把项目中的静态资源放在指定的一个目录&#xff0c;例如assets,使用起来就像 <img src"../assets/svgicons/about.svg" /> 1.2封装组件使用 显然上面的这种方法在项目开发中不太适用&#xff0c;每次都需…

html+css+js网页设计 美食 美食3个页面(带js)

htmlcssjs网页设计 美食 美食3个页面(带js) 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&…

【235. 二叉搜索树的最近公共祖先 中等】

题目&#xff1a; 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一…

Visual Studio C++使用笔记

个人学习笔记 右侧项目不显示 CTRL ALT L 创建第一个项目 添加类&#xff08;头文件、CPP文件&#xff09;

【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本

本文简述 经常使用docker部署SpringBoot 项目&#xff0c;因为自己的服务器小且项目简单&#xff0c;因此没有使用自动化部署。每次将jar包传到服务器后&#xff0c;需要手动构建&#xff0c;然后停止原有容器&#xff0c;并使用新的镜像启动&#xff0c;介于AI时代越来越懒的…

vulhubn中potato靶场

IP和端口探测 80端口是一个图片 7120端口是这个 使用 hydra爆破密码 使用ssh远程登录 执行exp提权到root成功&#xff0c;找到Flag&#xff01;

复杂园区网基本分支的构建

目录 1、各主机进行网络配置。2、交换机配置。3、配置路由交换&#xff0c;进行测试。4、配置路由器接口和静态路由&#xff0c;进行测试。5、最后测试任意两台主机通信情况 模拟环境链接 拓扑结构 说明&#xff1a; VLAN标签在上面的一定是GigabitEthernet接口的&#xff0c…

信息科技伦理与道德2:研究方法

1 问题描述 1.1 讨论&#xff1f; 请挑一项信息技术&#xff0c;谈一谈为什么认为他是道德的/不道德的&#xff0c;或者根据使用场景才能判断是否道德。判断的依据是什么&#xff08;自身的道德准则&#xff09;&#xff1f;为什么你觉得你的道德准则是合理的&#xff0c;其他…

git理解记录

文章目录 1. 背景2. 基本概念3. 日常工作流程4. 其他常见操作4.1 merge合并操作4.2 tag打标签操作4.3 remoute远程操作4.4 撤销修改 git理解记录 1. 背景 git作为分布式版本控制系统&#xff0c;开源且免费&#xff0c;相比svn集中式版本控制系统存在速度快(HEAD指针指向某次co…