帮小弟看看这个问题。
// 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,没有办法。
大侠帮帮忙,小弟有礼了!!!
问题点数:60、回复次数:18Top
1 楼fangrk(加把油,伙计!)回复于 2003-02-02 22:29:42 得分 0
你要表达什么意思啊?
switch(m>0):是否有误?
do
{
cout<<m<<"\t"<<n<<"\t"<<a;
n=n+1;
a+=(1/n); //等价与a+=0;
}
while(a>m);Top
2 楼fangrk(加把油,伙计!)回复于 2003-02-02 22:31:21 得分 0
//1+1/2+1/3+....+1/n>m
把a的类型改为doubleTop
3 楼micropentium6(小笨|曾经的美好)回复于 2003-02-02 22:34:22 得分 0
up
case 0:不会执行
你的叙述也不清楚嘛:)Top
4 楼Keyisme(每天进步一点点)回复于 2003-02-02 22:37:31 得分 0
等价与a+=0;===>我看不出来
与Switch没有关系。Top
5 楼Keyisme(每天进步一点点)回复于 2003-02-02 22:39:29 得分 0
把a的类型改为double也没有用
Top
6 楼icefox127(icefox)回复于 2003-02-02 22:39:43 得分 0
a不为0,应该为1。
前面int a(1);//a为整型
后面a+=(1/n);//a本该为实型(1<a<2),但由于前面的定义,被隐式转换成了整 型,为1.
最好把m,a定义为double。
Top
7 楼Keyisme(每天进步一点点)回复于 2003-02-02 22:41:26 得分 0
// 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 ,这样怎么改?Top
8 楼Frank001(Frank)回复于 2003-02-02 22:43:01 得分 0
第一:switch(m>0) 这句应该改为,switch(m)
第二:while(a>m) 这句应该改为 while(a<m); //不然的话,你的循环就执行一次。Top
9 楼Frank001(Frank)回复于 2003-02-02 22:44:47 得分 0
注意,do while (条件) 为false时,才是推出循环。Top
10 楼Keyisme(每天进步一点点)回复于 2003-02-02 22:45:30 得分 0
unsigned long int m,n(1),a(1);改成double a=0.5了!!Top
11 楼Frank001(Frank)回复于 2003-02-02 22:46:28 得分 0
对了,纠正一下,条件判断语句应该是 while(a<=m);Top
12 楼Keyisme(每天进步一点点)回复于 2003-02-02 22:47:32 得分 0
while(a<m)就算N次了,我试了Top
13 楼cupidvenus(小鱼儿)回复于 2003-02-02 22:55:44 得分 0
// 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;
}Top
14 楼Frank001(Frank)回复于 2003-02-02 22:56:17 得分 10
正确的代码:
#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;
}
}
Top
15 楼icefox127(icefox)回复于 2003-02-02 22:56:56 得分 20
刚才忽略的一点,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通过。Top
16 楼cupidvenus(小鱼儿)回复于 2003-02-02 23:06:26 得分 30
// 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;
}Top
17 楼xdspower(杂食菜熊)回复于 2003-02-03 09:19:14 得分 0
你的程序有可能不能正确获得解,比如m十分大的时候。Top
18 楼Keyisme(每天进步一点点)回复于 2003-02-03 11:21:03 得分 0
cupidvenus(小鱼儿) 程序不错。
icefox127(icefox) 程序中n少1。
Frank001(Frank) 程序在Bc++5.02中有错。
-------------------
谢谢大家。Top




