解题思路:
审清题干,养成习惯。
两个输入,两个输出,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分
39 人评分
#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; }
#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; } 不知道为什么显示答案运行错误
烩哝个番薯 2022-02-17 17:48:12 |
#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; }
烩哝个番薯 2022-02-17 17:48:33 |
我的也是这样子,错了
烩哝个番薯 2022-02-17 17:55:24 |
#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; }
#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代替就对了
烟火尘霄 2021-03-02 21:22:42 |
很不错哦
#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; } 不知道有什么问题,帮忙看一下
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:574 |
2004年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:1341 |
幸运数 (C++代码)浏览:1264 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:545 |
字符串比较 (C语言代码)浏览:685 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:489 |
C语言训练-字符串正反连接 (C语言代码)浏览:632 |
WU-C语言程序设计教程(第三版)课后习题12.3 (C++代码)浏览:862 |
众数问题 (C语言代码)浏览:630 |
整数分类问题 为什么输出总是数字8啊浏览:442 |
amazarashi 2022-03-26 17:25:34 |
我伞兵了,不是加1000。