牛客网刷题 | BC84 牛牛学数列2

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

这次牛牛又换了个数列,他想计算:1+1/2+1/3+…+1/N的值。(保留6位小数)

输入描述:

输入一个整数,范围在0到1000

输出描述:

输出一个浮点数


思路 :

理解题目要求:题目要求计算数列  1+1/2+1/3+…+1/N 的和,其中 N 是一个整数,范围是 0 到 1000。结果需要保留六位小数。

输入处理:读取用户输入的整数 𝑁。

循环计算:使用一个循环从 11 到 𝑁(包括 𝑁),累加每一项 1 / i​。

精度控制:由于题目要求保留六位小数,我们需要在累加过程中就注意精度问题,避免因为浮点数的精度问题导致结果不准确。

输出结果:将计算得到的和转换为字符串格式,确保小数点后有六位数字,然后输出。

  • 在C语言中,scanf 用于读取输入,printf 用于格式化输出。
  • 循环中的 1.0 / i 确保了除法操作的结果是一个浮点数,避免了整数除法的问题。
  • printf 中的 %.6f 格式化输出确保了结果保留六位小数。

代码 1 :


int main()
{int a = 0;double c = 0;scanf("%d", &a);for (int b = 1; b <= a; b++){c = 1.0 / b + c;}printf("%.6lf", c);return 0;
}

代码 2:

#include <stdio.h> // 引入标准输入输出库int main() // 主函数的开始
{double i = 1; // 定义一个变量i,表示分子,初始值为1double n = 0; // 定义一个变量n,用于存放用户输入的整数,初始值为0double j = 0; // 定义一个变量j,用于for循环的迭代,初始值为0double sum = 0; // 定义一个变量sum,用于累加求和,初始值为0scanf("%lf", &n); // 从标准输入读取一个浮点数,存储在变量n中if (n == 1) // 如果输入的n等于1{printf("1\n"); // 输出1,因为1+1/2+...+1/1的和就是1}else if (n > 0 && n <= 1000) // 如果输入的n大于0且小于等于1000{for (j = 1; j <= n; j++) // 使用for循环,从1迭代到n{sum = (i / j) + sum; // 计算每一项1/j,并加到sum上}printf("%.6lf\n", sum); // 输出累加和sum,保留六位小数}else // 如果输入的n不满足条件(即n为负数或大于1000){printf("输入错误\n"); // 输出错误信息}return 0; // 返回0,表示程序正常结束
}//改进后的:
#include <stdio.h>int main() 
{double n = 0; // 用户输入double sum = 0; // 用于累加的变量,初始化为0scanf("%lf", &n); // 读取用户输入的整数if (n == 1) {printf("1\n"); // 如果输入的n为1,直接输出1} else if (n > 0 && n <= 1000) {for (double j = 1; j <= n; j++) { // 开始for循环,从1到nsum += 1.0 / j; // 直接使用1.0作为分子,累加到sum上}printf("%.6lf\n", sum); // 输出累加和sum,保留六位小数} else {printf("输入错误\n"); // 如果输入的n不满足条件,输出错误信息}return 0; // 程序正常结束
}/*在这个修改后的版本中,我去掉了 double i = 1; 
这行代码,因为不需要单独定义一个变量来表示分子。
在 for 循环中,直接使用 1.0 / j 来进行计算,
其中 1.0 表示分子,j 表示分母。
这样代码更为简洁,并且避免了不必要的变量定义。*/

代码 3 :

#include <stdio.h>int main() {int N;double sum = 0.0; // 用于累加的变量,初始化为0.0// 读取输入scanf("%d", &N);// 循环计算数列和for (int i = 1; i <= N; ++i) {sum += 1.0 / i; // 注意这里1.0是双精度浮点数,以确保除法结果是浮点数}// 保留小数点后六位,使用printf的格式化输出来实现printf("%.6f\n", sum);return 0;
}

知识点 :

浮点数精度:在C语言中,涉及到小数的计算时,需要使用浮点数类型,如 floatdouble。由于题目要求保留六位小数,使用 double 类型可以提供足够的精度。

输入验证:在读取用户输入后,应进行验证以确保输入值在题目要求的范围内(0到1000)。如果不在这个范围内,应提示用户输入错误。

循环控制:使用 for 循环来遍历从1到N(包括N)的整数,并计算每一项的和。

累加求和:在循环中,需要将每一项 1.0 / j 加到累加器 sum 上。注意这里使用 1.0 而不是 1,因为 1.0 是一个 double 类型的值,这样可以确保除法操作的结果是一个浮点数。

格式化输出:使用 printf 函数的格式化输出 %.6lf 来控制输出的精度,保留小数点后六位。

条件语句:使用 ifelse if 语句来处理不同的输入情况,如输入为1时的特殊情况,或者输入不符合要求时的错误提示。

变量初始化:在开始计算之前,应确保所有变量(如累加器 sum)已经被初始化,以避免使用未初始化的变量。

整数与浮点数的除法:在C语言中,当两个操作数都是整数时,除法结果也是整数。因此,至少有一个操作数必须是浮点数,以进行浮点除法。

代码风格:保持代码的可读性,使用适当的变量命名,添加注释来解释代码的功能。

资源限制:注意题目中提到的时间限制和空间限制,确保算法的效率。

四舍五入:题目要求结果保留六位小数,这意味着需要进行四舍五入处理,C语言标准库中 printf 函数可以直接完成这个任务。

  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dilworth定理:最少的下降序列个数就等于整个序列最长上升子序列的长度

概念如下&#xff1a; 狄尔沃斯定理_百度百科 (baidu.com) 本质就是找要求序列中最长的单调的子序列&#xff08;不一定连续&#xff09;的长度。 模板如下&#xff1a; 时间复杂度为O&#xff08;N^2&#xff09; #include<iostream>using namespace std;int dp[100…

物联网应用开发--STM32与新大陆云平台通信(云平台控制蜂鸣器、LED)

实现目标 1、掌握云平台执行器的创建 2、熟悉STM32 与ESP8266模块之间的通信 3、具体实现目标&#xff1a;&#xff08;1&#xff09;创建5个执行器&#xff1a;蜂鸣器&#xff0c;LED1&#xff0c;LED2&#xff0c;ED3&#xff0c;LED4;&#xff08;2&#xff09;执行器能对…

RK3568平台开发系列讲解(SPI篇)SPI数据的传输

🚀返回专栏总目录 文章目录 一、数据结构1.1、spi_transfer 结构体1.2、spi_message二、数据发送程序分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 参考资料: spi_transferspi_message一、数据结构 spi 数据传输主要使用了 spi_message 和 spi_transfer 结构…

Spring AOP(概念,使用)

目录 Spring AOPAOP是什么什么是Spring AOPAOP实际开发流程1. 引入依赖2. 编写AOP程序 Spring AOP详解Spring AOP中的核心概念Spring AOP的通知类型六种类型PointCutOrder(切面优先级) Spring AOP AOP是什么 Aspect Oriented Programminig(面向切面编程)切面指的是某一类特定…

cpu缓存一致性问题---cache写策略

为什么会有cpu缓存一致性问题&#xff1f; cpu缓存一致性指的&#xff1a;是缓存中和所其对应在主存中的数据的一致性。 因为cpu运算产生新数据后基于写回策略只更新缓存的值会导致缓存和主存不一致问题 解决cpu缓存一致性问题前&#xff0c;先了解写回策略是什么 了解写回策…

R语言基础--文件读写

From生物技能树&#xff08;R第五节&#xff09; 文章目录 一、文件读写1.注意用project管理工作目录2、文件读取1、读取.txt文件2、读取.csv文件注意&#xff1a;数据框不允许重复的行名 3.数据框的导出4.读取文件的其他方式(用于读取/导出文件的R包)--经验1.base2.readr3.dat…

[初学者来练]用html+css+javascript个人博客作业需求

文章目录 项目概述项目需求页面设计主页文章列表页文章详情页用户交互额外功能&#xff08;可选&#xff09; 技术要求提交要求评分标准文件代码格式提示HTML 页面结构CSS 样式设计JavaScript 交互功能 项目概述 这个项目旨在通过使用HTML、CSS和JavaScript创建一个简单而功能…

使用docker创建hadoop集群:Couldn‘t upload the file

运行的环境; Windows10 Docker Desktopdocker-hadoop 出现的问题如下: 解决方法 https://github.com/big-data-europe/docker-hadoop/issues/98

秋招算法——背包模型——423采药问题——模板:背包问题

文章目录 题目描述思路分析实现代码分析总结 题目描述 思路分析 这里明显是使用背包问题&#xff0c;所以这里参考一下背包这个模板题的内容这个是朴素版的模板&#xff0c;没有经过代码的优化 #include <iostream> #include <algorithm>using namespace std;con…

数据库SQL编写规范-SQL书写规范整理(SQL语句书写规范全解-Word原件)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说…

企业如何利用美国多IP服务器来提升网站的安全性?

企业如何利用美国多IP服务器来提升网站的安全性? 在当前网络环境下&#xff0c;网站安全性日益成为企业面临的重要挑战。为了有效应对各种潜在威胁&#xff0c;越来越多的企业选择利用美国多IP服务器来提升其网站的安全性。这种服务器配置能够通过一系列策略来增加网站的安全…

【PB案例学习笔记】-02 目录浏览器

写在前面 这是PB案例学习笔记系列文章的第二篇&#xff0c;该系列文章适合具有一定PB基础的读者&#xff0c; 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上…