for循环举例(1+1/2+1/3...+1/99+1/100)
来源:互联网 发布:php优酷真实地址解析 编辑:程序博客网 时间:2024/05/30 13:42
我以前学C语言时学的很不扎实,再加上长时间没有看书,所以忘了许多知识(其实有许多知识当初就没掌握),所以即使做起以前的题来,也很难一步到位,比如说一个关于for循环的小题:求1+1/2+1/3...+1/99+1/100的和。一看到这个题时,我略一思考,即刻写出了代码,代码如下:
# include <stdio.h>int main(void){int i;float sum = 0;for(i=1; i<=100; ++i){sum = sum + 1/i;}printf("sum = %f\n",sum);return 0;}其结果为:
这个结果当然是错误的,那么错在何处呢?
首先,这个和肯定是个实数(这里说的实数指的是浮点型数据),但sum的数据类型虽然已经是 float,但 i 仍是int,所以1/i,也是个整型数据,则后面加的1/2、1/3...1/100因为是整型,所以最终加进去的值都变成了0,这样结果当然错误了。已经找到原因,那我们该如何解决这个问题呢? 有两种方法:
一,将for控制的语句中的1/i改成1.0/i,如下所示:
for(i=1; i<=100; ++i){ sum = sum + 1.0/i;}
这样可以得到正确结果;
二,对1/i中的i进行强制类型转化,即
for(i=1; i<=100; ++i){ sum = sum + 1/(float)(i);}
这样也可以得到正确结果。(需要说明的是,在C语言中进行强制类型转化时,后面的被转化变量有时需要加括号,有时不需要加括号,一般推荐都加上括号)
对于这两种方法,我们推荐使用第一种,其源码如下:
# include <stdio.h>int main(void){int i;//这里 i不能用浮点型,因为下边会用到i++,如果i用了浮点型,代码也可以编译通过,但不要这样做,坚决不要!!!float sum = 0;for(i=1; i<=100; ++i){sum = sum + 1.0/i;//推荐使用//sum = sum + 1/(float)(i); 这两种格式效果相同 其中(float)(i)是强制类型转化,把整型变量变为浮点型,不推荐使用}printf("sum = %f\n",sum);return 0;}最终正确结果为:
好了,就这样了。
【所有代码均在windows系统下VC++6.0下运行通过】
(如有错误,敬请指正)
1 0
- for循环举例(1+1/2+1/3...+1/99+1/100)
- [iOS学习]for循环讲解举例1-100输出7的倍数
- lua(1) for循环
- for循环初始1
- for循环1-性能
- for循环代替while(1)
- PHP入门(1) for循环
- bash shell for循环1到100
- shell for循环1到100
- bash shell for循环1到100
- Java入门1-for循环(菱形)
- 从小到大排序1(for循环法)
- LabViewFor循环(例1)事件结构应用举例(例7)
- For循环举例
- Python for循环举例
- 递归和for循环实现1+2+3+...+100
- libnet使用举例(1)
- libpcap使用举例(1)
- [转载]ORACLE 10g 升级补丁(Patch)
- 精确统计github贡献者的代码行数
- Host 'xxx' is not allowed to connect to this MySQL server的解决
- eclipse4.3+svn
- MonoMac平台鼠标右键展开列表:RightMouseDown
- for循环举例(1+1/2+1/3...+1/99+1/100)
- LeetCode OJ:Merge Sorted Array
- 嵌入式开发C语言面试题总结
- Eclipse安装git
- 开发中的版本问题(2)—配置tomcat使用特定的jdk版本
- mysql启动和连接
- java23种设计模式
- tomcat、ODE运行bpel--apache-ode-的使用流程
- 每天给自己一个希望,试着不为明天而烦恼