|
|
发表于 2013-9-12 10:02:12
|
显示全部楼层
本帖最后由 苹果沃珂 于 2013-9-12 10:09 编辑
你的错误主要是编程的逻辑错误:
1, 在for()循环中,你不清楚 i=1,i=2,i=3分别代表的意义;
2, 你不知道 i=1,i=2,i=3之间的有没有不一样的。
根据你的程序代码,一次操作是从“球弹起”到“球落地”作为一个周期的,所以一次操作的路程为 s*2,累计路程为sum=sum+s*2;
你的错误如下:
i=1,代表了第一次落地,这个第一次是直接从高度n=100下落的,这个没有从地上“弹起”的前半过程。
所以一次操作的路程为 s*1;
i=2,代表了第二次,这次落地前,有从地上弹起的前半过程也有落地的后半过程,所以一次操作的路程为 s*2。
i=3,4,……同i=2一样,含有完整的过程,所以一次操作的路程为 s*2。
- #include<stdio.h>
- int main()
- {
- double n=100.0,s,sum=0;
- int i;
- for(i=1;i<=10;i++)
- {
- /* s=n/2.0;
- sum=sum+s*2;
- n=n/2.0; */
- if (i==1)
- {
- s = 0; // 第一次落地前没有弹起
- sum = sum + n + s;
- s = n / 2;// 第一次落地后弹起的高度==第二次落地前弹起的高度
- }
- else
- {
- n = s; // 第i次落地前弹起的高度==第i-1次落地后弹起的高度
- sum = sum + s * 2;
- s = n / 2;// 第i次落地后弹起的高度==第i+1次落地前弹起的高度
- }
- }
- printf("第十次弹跳高度为%f米\n",s);
- printf("十次共经过%f米\n",sum); // sum+100代表是的补充第一次的操作,现在已经在循环里面做了
- return 0;
- }
- #include<stdio.h>
- int main()
- {
- double n=100.0,s,sum=0;
- int i;
- for(i=1;i<=10;i++)
- {
- /* s=n/2.0;
- sum=sum+s*2;
- n=n/2.0; */
- if (i==1)
- {
- s = 0; // 第一次落地前没有弹起
- sum = sum + n + s;
- }
- else
- {
- s = n / 2;// 第i次落地前弹起的高度==第i-1次落地后弹起的高度==第i次落地高度的一半
- sum = sum + s * 2;
- n = s; // 第i次落地后高度
- }
- }
- printf("第十次弹跳高度为%f米\n",s/2);//因为第10次弹跳高度==第11次落地高度==第10次落地高度的一半
- printf("十次共经过%f米\n",sum); // sum+100代表是的补充第一次的操作,现在已经在循环里面做了
- return 0;
- }
复制代码
|
|