作者在 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
满足题意
*/
时间: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
满足题意
*/