| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:帮忙看下有没错,好像答案不正确
只看楼主 加入收藏
灰色代言
该用户已被删除
收藏
已结贴  问题点数:20 回复次数:8 
帮忙看下有没错,好像答案不正确
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: 答案 
2010-05-01 11:54
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:10 
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
    int i=1,n=1,s;
    float sum=0;
    int x;
    float y;
    while(i<=100)
    {
        s=pow((float)-1,(int)n-1);
        n++;
        x=(1/i)*s;
        y=(1/i)*s;
        printf("%d %f",x,y);
        sum=sum+(1/i)*s;
        i++;
    }
    //printf("%.3f,%d",sum,s);
    return 0;
}
首先小改一下你的程序
x,y两个不同类型的变量接收
然后输出
图片附件: 游客没有浏览图片的权限,请 登录注册

发现除了i=1的循环 为1外 其他全是0

再来小改一下 将i改为float型
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
    int n=1,s;
    float sum=0;
    int x;
    float y;
    float i=1;
    while(i<=100)
    {
        s=pow((float)-1,(int)n-1);
        n++;
        y=(1/i)*s;
        printf("%f",y);
        sum=sum+(1/i)*s;
        i++;
    }
    //printf("%.3f,%d",sum,s);
    return 0;
}
输出
图片附件: 游客没有浏览图片的权限,请 登录注册

这时正常呢
为什么会出现这种情况呢
这是因为你先前定义的i为整型 1/i 所以结果被直接转换为整型进行存储

接下来我们再看下汇编码的形式
定义 float x,y,i; int n;
y=(1/i)*s;
 x=(1/n)*s;

        y=(1/i)*s;
0041145D  fld         dword ptr [i]
00411460  fld1            
00411462  fdivrp      st(1),st         fdivrp浮点除法指令
00411464  fimul       dword ptr [s]
00411467  fstp        dword ptr [y]
        x=(1/n)*s;
0041146A  mov         eax,1
0041146F  cdq              
00411470  idiv        eax,dword ptr [n]    idiv为整数除法指令  那么这时整数除法舍去小数点当然只能为0
00411477  mov         dword ptr [ebp-10Ch],eax
0041147D  fild        dword ptr [ebp-10Ch]
00411483  fstp        dword ptr [x]

[ 本帖最后由 hahayezhe 于 2010-5-1 13:08 编辑 ]
2010-05-01 13:05
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:10 
#include "Stdio.h"
#include "Conio.h"

int main(void)
{ float sum=1,a,b,c;/*a作为分母*/
  b=1;
  for(a=2;a<=100;a++)
    {  b=(-1)*b;
       c=b*(1/a);
       sum=sum+c;
     }
     printf("%f",sum);


  getch();
  return 0;
}
看看我这个吧!

付出终将有回报!Ibelieve!
2010-05-01 13:28
ychf890225
Rank: 4
等 级:业余侠客
帖 子:85
专家分:221
注 册:2010-4-15
收藏
得分:0 
#include <stdio.h>
#include <math.h>

main()
{
    int i=1;
    float sum=0;
   
    for(i=1;i<=100;i++)
    {           
        sum+=(pow(-1,i+1)*(float)1/i);
        
    }
   
    printf("%.3f\n",sum);
    return 0;
}
想清楚算法就行了,然后把算法表达清楚,你看看这个吧!
2010-05-01 16:16
灰色代言
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-01 16:28
灰色代言
该用户已被删除
收藏
得分:0 
回复 3楼 whbc
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-01 16:41
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:0 
呵呵,不用,其实都是大家一起交流,有交流,才会有学习,才能进步!

付出终将有回报!Ibelieve!
2010-05-01 16:44
灰色代言
该用户已被删除
收藏
得分:0 
回复 2楼 hahayezhe
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-01 16:46
灰色代言
该用户已被删除
收藏
得分:0 
回复 7楼 whbc
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-01 16:48
快速回复:帮忙看下有没错,好像答案不正确
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016774 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved