帮小弟看看这个问题。

Keyisme 2003-02-02 10:14:40
// 1+1/2+1/3+....+1/n>m 输入M 求n
#include<iostream.h>
int main()
{
unsigned long int m,n(1),a(1);
cout<<endl<<"输入M";
cin>>m;
switch(m>0)
{
case 0:
cout<<endl<<"输入的是0。"<<endl;
break;
default:
do
{
cout<<m<<"\t"<<n<<"\t"<<a;
n=n+1;
a+=(1/n);
}
while(a>m);
cout<<endl<<"\t n= "<<n<<endl;
break;
}
return 0;
}



=============
a老是得0,没有办法。
大侠帮帮忙,小弟有礼了!!!
...全文
44 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Keyisme 2003-02-03
  • 打赏
  • 举报
回复
cupidvenus(小鱼儿) 程序不错。
icefox127(icefox) 程序中n少1。
Frank001(Frank) 程序在Bc++5.02中有错。
-------------------
谢谢大家。
xdspower 2003-02-03
  • 打赏
  • 举报
回复
你的程序有可能不能正确获得解,比如m十分大的时候。
cupidvenus 2003-02-02
  • 打赏
  • 举报
回复
// 1+1/2+1/3+....+1/n>m 输入M 求n
程序还可倒过来求,以减少误差累积的影响
#include<iostream.h>
int main()
{
unsigned long int m,n;
double a;
cout<<endl<<"输入M";
cin>>m;
for (n=1,a=m;a>=0;++n)
{
a -= 1.0/n;
}
cout<<endl<<"\t n= "<<n<<endl;

return 0;
}
icefox127 2003-02-02
  • 打赏
  • 举报
回复
刚才忽略的一点,n也必须为实型,不然1/n仍为0;m为整型,(a>m)改为(a<m);
正确改法
#include<iostream.h>
int main()
{
unsigned long m;

double a(1),n(1);
cout<<endl<<"输入M";
cin>>m;
switch(m>0)
{
case 0:
cout<<endl<<"输入的是0。"<<endl;
break;
default:
do
{
cout<<m<<"\t"<<n<<"\t"<<a;
n=n+1;
a+=(1/n);
}
while(a<m);
cout<<endl<<"\t n= "<<n<<endl;
break;
}
return 0;
}
vc6.0通过。
Frank001 2003-02-02
  • 打赏
  • 举报
回复
正确的代码:
#include<iostream>
using namespace std;
void main()
{
unsigned long int m;
double a=1;
double n=1;
cout<<endl<<"输入M:";
cin>>m;
switch(m)
{
case 0:
cout<<endl<<"输入的是0。"<<endl;
break;
default:
do
{
cout<<m<<','<<n<<','<<a<<endl;
n=n+1;
a+=(1/n);
} while(a<=m);
cout<<endl<<"\t n= "<<n<<endl;
break;
}
}
cupidvenus 2003-02-02
  • 打赏
  • 举报
回复
// 1+1/2+1/3+....+1/n>m 输入M 求n
#include<iostream.h>
int main()
{
unsigned long int m,n;
double a;
cout<<endl<<"输入M";
cin>>m;
for (n=1,a=0;a<=m;++n)
{
a += 1.0/n;
}
cout<<endl<<"\t n= "<<n<<endl;

return 0;
}
Keyisme 2003-02-02
  • 打赏
  • 举报
回复
while(a<m)就算N次了,我试了
Frank001 2003-02-02
  • 打赏
  • 举报
回复
对了,纠正一下,条件判断语句应该是 while(a<=m);
Keyisme 2003-02-02
  • 打赏
  • 举报
回复
unsigned long int m,n(1),a(1);改成double a=0.5了!!
Frank001 2003-02-02
  • 打赏
  • 举报
回复
注意,do while (条件) 为false时,才是推出循环。
Frank001 2003-02-02
  • 打赏
  • 举报
回复
第一:switch(m>0) 这句应该改为,switch(m)
第二:while(a>m) 这句应该改为 while(a<m); //不然的话,你的循环就执行一次。
Keyisme 2003-02-02
  • 打赏
  • 举报
回复
// 1+1/2+1/3+....+1/n>m 输入M 求n
#include<iostream.h>
int main()
{
unsigned long int m,n(1),a(1);
cout<<endl<<"输入M";
cin>>m;
do
{
cout<<m<<"\t"<<n<<"\t"<<a;
n=n+1;
a+=(1/n);
}
while(a>m);
cout<<endl<<"\t n= "<<n<<endl;

return 0;
}
//不用switch ,这样怎么改?
icefox127 2003-02-02
  • 打赏
  • 举报
回复
a不为0,应该为1。
前面int a(1);//a为整型
后面a+=(1/n);//a本该为实型(1<a<2),但由于前面的定义,被隐式转换成了整 型,为1.
最好把m,a定义为double。
Keyisme 2003-02-02
  • 打赏
  • 举报
回复
把a的类型改为double也没有用
Keyisme 2003-02-02
  • 打赏
  • 举报
回复
等价与a+=0;===>我看不出来

与Switch没有关系。
  • 打赏
  • 举报
回复
up
case 0:不会执行
你的叙述也不清楚嘛:)
fangrk 2003-02-02
  • 打赏
  • 举报
回复
//1+1/2+1/3+....+1/n>m
把a的类型改为double
fangrk 2003-02-02
  • 打赏
  • 举报
回复
你要表达什么意思啊?
switch(m>0):是否有误?

do
{
cout<<m<<"\t"<<n<<"\t"<<a;
n=n+1;
a+=(1/n); //等价与a+=0;
}
while(a>m);

69,373

社区成员

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

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