解题思路:
审清题干,养成习惯。
两个输入,两个输出,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分
29 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> int main(void) { int m,n,i; scanf("%d %d",&m,&n); float sum=0,h=m; for(i=0;i<n;i++) { h = h / 2.0; sum+=2*h; } sum=sum-2*h+1000; printf("%.2f", h); printf(" "); printf("%.2f\n",sum); return 0; } 求大佬解释,哪里错了。各位大佬可以帮我看看哪里有问题吗 #include<stdio.h> #include<math.h> int main (void){ int N,i; //n次落地 double M,H,H1=0; //M米的高度自由下落 S为总长 scanf("%lf %d",&M,&N); float S=M; for(i=1;i<=N;i++) { H=M*pow(0.5,i); S=S+H+H1; H1=H; } printf("%0.2lf %0.2lf",H,S); return 0; }@qiaot #include<stdio.h> int main() { int i=0; double a,n,m,b=0.0,h; scanf("%lf %lf",&m,&n); for(i;i<n;i++) { a=m/2; h=h+(m+m/2); m=m/2; } printf("%.2f %.2f",a,h-m); return 0; }@qiaot #include<stdio.h> int main() { int n,i=1; double a,m,b=0.0,h; scanf("%f ",&m); scanf("%d",&n); for(i;i<n;i++) { m=m/2; a=m/2; b=b+a; } h=b+m; printf("%.2f %.2f",a,h); return 0; }#include <stdio.h> int main() { int N,i; double sum1,sum2,M; scanf("%lf%d",&M,&N); for(i=1;i<=N;i++) { sum1=1.0/2*M; sum2=sum1+M+sum2; M=sum1; } printf("%.2lf %.2lf",sum1,sum2-sum1); return 0; } 不知道为什么显示答案运行错误#include <stdio.h> int main() { double M,N,H=0,sum=0; scanf("%lf %lf",&M,&N); for(int i=0;i<N;i++){ H=M/2; sum=sum+(M+M/2); M=M/2; } printf("%.2f %.2f",H,sum-M); return 0; }#include<stdio.h> int main(){ double M,i; int N ; double sum; scanf("%lf %d",&M,&N); sum = -M; i = M; while (N>0) { sum += M; M = M / 2; N--; } sum = sum * 2 + i; printf("%.2f %.2f", M, sum); return 0; } 我之前那个写-1000是因为题目所以写的-1000,就是这个地方错了,用输入的M代替就对了