解题思路:
审清题干,养成习惯。
两个输入,两个输出,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分
43 人评分
写得怎么样,通俗易懂吧 #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; }
#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; } 如何
#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; }
#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]); }
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; } 我这是复制✔的
#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; }
#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; }
简单的a+b (C语言代码)浏览:583 |
数列排序 (C语言代码)浏览:858 |
C语言训练-自由落体问题 (C语言代码)浏览:1775 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:443 |
小明A+B (C语言代码)浏览:1316 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:1432 |
简单的a+b (C语言代码)浏览:878 |
【蟠桃记】 (C语言代码)浏览:1084 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:490 |
1025题解浏览:796 |