【时时三省】(C语言基础)循环结构程序设计习题2
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
习题1:
2/1,2/3,3/5,5/8,21/13,...
求出这个数列的前20项之和。
解题思路:
数列分析
观察数列,可以发现其分子分母分别呈现出斐波那契数列的规律。
斐波那契数列的特点是从第三项起,每一项都等于前两项之和 ,即F(n)=F(n - 1)+F(n - 2)(n\geq 3) 。在该数列中:
- 分子:从第三项起,后一项分子是前两项分子之和,如2 + 3 = 5,3 + 5 = 8 等。
- 分母:同样从第三项起,后一项分母是前两项分母之和,如1 + 2 = 3,2 + 3 = 5 等。
求和思路
- 初始化:设分子为a = 2,分母为b = 1,总和 sum 初始化为0 。
- 循环计算:通过循环来依次计算每一项的值并累加。在每次循环中:
- 先将当前项\frac{a}{b}累加到总和 sum 中。
- 然后更新分子分母的值,为下一次循环做准备。使用一个临时变量 temp 来暂存当前分子 a 的值,更新时让分子 a 等于原来分子分母之和(即 a + b ),分母 b 等于原来分子的值(即 temp ) 。
- 循环次数:因为要求前20项之和,所以循环次数设为20次,循环结束后, sum 中存储的就是该数列前20项的和。
编写程序:
运行结果:
32.660261
习题2:
一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。
解题思路:
分析球的运动过程
- 第一次下落:球从100m高度自由落下,这是第一次经过的距离,即100m 。
- 后续反弹与下落:从第一次反弹开始,每次球反弹后再落下经过的距离是反弹高度的2倍(弹起一次,落下一次 )。并且每次反弹高度是前一次高度的一半。
计算总经过距离
- 初始化:设球初始高度 h = 100 ,总经过距离 total = 100 。这里 total 先把第一次下落的100m 算进去。
- 循环计算:通过循环模拟从第二次落地到第十次落地的过程。在每次循环中:
- 先计算当前的反弹高度,即 h /= 2 ,将当前高度变为原来的一半。
- 然后把本次反弹后再落下经过的距离(2 * h )累加到总距离 total 中 。循环次数为9次(因为第一次下落单独算过了 )。
- 计算第10次反弹高度:循环结束后,再执行一次 h /= 2 ,得到第10次反弹的高度。此时 total 就是第10次落地时总共经过的距离, h 就是第10次反弹的高度。
编写程序:
运行结果:
习题3
猴子吃桃问题,猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第2天早上又此剩下的桃子吃括一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上相再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
解题思路:
从第10天剩1个桃子倒推,每天的桃子数是前一天剩下桃子数加1后的2倍,通过循环逆向计算第一天的桃子数。
编写程序:
运行结果:
1534