CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

帮小弟看看这个问题。

楼主Keyisme(每天进步一点点)2003-02-02 22:14:40 在 C/C++ / C语言 提问

//     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

相关问题

  • 帮帮忙,看看这个...
  • 快帮帮我这个卵!!
  • 帮帮我这个问题
  • 谁帮小弟这个忙??
  • 谁帮我这个问题?
  • 帮我看看这个
  • 帮忙看这个问题
  • 帮我看看这个DTD
  • 帮看看这个函数
  • 帮我看看这个 new!!!

关键词

  • 输入m求
  • cout
  • unsigned long
  • switch
  • include int main

得分解答快速导航

  • 帖主:Keyisme
  • Frank001
  • icefox127
  • cupidvenus

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo