解题思路:

审清题干,养成习惯。

两个输入,两个输出,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 条评论

uq_38780404865 3月前 回复TA
写得怎么样,通俗易懂吧

#include<stdio.h>

float M;  int N;

float h(int x)
{
	if (x == 1)
		return (1/2)*M;
	if (x > 1)
		return (1 / 2 )* h(x - 1);
}


int main()
{

	scanf_s("%f %d", &M,&N);
	double S = M;
	if (N == 1)
	{
		
		printf("%2.lf %2.lf", S, h(1));
	}
	else
	{
		for (int i = 2; i <= N; i++)
		{
			S += S + h(i - 1);
		}
		printf("%2.lf %2.lf", S, h(N));
	}

	return 0;
}
肥牛 3月前 回复TA
误打误撞做出来的,逻辑不对。
crj 1年前 回复TA
#include <stdio.h>
int main()
{
	
	float m = 0,d=0,n=0;
	scanf("%f %f",&m, &n);
	for (int i = 0; i < n; i++)
	{
		float c = m*1.5;
		m *= 0.5;
		d += c;
	}
	printf("%.2f %.2f", m, d - m);
	return 0;
}
如何
猪霸不爱猪 1年前 回复TA
#include<stdio.h>
#include<math.h>
int main()
{
    int M,N;
    scanf("%d%d",&M,&N);
    double s=0,sum=0,sum1=M/pow(2,N);
    printf("%0.2lf ",sum1);
    for(int i=1;i<=N;i++){
        if(i==1){
            sum+=M;
        }
        else{
            s=M/pow(2,i-1);
            sum+=s*2;
        }
    }
    printf("%0.2lf",sum);
    return 0;
}
冚旾虁矲 1年前 回复TA
#include<stdio.h>
int main() {
	float a[3] = { 0,0,0},m,n;
	scanf_s("%f%f", &m,&n);
	for (; n != 0; n--) {
		a[1] += m*2;
		if (a[2] == 0)a[2] = 1,a[1]-=m;
		a[0] = m / 2;
		m = a[0];
	}
	printf("%.2f %.2f", a[0],a[1]);
}
kudos 2年前 回复TA
int main() {

	double M, N;
	double S = 0.0;
	int i;
	scanf_s("%lf%lf", & M, &N);
	for ( i = 1; i <= N; i++)
	{
		S += M;
		M = M / 2.0;
		S += M;
	}
	printf("%.2lf  %.2lf",M, S-M);
	return 0;
}
我这是复制✔的
水星记111 2年前 回复TA
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main()
{
    int m,n;
    double x,y;
   scanf("%d%d",&m,&n);
   x=m/(pow(2,n));
   y=m*(1-pow(0.5,n-1));
   printf("%.2lf %.2lf",x,2*y+m);
   return 0;
}
oula 2年前 回复TA
#include<stdio.h>


int main(void)
{
    int Times;
    double Length;
    scanf("%lf%d",&Length ,&Times);
    
    double TotalLength;
    double SingLength;

    TotalLength += Length;

    for(int i = 1;i<Times;i++)
    {
        TotalLength += Length;
        Length /= 2.0;
    }
    SingLength = Length / 2;

    printf("%.2lf %.2lf\n" ,SingLength ,TotalLength);

    return 0;
}
stolen 2年前 回复TA
#include<stdio.h>
#include<math.h>
int main(){
	int i;
	
	double sum=0,M,N;
	scanf("%lf %lf",&M,&N);
	for(i=0;i<N;i++){ // 1000米 5次落地 
		sum = sum + (M+M/2);
		M=M/2;
	} // 一半一半的加; 每次落地后返回原高度的一半

	printf("%.2f ",M);
	printf("%.2f",sum-M);
	return 0;
}
xiebosshh 2年前 回复TA
#include<stdio.h>
#include<math.h>
int main()
{
    int n,i;
    double m;
    double sum=m;
    scanf("%lf %d",&m,&n);
    double k=m;
    for(i=1;i<n;i++){

        m=pow(0.5,i)*k;
        sum+=2*m;
    }

    printf("%.2lf %.2lf",m/2,sum+k);
    return 0;
}
我这个是对的