#includestdio.h
创新互联从2013年开始,是专业互联网技术服务公司,拥有项目网站制作、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元白碱滩做网站,已为上家服务,为白碱滩各地企业和个人服务,联系电话:18982081108
void main()
{
float s=100 ,h=100,t=0;int i=2,n;
printf("请输入弹跳次数:");
scanf("%d",n);
for(;i=n;i++)
{
h=h/2;
t=t+2*h;
}
s=s+t;
h=h/2;
printf("%f \n %f",s,h);
}
运行结果为299.609375;0.097656;
#include "stdio.h"
//函数声明,函数声明要写在main函数的前面
//hight:初始高度;number:弹跳次数
//前面的void表示无需返回值;
void sphere_bounce(double hight, int number);
int main(void)
{
sphere_bounce(100, 10); //这样写就表示调用sphere_bounce()函数,函数中传入参数;
}
void sphere_bounce(double hight, int number) //函数定义,这里写函数的具体实现过程;
{
double sum = 0; //定义变量sum,用于记录总共经过的距离;
for (int n = 1; n = number; n++) //循环number次
{
sum = sum + hight; //每一次弹跳记录到sum
hight = hight / 2; //每次弹跳是原来高度的一半
printf("球体弹跳第%d次的高度为:%.3f米\n", n, hight); //可屏蔽,用于观察每次的弹跳高度
}
printf("\n-----最终结果-----\n"); //输出最总结果
printf("球体弹跳第%d次的高度为:%.3f米,总过经过%.3f米。\n", number, hight, sum);
}
这个问题用递归很好解决,本次跳起的高度是上次跳起高度的一半,而第0次跳起的高度是100米。这次弹跳的总长度是上次跳起的总长度加上上次跳起的高度和本次跳起的高度,而第0次跳起的总长度是0米。代码如下:
public class BallJump {
public double heightOfCount(int jumpCount) {//返回第jumpCount次跳起的高度
if (jumpCount == 0) {//递归结束条件
return 100.0;
} else {
//本次跳起的高度是上次跳起的一半
return heightOfCount(jumpCount - 1) / 2;
}
}
public double lengthOfCount(int jumpCount) {//返回第jumpCount次跳起球经过的总长度
if (jumpCount == 0) {//递归跳出条件
return 0.0;
} else {
//这次跳起的总长度,是上次跳起的总长度加上上次跳起的高度和本次跳起的高度之和
return lengthOfCount(jumpCount - 1)
+ (heightOfCount(jumpCount) + heightOfCount(jumpCount - 1));
}
}
public static void main(String[] args) {
BallJump ball = new BallJump();
double h = ball.heightOfCount(10);
System.out.println(h);
double l = ball.lengthOfCount(10);
System.out.println(l);
}
}
程序运行的结果是:
0.09765625
299.70703125
#includestdio.h
int main()
{
int a0;
double sum=0.0;
double h;
int NUM=10;
printf("请输入球落下的起始高度\n");
scanf("%d", a0); //这边需要加上符
h=a0;
sum=h;
int i;
for(i=0;iNUM-1;i++)
{
h /= 2; //这边直接这样写就行,因为h本身定义的时候就是double型,它不会自动丢失精度变为int的
sum += 2*h;
}
h/=2; //这边不要忘记需要再除以2,因为最后一次弹上去的高度还没算
printf("到球第%d次落地时,共经过%lf米\n第%d次弹跳的高度为%lf米\n",NUM,sum,NUM,h); //double的格式化输出为%lf,不是%d
return 0;
}
以上代码是按照你的代码改造的。
简化一下如下:
#includestdio.h
#define NUM 10
int main()
{
double sum = 0.0, h = 0.0;
printf("请输入球落下的起始高度\n");
scanf("%lf", h);
sum -= h;
int i;
for(i=0;iNUM;i++)
{
sum += 2*h;
h /= 2;
}
printf("到球第%d次落地时,共经过%lf米\n第%d次弹跳的高度为%lf米\n",NUM,sum,NUM,h);
return 0;
}
尝试正确后请采纳,谢谢!
这是我曾经做过的一道类似题,希望能给你点启发。
以下是你的代码:
#includeiostream.h
#includemath.h
main()
{double s1=0;
double s,s2;
int i,h=100;
for(i=1;i=10;i++) //别的地方没发现什么问题,但是这里应该是i=9。如果是10,则是第11次落地时走过的距离了。
s1=s1+2*h*pow(1/2,i); //如果你是学数学的这里这么写我没意见,如果学编程的,个人认为这么写代码不是很好。
s=s1+h; //经过的距离
s2=pow(1/2,10)*h; //第10反弹的高度
cout"the distance is:"s;
coutendl;
cout"ten distance is:"s2;
}