“先干后看”式循环

题目:计算 ,直到最后一项小于

注意题目要求:计算到最后一项小于 。也就是这一项是要参与到计算中的,计算完这一项才能触发循环停止条件。

这种先运算后判断的情况很对do-while循环的胃口。

do就是做嘛,while就是判断嘛,所以这种循环结构就是为“先干后看”而生的。

do-while循环的格式为“do{循环体}while(条件);”,注意while循环条件后面有一个分号。

很据所给式子可得出规律:

①奇数项符号为正,偶数项符号为负;

②第n项的分母为2n-1。

#include<stdio.h>
int main(){
    int n=1;
    double m, sum=0;
    do {
        m = 1.0/(2*n-1);
        if(n%2 != 0) sum += m;
        else sum -= m;
        n++;
    } while(m>=1e-6);
    printf("%f\n", sum);
    return 0;
}

当然了,用for或while循环也是完全可以的,只需要在循环体结束时加入一条循环终止判断语句:if()break;

以for循环为例:

#include<stdio.h>
int main() {
    double sum = 0;
    for(int n = 1; ; n++) {
        double m = 1.0 / (2*n-1);
        if(n % 2 != 0) sum += m;
        else sum -= m;
        if(m < 1e-6) break; //循环终止判断
    }
    printf("%f\n", sum);
    return 0;
}

可见,使用do-while的好处就是不用单独再加一条循环终止判断语句。

对于本题,最后再给出我家孩子的代码,权做反面案例。

#include <cstdio>
using namespace std;
int main () {
    double cnt=0,h=3;
    int i=1;
    while(h>1e-6){
        h=1.0/i;
        if(h<1e-6) break;
        cnt+=h;
        i+=2;
        h=1.0/i;
        cnt-=h;
        i+=2;
    }
    printf("%f",cnt);
}

这段代码的问题如下:

①未理解题目要求“直到最后一项小于 ”的含义,就像前面说的,它的意思很明确,计算的式子的最后一项要小于 ,也就是第一次小于 时参与计算,再后面的就不计算了。所以必须要先运算后判断,而我家娃娃的代码恰恰忽略了这点,掉入本题最大的陷阱。

②为了使程序刚开始能顺利执行while循环,增加了一个与本题无关的变量h。当然这是个小问题。

③不是以单项为单位总结每一项式子的规律,建立起每项的值与第n项的关系,而是以两项为一组,符号一正一负,前后项分母差2。这样做不但会造成代码重复,更重要的是,这种写法容易出错。因为最后一项可能是这一组中的前一项,也可能是后一项,需要在每一项后都加入判断,这个判断非常容易遗漏。

④错误理解C语言中科学记数法的表示,认为10e-6才是

如果用孩子思路,正确的代码如下:

#include <cstdio>
using namespace std;
int main () {
    double cnt=0,h;
    int i=1;
    while(1){
        h=1.0/i;
        cnt+=h;
        if(h<1e-6) break;
        i+=2;

        h=1.0/i;
        cnt-=h;
        if(h<1e-6) break;
        i+=2;
    }
    printf("%f",cnt);
}

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

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

相关文章

扇区架次数动态展示

打开前端Vue项目&#xff1a;kongguan_web&#xff0c;完成前端src/components/echart/SectorFlightChart.vue页面设计&#xff0c;使用ECharts插件实现柱状图和饼状图 在src/components目录下创建echart目录&#xff0c;完成src/components/echart/SectorFlightChart.vue 的页…

【SM3哈希算法】算法原理

【SM3哈希算法】算法原理 参考&#xff1a; 文章目录 【SM3哈希算法】算法原理一、算法简介二、基本原理三、具体流程1、填充2、分组3、迭代压缩 C语言实现 一、算法简介 SM3算法是一种密码散列函数标准&#xff0c;由国家密码管理局发布。它的安全性和SHA-256相当&#xff0…

【leetcode热题】 阶乘后的零

给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;0 解释&#xff1a;3! 6 &#xff0c;不含尾随 0示例 2&#xff1a; 输入&#xff1a;n 5 输出&a…

二叉树遍历(牛客网)

描述 编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。 例如如下的先序遍历字符串&#xff1a; ABC##DE#G##F### 其中“#”表示的是空格&#xff0c;空格字符代表空树。建立起此二叉树…

Java毕业设计 基于springboot vue招聘网站 招聘系统

Java毕业设计 基于springboot vue招聘网站 招聘系统 springboot vue招聘网站 招聘系统 功能介绍 用户&#xff1a;登录 个人信息 简历信息 查看招聘信息 企业&#xff1a;登录 企业信息管理 发布招聘信息 职位招聘信息管理 简历信息管理 管理员&#xff1a;注册 登录 管理员…

const,static深度总结——c++穿透式分析

前言&#xff1b;c类和对象的知识点中除了几种默认函数&#xff0c; 比较重要的还有使用const和static修饰成员相关知识点。const在c中特性很简单。 但是在使用中&#xff0c; 比较容易疏忽大意出现问题。 static特性也很简单&#xff0c; 但是比起const来要直接的多。 在使用中…

2023 re:Invent 使用 PartyRock 和 Amazon Bedrock 安全高效构建 AI 应用程序

前言 “ Your Data , Your AI , Your Future .&#xff08;你的数据&#xff0c;你的 AI &#xff0c;你的未来。&#xff09; 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界…

javaAPI操作Elasticsearch

mapping属性 mapping是对索引库中文档的约束, 常见的mapping属性包括: type: 字段数据类型,常见的简单类型有: 字符串: text(可分词的文本), keyword(精确值, 例如: 品牌,国家)数值: long, integer, short, byte, double, float布尔: boolean日期: date对象: object index: 是否…

LLMs之Grok-1:Grok-1的简介、安装、使用方法之详细攻略

LLMs之Grok-1&#xff1a;Grok-1的简介、安装、使用方法之详细攻略 导读&#xff1a;马斯克旗下的xAI公司宣布开源名为Grok-1的混合专家模型&#xff0c;参数量达3140亿&#xff0c;为目前最大的开源大语言模型。xAI此举或将引领人工智能开源趋势&#xff0c;同时也将对不太Ope…

协议分类笔记

1.3 协议分类 通信的协议还是比较复杂的&#xff0c;java.net 包中包含的类和接口&#xff0c;它们提供低层次的通信细节。我们可以直接使用这些类和接口&#xff0c;来专注于网络程序开发&#xff0c;而不用考虑通信的细节。 java.net 包中提供了两种常见的网络协议的支持&a…

DevExpress WinForms crack,DevExpress WinForms组件套件和库

DevExpress WinForms crack,DevExpress WinForms组件套件和库 Reporting & Analytics - Reports, Pivot Tables, PDF Viewer. The DevExpress WinForms Subscription includes royalty-free user interface components for next-gen decision support systems. Whether you…

Java基础经典10道题

目录 for循环的嵌套 题目一: 求101到200之间的素数的个数,并打印 代码分析: 注意点: 题目二:开发验证码 代码分析: 题目三:数组元素的复制 代码分析: 题目四:评委打分 健壮版代码: 代码分析:看源码 注意点: 题目五:数字加密 优化版代码: 代码分析: 题目六:数字…

MeterSphere和Jmeter使用总结

一、MeterSphere 介绍 MeterSphere 是⼀站式开源持续测试平台&#xff0c;涵盖测试跟踪、接⼝测试、UI 测试和性能测试等&#xff0c;全 ⾯兼容 JMeter、Selenium 等主流开源标准&#xff0c;能够有效助⼒开发和测试团队在线共享协作&#xff0c;实现端到 端的测试管理跟踪…

2、RabbitMQ_安装

RabbitMQ安装文档 RabbitMQ官网下载地址&#xff1a;https://www.rabbitmq.com/download.html 1.安装依赖 在线安装依赖环境&#xff1a; yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc x…

Java语言: 多线程

1. 线程调度 1.1 线程状态 线程是cpu任务调度的最小执行单位&#xff0c;每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈。 线程状态&#xff1a;创建、就绪、运行、阻塞、死亡 1.2 线程状态切换 1.3 阻塞唤醒过程 阻塞&#xff1a; 这三个方法的调用都会使当前…

视频私有云,HDMI/AV多硬件设备终端接入,SFU/MCU视频会议交互方案。

在视频业务深入的过程中越来越多的硬件设备接入视频交互的视频会议中远程交互&#xff0c;有的是视频采集&#xff0c;有的是医疗影像等资料&#xff0c;都需要在终端承显&#xff0c;这就需要我们的设备终端能多设备&#xff0c;多协议接入&#xff0c;设备接入如下。 1&#…

2024年敏捷产品负责人CSPO认证培训

课程名称&#xff1a;Scrum Product Owner CSPO产品负责人认证 课程类型&#xff1a;经理级 课程简介&#xff1a; Scrum Product Owner产品负责人在Scrum产品开发当中扮演“舵手”的角色&#xff0c;他决定产品的愿景、路线图以及投资回报&#xff0c;他需要回答为什么做&am…

数据收集与分析

数据收集与分析是任何组织决策过程中的核心环节&#xff0c;特别是在确定关键性能指标&#xff08;KPIs&#xff09;、使用先进的数据分析工具和方法方面。以下是一个概述&#xff0c;旨在解释如何进行数据收集与分析&#xff0c;并确定KPIs。 1. 确定关键性能指标&#xff08…

windows DCMTK编译使用(qt) 医学图像

由于项目需要生成DICOM格式的图片&#xff0c;需要使用到第三方开源库DCMTK&#xff0c;于是研究了一番&#xff0c;该库是C编写的&#xff0c;DICOM主要用于医疗体系中&#xff0c;除了可以保存图片信息外&#xff0c;还可以储存患者信息&#xff0c;病例信息&#xff0c;医疗…

蓝桥杯刷题(十一)

1.卡片 反向思考&#xff0c;看k种卡片可以分给几位同学 代码 n int(input()) k 1 while k*(k1)<2*n:k1 print(k)2.美丽的2 代码 def f(x)->bool:while x:if x%102:return Truex//10return False cnt 0 for i in range(1,2021):if f(i):cnt1 print(cnt)3.单词分析 …