用c语言编程:一球从某一高度落下(整数,单位米),每次落地后反跳回原本高度的一半,再落下。

举报 回答
用c语言编程:一球从某一高度落下(整数,单位米),每次落地后反跳回原本高度的一半,再落下。
问在线客服
扫码问在线客服

一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算球在第n次落地时,共经过多少米?第n次反弹多高?#includeintmain(... 查看全部

  • 回答数

    5

  • 浏览数

    1,657

举报 回答

5个回答 默认排序
  • 默认排序
  • 按时间排序

没找到满意答案?去问秘塔AI搜索
取消 复制问题
已采纳
计算球在第10次落地时,共经过多少米?第10次反弹多高? 以下是一个用C语言编写的程序,用于计算球在第10次落地时,共经过多少米以及第10次反弹的高度:
#include stdio.h int main() { double h0, i, s, h; printf("请输入小球下落的高度:"); scanf("%lf", &h0); s = 0; h = 0; for (i = 1; i = 10; i++) { s += h0 + h; h = h0 * 0.5; h0 = h; } printf("到球第10次落地时,一共经过的米数是:%lf ", s); printf("第10次弹跳的高度是:%lf ", h); return 0; } 这个程序首先读取用户输入的小球初始下落高度,然后使用一个循环来模拟球的下落和反弹过程。在每次循环中,球先下落一段距离,然后反弹回原来高度的一半。这个过程重复进行,直到球第10次落地为止。最后,程序输出球在第10次落地时总共经过的距离以及第10次反弹的高度。
取消 评论
includeintmain(){inth;scanf(%d,&h);doubles=h,t=h;while(t005){t/=2;s+=2*t;}printf(%.2f,s);return0;}注意这里t005是防止四舍五入误差,s初始化为h是因为第一次下落,后面每次弹到t高度再落下又走t,所以加2*t,输出保留两位小数比较符合工程习惯,你要是想看详细过程还能在while里加printf打点日志
取消 评论
说实话这题用递归写更优雅,我写了个voidbounce(doubleh,double*sum,intn)函数,每次调用时*sum+=h*2(除了第一次),然后递归bounce(h/2,sum,n+1),终止条件是h01或者n100(防栈溢出)。不过新手可能晕,还是推荐用迭代——建个变量cur_h=h,total=h,然后while(cur_h=01){cur_h/=2;total+=2*cur_h;},最后printf(总路程%.3fm,total)。提醒下单位别写错,题目给的是米,结果别莫名其妙变成厘米了!
取消 评论
哎呀这题我当年大一作业也写过,挺经典的递归入门题!你得先定义初始高度h,然后用while循环判断当前高度是否大于01(避免无限小数),每次把高度除以2累加到总路程里,注意第一次下落只算一次,后面每次弹起再落下要算两次距离,最后输出总路程就行。记得用double存高度,int容易丢精度,printf的时候控制下小数位数,不然输出一堆0看着闹心
取消 评论
兄弟你这题目描述有点小坑啊,没说要算到第几次落地还是弹跳多少次停止,我一般默认算到高度小于1厘米就停,毕竟现实中球也不可能永远弹下去。代码里我习惯用for循环加计数器,每次h/=2后判断if(h01)break,总路程s+=h*2(弹起加落下),但第一次要单独s=h,别忘了头一次只有下落没弹起。对了,输入记得用scanf(%d,&h),别手滑写成%dn
取消 评论
ZOL问答 > 用c语言编程:一球从某一高度落下(整数,单位米),每次落地后反跳回原本高度的一半,再落下。

举报

感谢您为社区的和谐贡献力量请选择举报类型

举报成功

经过核实后将会做出处理
感谢您为社区和谐做出贡献

扫码参与新品0元试用
晒单、顶楼豪礼等你拿

扫一扫,关注我们
提示

确定要取消此次报名,退出该活动?