解题思路:

审清题干,养成习惯。

两个输入,两个输出,M表示初始下落高度,N表示触地次数。要求输出第N次触地时反弹的高度及所经过的路程长度,都保留两位小数,目的很明确。

首先来看反弹高度,题目描述:每次落地后返回原高度的一半。即:第N次触地反弹高度为其触地前高度的一半,也就是说第N次反弹高度为第N-1次反弹高度的一半,可以表示为high(N)=high(N-1)*1/2,当N=1时,high(N-1)=M。由此可以得出high(N)=M*(1/2)N

然后我们来看第二个输出:第N次触地时所经过的路程长度。第一次触地时所经过的路程长度为M,第二次触地时所经过的路程长度为M+high(1)*2,第三次触地时所经过的路程长度为M+high(1)*2+high(2)*2...如此类推,第N次触地时所经过的路径长度即为:M+high(1)*2+high(2)*2+...+high(N-1)*2。利用循环即可求出最后结果。

求出两个输出之后,不要忘记题干的输出要求:保留两位小数。用printf函数的格式控制就可以了。

注意事项:
(1)注意定义变量时的变量类型;

(2)注意输出时保留两位小数的要求;

(3)注意题目要求的是第N次落地时所经过的路径长度,而不是反弹后所经过的路径长度。

参考代码:

# include<stdio.h>
# include<math.h>

void ReBack(double M)
{
	double back,sum=M;
	int i,N;
	scanf("%d",&N);
	back=M*pow(0.5,N);
	for(i=1;i<N;i++)
		sum+=M*pow(0.5,i-1);
	printf("%.2lf %.2lf",back,sum);
}

int main()
{
	double M;
	scanf("%lf",&M);
	ReBack(M);

	return 0;
}

如有裨益,吾之幸也。祝大家编程进步。


点赞(0)
 

0.0分

29 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 23 条评论

花序丶 4年前 回复TA
@花序丶 谢谢你, 我弄懂了
烟火尘霄 4年前 回复TA
@花序丶 sum的初始值为什么是-1000呢?你自己带入几组数值就可以发现这是不对的;还有sum=sum*2+1000这里,说实话没明白这里是什么意思;而且while循环里面对sum的处理也不对,自己带入几组数值就可以发现了。
花序丶 4年前 回复TA
#include<stdio.h>

int main(){

    double M;
    int N ,i,j;
    double sum=-1000;
    scanf("%lf %d",&M,&N);
    i = M;
    j = N;
    while (N>0)
    { 
        sum += M;
        M = M / 2;
        N--;
       
    }
    sum = sum * 2 + 1000;
    printf("%.2f %.2f",  M, sum);
   
    return 0;
}
不知道有什么问题,帮忙看一下