c语言,一个球从某高度h落下,每次落地后反弹回原来高度的一半,再落下。编程计算球在10次落地?

Python029

c语言,一个球从某高度h落下,每次落地后反弹回原来高度的一半,再落下。编程计算球在10次落地?,第1张

根据你的题目和输出样式截图分析:

1、每次输出当前坠落的高度,及本次坠落后经过的距离总和

2、输出包含小数,因此高度及距离变量采用浮点数

3、递归/循环只执行10次

3、看你图上,输出浮点数小数不显示多余的0,因此打印格式要用%g而不是%f(最多保留6位)。

#include <stdio.h>

void drop(float height)

int main()

{

  float height

  printf("初始高度:")

  scanf("%f",&height)

  drop(height)

  return 0

}

void drop(float height)

{

  static int cnt=1

  static float distance=0//每次坠落后球移动的距离总和

  if(height>0){

      distance+=height

      printf("第%d次高度%g\n",cnt,height)

      printf("第%d次距离%g\n",cnt,distance)

      if(cnt<10)

          cnt++,distance+=height/2,drop(height/2)

      else

          cnt=1,distance=0

  }

}

看你代码我理解m是初始高度  n是下落次数 s是总下落高度

不明白s=20初值做什么用,还有为什么要把double s=20,f=0,k=m定义变量写在大循环里,定义放在最上面,循环里只要赋值就好。否则你每次大循环都重复定义变量了。

下面是我根据你的写法,改的代码

#include<stdio.h>

#include<math.h>

int main(void)

{

    int n,k// n指定的下落的次数   k计数用

    double m,s// m下落初始高度 s 下落的总高度

    while(printf("请输入初始下落高度(整数)及 要计算的下落次数:") && scanf("%lf%d",&m,&n)!=EOF)

    {

        k=0s=0

        while(n!=k)

        {

            s=s+m

            k++

            m=m/2

        }

        printf("从%.0f米高度落下,在第%d次落地时,共经过%.8lf米? 第%d次反弹高度%.8lf米\n\n\n\n\n",m*pow(2,n),n,s,n,m)

    }

    return 0

}

main()

{

float sn=100.0,hn=sn/2

int n

for(n=2n<=10n++)

{

sn=sn+2*hn

hn=hn/2

}

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。