1+1/3+1/6+...1/n(for与if嵌套的用法以及强制转化数据类型)

作者在 2011-08-16 11:05:05 发布以下内容
/*
时间:2011年8月16日10:41:05
功能:计算1+1/3+1/6+...1/n,(n<=100)的结果
目的:掌握for与if嵌套的用法,并了解强制类型转化的方法
*/

# include<stdio.h>

int main(void)
{
    int i;                                
    float sum = 1;                        //这里sum=1是因为当i=1时,i%3==0为假,注意与之前例子中sum=0的区别
    
    for (i=1; i<=100; ++i)                //这里用到了for与if的嵌套,在i从1到100的循环中选择其中能被3整除的部分数字
    {
        if (i%3 == 0)
        //sum = sum + 1/i;                //这样写会有问题,整数除法的小数部分会被舍去,因此除了i=1时1/i的值为1外,其余时候1/i始终为0
        sum = sum + 1/(float)(i);        //所以需要把i强制类型转化为浮点型
        
//sum = sum + (float)(1/i)        //这样是不对的,相当于1/i做了整形的除法,舍去小数后再变成浮点型,起不到预期的作用
        
//sum = sum + 1.0/i;            //这有一个更简便的方法,推荐使用**
    }                                    //为什么更新的变量i不直接用float定义呢?因为浮点数不保证所有数字都能被准确存储,以后讲补码的时候细讲

    printf("1+1/3+1/6+...1/n(n<=100)的结果是 %f\n", sum);

    return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
1+1/3+1/6+...1/n(n<=100)的结果是 2.362932
Press any key to continue
————————————

强制转化
格式:(数据类型)(表达式)
功能:把后面括号中的表达式的值强制转化为前面括号中的数据类型
举例:(int)(4.5+2.2)  最终的值是6
      (float)(5)      最终的结果是5.000000    
        

程序的运行流程
i=1
1<=100满足,1%3==0为假,sum=sum+1.0/i不执行,i=1+1=2
2<=100满足,2%3==0为假,sum=sum+1.0/i不执行,i=2+1=3
3<=100满足,3%3==0为真,sum=1+1.0/3,         i=3+1=4
4<=100满足,4%3==0为假,sum=sum+1.0/i不执行,i=4+1=5
5<=100满足,5%3==0为假,sum=sum+1.0/i不执行,i=5+1=6
6<=100满足,6%3==0为真,sum=1+1.0/3+1.0/6,     i=6+1=7
。。。。。。
99<=100满足,99%3==0为真,sum=1+1.0/3+1.0/6+...+1.0/99,     i=99+1=100
100<=100满足。100%3为假,sum=sum+1.0/i不执行,i=100+1=101
101<=100不满足,循环结束
输出运行结果 sum=1+1.0/3+1.0/6+...+1.0/99
满足题意
*/
郝斌视频笔记 | 阅读 3141 次
文章评论,共2条
贾文慧
2011-08-19 12:26
1
为了骗积分,赞一个
zzgtjt
2011-08-25 16:14
2
学习了
游客请输入验证码
最新评论