牛客网刷题 | 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.mzph.cn/web/12904.shtml

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

相关文章

sql中的exists和in的区别

在SQL中&#xff0c;EXISTS 和 IN 都用于子查询&#xff0c;但它们的用法和目的有所不同。 ### EXISTS EXISTS 是一个逻辑运算符&#xff0c;用于检查子查询是否返回任何行。如果子查询返回至少一行&#xff0c;那么 EXISTS 子句的结果为 TRUE&#xff1b;否则&#xff0c;结果…

一个用Kotlin编写简易的串行任务调度器

引言 由于项目中有处理大量后台任务并且串行执行的需求&#xff0c;特意写了一个简易的任务调度器&#xff0c;方便监控每个任务执行和异常情况&#xff0c;任务之间互不影响。正如上所述&#xff0c;Kotlin中的TaskScheduler类提供了一个强大的解决方案&#xff0c;用于使用S…

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…

React: memo

React.memo 允许你的组件在 props 没有改变的情况下跳过重新渲染。 const MemoizedComponent memo(SomeComponent, arePropsEqual?)React 通常在其父组件重新渲染时重新渲染一个组件。你可以使用 memo 创建一个组件&#xff0c;当它的父组件重新渲染时&#xff0c;只要它的新…

centos7服务器采用局域网内笔记本代理上网

一、背景 某台服务器操作系统是centos 7&#xff0c;不能上网。我想在上面装个ftp软件&#xff1a;vsftpd。 二、思路 要安装这个软件&#xff0c;有2种方案 1&#xff09;设置该台centos7可以上网 2&#xff09;离线安装vsftpd 鉴于各种依赖&#xff0c;万一因为依赖不全或…

《海峡科技与产业》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《海峡科技与产业》期刊是什么级别&#xff1f; 答&#xff1a;国家级 主管单位&#xff1a;中华人民共和国科学技术部 主办单位&#xff1a;科技部海峡两岸科学技术交流中心 问&#xff1a;《海峡科技与产业》影响因子&#xff1f; 答&#xff1a;…

相位;傅里叶变换和傅里叶级数是什么;欧拉公式是什么,和傅里叶关系;

目录 相位 傅里叶变换公式使用举例 实际案例 傅里叶变换和傅里叶级数是什么

随笔:棋友们

我是在小学二年级学会中国象棋的&#xff0c;准确说&#xff0c;是学会象棋的下棋规则的&#xff0c;师傅是二舅。我最早的对手就是同学波仔。波仔比我略早学会象棋&#xff0c;总用连珠炮欺负我&#xff0c;开局几步棋就把我将死。我不知道怎么破解。轮到我先走时&#xff0c;…

扭亏为盈的赛力斯,真正进入稳态了吗?

“72小时内大定破1万台”。5月15日&#xff0c;问界新M5开启全国大规模交付&#xff0c;从当前取得的成绩来看&#xff0c;赛力斯的“富贵”似乎还将延续。 其实&#xff0c;此前基于问界新M7等车型的爆火&#xff0c;赛力斯已经找到了创收轨道。财报显示&#xff0c;2024年一…

alist网盘自动同步

alist网盘自动同步 alist可以设置目录定时转存到各个网盘&#xff0c;做到夸网盘&#xff0c;多备份的效果可以将自己挂载的alist 下的各个目录相互间进行同步&#xff0c;原理是采用alist原始api调用执行同步原理1.匹配文件名称是否相同,2.文件大小是否相同&#xff0c;相同会…

一文详细解析Google编码规范工具cpplint的下载安装与使用

目录 一、什么是cpplint 二、cpplint能实现的功能 三、cpplint的下载与使用 1、配置python环境 2、安装cpplint 四、cpplint常用命令讲解 1、常用命令查看 2、常用命令详解 3、命令使用方式 五、 cpplint的实用技巧 1、集成cpplint 1.1、修改调用接口. 1.2、直接把…

数据结构(C):树的概念和二叉树初见

目录 &#x1f37a;0.前言 1.树概念及结构 2.认识一棵树 3.树的表示 3.1树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 4.二叉树 4.1特殊的二叉树 4.2二叉树的性质 &#x1f48e;5.结束语 &#x1f37a;0.前言 言C之言&#xff0c;聊C之识&…

卷积模型的剪枝、蒸馏---蒸馏篇--NST特征蒸馏(以deeplabv3+为例)

本文使用NST特征蒸馏实现deeplabv3+模型对剪枝后模型的蒸馏过程; 一、NST特征蒸馏简介 下面是两张叠加了热力图(heat map)的图片,从图中很容易看出这两个神经元具有很强的选择性:左图的神经元对猴子的脸部非常敏感,右侧的神经元对字符非常敏感。这种激活实际上意味着神经…

程序员绩效管理-序言

开辟一个新专栏专门讨论程序员绩效管理。作为软件开发企业&#xff0c;公司的命脉掌握在程序员手中。程序员的绩效管理是个超级难题。小张和老王专栏介绍了两个典型的人员。但是这是两个虚拟的极端人员&#xff0c;大部分开发人员没有那么容易分辨。1个任务&#xff0c;应该1天…

LabVIEW软件开发工程师需要具备哪些能力与素质?

成为一名优秀的LabVIEW软件开发工程师&#xff0c;需要具备以下能力与素质&#xff1a; 技术能力 LabVIEW编程技能&#xff1a; 精通LabVIEW编程&#xff0c;能够熟练使用其图形化编程界面。熟悉LabVIEW中的各种功能模块和工具包&#xff0c;如数据采集&#xff08;DAQ&#x…

如何配置Nacos的健康检查参数?

在微服务架构中&#xff0c;服务注册与发现以及健康检查是至关重要的组件。Nacos&#xff0c;作为阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置和服务管理平台&#xff0c;广泛应用于微服务架构中。在Nacos中&#xff0c;服务的健康检查是一个核心功能&#xf…

【Python】使用MySQL综合案例

数据说明: 一月份各省销售数据&#xff1a;csv格式 二月份各省销售数据&#xff1a;json格式 实现要求&#xff1a;将两个文件中的数据存储到数据库中&#xff0c;并反向从数据库中读取数据存储为json格式文件 本文提供数据 完成案例所需基础 【Python】基础知识(函数与数…

C++ 日志库 log4cpp 编译、压测及其范例代码 [全流程手工实践]

文章目录 一、 log4cpp官网二、下载三、编译1.目录结构如下2.configure 编译3.cmake 编译 四、测试五、压测源码及结果1.运行环境信息2.压测源码3.压测结果 文章内容&#xff1a;包含了对其linux上的完整使用流程&#xff0c;下载、编译、安装、测试用例尝试、以及一份自己写好…

Qt | QTimer 类(计时器)

01、相关知识回顾 Qt C++ | QTimer经验总结Qt | QDateTimeEdit、QDateEdit类和QTimeEdit类02、QTimer 类 1、QTimer 类是 QObejct 的直接子类,该类用于实现计时器,QTimer 类未继承自 QW

IT革新狂潮:引领未来的技术趋势

方向一&#xff1a;技术革新与行业应用 当前现状&#xff1a; 量子计算&#xff1a;量子计算的研究正在加速&#xff0c;尽管目前仍处于初级阶段&#xff0c;但其在药物研发、加密技术和材料科学等领域的应用潜力已被广泛认可。 虚拟现实&#xff08;VR&#xff09;与增强现实…