一个小问题(新手)

chcyj 2012-07-16 05:02:33
运行环境:winxp vc6.0
代码如下:
#include<stdio.h> /* 这是一个解 limit<1+1/2-1/3+1/4-1/5+....+1/m的程序 (limit是常数) */
#include<stdlib.h>
#include<conio.h>

int main()
{
double sum=1; /* declaration */
int i=1;
int limit=1;

printf("please input the limitation:\n"); /* input */
scanf("%d",&limit);
system("CLS");
printf("please wait for some time");

while(sum-limit<=0)
{
i++;
if (i%2==0)
sum=sum+1.0/i;
else
sum=sum-1.0/i;
}

system("CLS"); /* output */
printf("the answer is %d",i);

getch();
return 0;
}

问题:编译可以通过,但运行时除了输入1时输出正确,大于1的输入输出都为0,why???
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chcyj 2012-07-16
  • 打赏
  • 举报
回复
这是书上的例子啊,竟然出现数学性错误,破书,不用了。
qian1314ss 2012-07-16
  • 打赏
  • 举报
回复
可能是你设的是int吧 试试float的吧
baichi4141 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我在VS2005上编译,结果不一样。在大于1时,跳不出while。而且i初始为1,自增后就算溢出为0?
[/Quote]
多等几秒,循环到0就跳出了
Kenneth_Lin 2012-07-16
  • 打赏
  • 举报
回复
我在VS2005上编译,结果不一样。在大于1时,跳不出while。而且i初始为1,自增后就算溢出为0?
baichi4141 2012-07-16
  • 打赏
  • 举报
回复
这是一道简单的数学题
1+1/2-1/3+1/4-1/5+....+1/m
它可以划分为以下两种算法

1+(1/2-1/3)+(1/4-1/5)+……
由此可知,这个计算式的结果大于1

1+1/2-(1/3-1/4)-(1/5-1/6)-……
由此可知,这个计算式的结果小于1.5

当你输入的limit大于2时,正常的数学计算,它永远也不可能达到跳出循环的条件
但这是计算机,int型整数有表达范围,i一直自加下去最终会循环回0
此时sum加上一个无穷大的数,满足跳出循环的条件,你得到了你想要的结果
 微前端的介绍微前端(Micro-Frontends)是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。各个前端应用还可以独立运行、独立开发、独立部署。微前端不是单纯的前端框架或者工具,而是一套架构体系。微前端的价值1. 技术栈无关 主框架不限制接入应用的技术栈,子应用具备完全自主权2. 独立开发、独立部署 子应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新3. 独立运行时 每个子应用之间状态隔离,运行时状态不共享课程内容大喵将带着大家,从零开始使用 Vue.js、React.js、HTML技术从零开始构建我们的微前端项目。整个项目将采用qiankun 微前端框架来搭建我们的主应用基座,来接入我们的多种不同技术开发的子应用;整个项目涉及到项目的从零开始构建、qiankun核心API在项目的使用场景的详细讲解、npm scripts 工作流的统一管理配置、多个项目间数据管理和数据通信、webpack打包输出配置、线上构建部署发布等;小伙伴们学完本套课程,可以完全熟练使用qiankun框架接入自己的进行独立改造,独立开发一套为前端架构为体系的项目。(课程资料在最后一节课附件下载) 适用人群1. 热爱前端技术、喜欢前端开发的小伙伴2. 面临开发大型项目解耦问题3. 考虑优化更好管理团队项目  

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧