本文主要是介绍4.14 C语言练习(一球从M米高度自由下落,每次落地后返回原高度的一半,再落下,它在第N次落地时共经过多少米?反弹多高?),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【练习】
题目要求:一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时共经过多少米?反弹多高? 保留两位小数输入:M N输出:它在第N次落地时反弹多高?共经过多少米? 保留两位小数,空格隔开,放在一行例如:输入:1000 5输出:31.25 2875.00解题方法:1、利用for循环控制下落次数实现2、利用等比数列计算公式实现
解法一:for循环
#include <stdio.h>int main()
{int i;float M,N,sum=0;scanf("%f %f",&M,&N);sum = M; //第一次下落高度 for(i=1;i<=N;i++){M /= 2;if(i==N) //不计算落地N次后反弹的值 {break;}sum += 2 * M; //来回的路程之和 }printf("%.2f %.2f",M,sum); return 0;}
解法二:等比数列解题线索:等比数列公式Sn = a1 ( 1 - q^n ) / ( 1 - q )不难发现,公比 q 为 1 / 2 ,首项 a1 为 M,那么,只计算下降的路程,再乘以 2后所得到总路程。由于乘 2 后的总路程中首次下降的 M 被重复计算一次即:总路程 - M = 实际总路程每次高度都是前一次高度的 1 / 2 倍,那么,被第 N 次反弹后高度计算即:M ×( 1 / 2 )^ N
#include <stdio.h>
#include <math.h>int main()
{double M,N,sum=0;scanf("%lf %lf",&M,&N);sum = 2*2*M*(1-pow(0.5,N))-M;printf("%.2lf %.2lf",M*pow(0.5,N),sum);return 0;}
这篇关于4.14 C语言练习(一球从M米高度自由下落,每次落地后返回原高度的一半,再落下,它在第N次落地时共经过多少米?反弹多高?)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!