程序设计习题 第 6 章 重复用

 

6.1 自定义函数

1. 编写一个计算整数立方用的函数,并计算110每个数和其前一个相邻整数的立方差。

例如2,前一个相邻数为1,两者的立方差等于7

2. 编写函数,把华氏温度转换为摄氏温度,公式为C=(F-32)*5/9,并调用函数计算73℉对应的摄氏温度。

3. 编写函数,利用边长计算三角形面积

给出三条边,判断是否可以组成三角形,如果可以的话计算面积

提示:利用边长计算三角形面积公式为海伦公式

..p为周长的一半

4. 自定义函数计算一个空心圆柱体的体积,输入外径R、内径r和高h,计算出体积。

提示:圆柱体的体积..

5. 自定一个计算BMI的函数,输入身高,体重,输出BMI

6. 一个数如果恰好等于它的所有因子之和,这个数就称为"完数"。例如6=123

如何确定完数,欧几里发现,只要2n-1是一个素数,则2n-12n-1)一定一个完数(n>=2)。编写程序找出最小的5个完数。要求自定义函数判断2n-1是否是素数

7. 实现一个函数,可统计任一整数中某个数字出现的次数。例如-21252中,2出现了3次,则该函数应该返回3

8. 求方程ax^2 + bx + c = 0的根。其中参数a,b,c是从main函数输入的。

6.2 递归

1. 编写一个递归函数,返回整数xy的最大公约数

2. 猴子摘了一堆桃子,第一天吃了一半,觉得不过隐又吃了一个;第二天吃了剩下的一半零一个;以后每天如些,到第十天,猴子一看只剩下一个了。问最初有多少个桃子

3. 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

4. 用递归思想倒序输出一个正整数。例如给出正整数 n=12345,希望以各位数的逆序形式输出,即输出54321

5. 汉诺塔问题: 给定三根柱子,记为a, b, c,其中a柱子上有n个盘子,且上面的盘子一定比下面的盘子小。问:将a柱上的盘子经由b柱移动到c柱最少需要多少次?

移动时应注意:

一次只能移动一个盘子

②大的盘子不能压在小盘子上

..

6.3 可复用脚本

1. 将利用边长计算三角形面积的方法编辑为可复用脚本,并调用

2. BMI的计算方法编辑为可复用脚本,并调用

参考答案:

6.1 自定义函数

1.


A

B

1

func

return A1*A1*A1

2

=10.(func(A1,~)-func(A1,~[-1]))


2.


A

B

1

func

return (A1-32)*5/9

2

=func(A1,73)


3.


A

B

C

D

1

func




2


if A1 + B1 > C1 && A1 + C1 > B1 && B1 + C1 > A1

=A1+B1+C1

=C2/2

3



=sqrt(D2*(D2-A1)*(D2-B1)*(D2-C1))


4



return C3


5


else

return "This side length group does not form a triangle"


4.


A

B

C

1

func



2


return pi()*A1*A1*C1-pi()*B1*B1*C1


5.


A

B

1

func


2


return B1/(A1*A1)

6.


A

B

C

D

E

1

0

2




2

for A1<5

if func(A5,B1)==1

>output(int(power(2,B1-1)*(power(2,B1)-1)))

>A1+=1


3


>B1+=1




4






5

func

=power(2,A5)-1




6


if A5==2

return 1



7


else

for 2,sqrt(B5)

if B5%C7==0

return 0

8





break C7

9



return 1



7.


A

B

C

D

1

func


0


2


if A1<0

>A1=-A1


3


if A1==0 && B1==0

return 1


4


for A1

if A1%10==B1

>C1+=1

5



>A1\=10


6


return C1



7

=func(A1,-21252,2)




8.


A

B

C

D

1

func




2


if A1==0

return -C1/B1


3


else

=B1*B1-4*A1*C1


4



if C3 >0

return [(-B1+sqrt(C3))/(2*A1),(-B1-sqrt(C3))/(2*A1)]

5



else if C3==0

return -B1/(2*A1)

6



else

return "There are no real roots"

7

=func(A1,3,8,5)




6.2 递归

1.


A

B

C

1

func



2


if B1==0

return A1

3


else

return func(A1,B1,A1%B1)

4

=func(A1,54,63)



2.


A

B

C

1

func



2


if A1==1

return 1

3


return (func(A1,A1-1)+1)*2


4

=func(A1,10)



3.


A

B

C

1

func



2


if A1==1

return 1

3


elseif A1==2

return 2

4


else

return func(A1,A1-1)+func(A1,A1-2)

5

=func(A1,9)



4.


A

B

C

1

func

if A1<10

return output(A1%10)

2


=output(A1%10)


3


return func(A1, A1\10),B2


4

=func(A1,12345)



递归思想:首先输出这个数的个位数,然后再输出前面数字的个位数,直到之前没数字。

5.


A

B

C

1

func

if A1==1

return 1

2


return 2*func(A1,A1-1)+1


3

=func(A1,10)