Python程序设计(第三版)课后题答案 第三章
编程练习题
- 1.编写一个程序,利用球体的半径作为输入,计算体积和表面积。以下是一些可能有用的公式:V=4/3πr^3
A=4πr^2
答案:
def main(): # 球体积表面积
r = float(input("请输入球体的半径:"))
area = 4 * math.pi * r * r # 计算表面积
volume = 4 / 3 * math.pi * r * r * r # 计算体积
print("球体的体积是:", round(volume, 2)) # 计算值保留两位小数
print("球体的表面积是:", round(area, 2))
main()
输出:
请输入球体的半径:5
球体的体积是: 523.6
球体的表面积是: 314.16
进程已结束,退出代码0
- 2.给定圆形披萨饼的直径和价格,编写一个程序,计算每平方英寸的成本。面积公式为A=πr^2.
答案:
def main():
d, p = eval(input("请输入披萨的直径(单位:英寸)和价格:"))
r = d / 2
area = math.pi * r * r # 计算面积
price = p * area # 计算价格
print("披萨的价格是:", round(price, 2)) # 计算值保留两位小数
main()
输出:
请输入披萨的直径(单位:英寸)和价格:10,3
披萨的价格是: 235.62
进程已结束,退出代码0
- 3.编写一个程序,该程序基于分子中的氢、碳和氧原子的数量计算碳水化合物的分子量(以克/摩尔计)。程序应提示用户输入氢原子的数量,碳原子的数量和氧原子的数量。然后程序基于这些单独的原子量打印所有原子的总组合分子量。
原子 | 质量(克/摩尔) |
---|---|
H | 1.00794 |
C | 12.0107 |
O | 15.9994 |
例如,水(H2O)的分子量为2*(1.00794)+15.9994=18.01528.
答案:
def main(): # 计算原子的组合分子量
h = int(input("请输入氢原子的数量:"))
o = int(input("请输入氧原子的数量:"))
c = int(input("请输入碳原子的数量:"))
z = h * 1.00794 + o * 15.9994 + c * 12.0107 # 计算总的分子量
print("总的分子量为:", z)
main()
输出:
请输入氢原子的数量:4
请输入氧原子的数量:2
请输入碳原子的数量:3
总的分子量为: 72.06266
进程已结束,退出代码0
- 4.编写一个程序,根据闪光和雷声之间的时间差来确定雷击的距离。声速约为1100英尺/秒,1英里为5280英尺。
答案:
def main(): # 根据时间计算距离
t = float(input("请输入看到闪光和听到雷声的时间差(单位:秒):"))
d = t * 1100 / 5280 # 计算距离,单位为英里
print("雷击的距离为:", d, "英里")
main()
输出:
请输入看到闪光和听到雷声的时间差(单位:秒):2
雷击的距离为: 0.4166666666666667 英里
进程已结束,退出代码0
- 5.咖啡店售卖咖啡,每磅10.50美元加上运费。每份订单的运费为每磅0.86美元+固定成本1.5美元。编写计算订单费用的程序。
答案:
def main(): # 咖啡订单费用
p = float(input("请输入购买咖啡的数量(单位:磅):"))
c = p * 10.5 + p * 0.86 + 1.5 # 计算每份订单的费用
print("订单费用为:", c, "美元")
main()
输出:
请输入购买咖啡的数量(单位:磅):3
订单费用为: 35.58 美元
进程已结束,退出代码0
- 6.使用坐标(x1,y1)和(x2,y2)指定平面中的两个点。编写一个程序,计算通过用户输入的两个(非垂直)点的直线的斜率。
斜率 = (y2-y1)/(x2-x1)
答案:
def main(): # 两点求斜率
x1, y1 = eval(input("请输入第一个点的坐标:"))
x2, y2 = eval(input("请输入第二个点的坐标:"))
k = (y2 - y1) / (x2 - x1) # 计算直线斜率
print("两点确定的直线斜率为:", k)
main()
输出:
请输入第一个点的坐标:5,4
请输入第二个点的坐标:1,3
两点确定的直线斜率为: 0.25
进程已结束,退出代码0
- 7.编写一个程序,接受两点(见上一个问题),并确定他们之间的距离。
距离 = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 距离 = \sqrt{(x2-x1)^2+(y2-y1)^2} 距离=(x2−x1)2+(y2−y1)2
答案:
def main(): # 两点求距离
x1, y1 = eval(input("请输入第一个点的坐标:"))
x2, y2 = eval(input("请输入第二个点的坐标:"))
d = math.sqrt((y2 - y1) ** 2 + (x2 - x1) ** 2) # 计算直线距离
print("两点之间的直线距离为:", d)
main()
输出:
请输入第一个点的坐标:1,1
请输入第二个点的坐标:2,2
两点之间的直线距离为: 1.4142135623730951
进程已结束,退出代码0
- 8.格里高利闰余是从1月1日到前一个新月的天数。此值用于确定复活节的日期。它由下列公式计算(使用整型算术):
C = year//100
epact = (8 + (C//4)- C + ((8C + 13) // 25) + 11(year % 19)) % 30
编写程序,提示用户输入4位数年份,然后输出闰余的值。
答案:
def main(): # 确定复活节日期
year = int(input("请输入4位数年份:"))
c = year // 100
expect = (8 + (c // 4) - c + ((8 * c + 13) // 25) + 11 * (year % 19)) % 30
print("计算闰余的值为:", expect)
main()
输出:
请输入4位数年份:2024
计算闰余的值为: 19
进程已结束,退出代码0
-
9.使用以下公式编写程序以计算三角形的面积,其三边的长度为a、b和c:
s = (a + b + c) / 2 A = s ( s − a ) ( s − b ) ( s − c ) A = \sqrt{s(s-a)(s-b)(s-c)} A=s(s−a)(s−b)(s−c)
答案:
def main(): # 计算三角形面积
a, b, c = eval(input("请输入三角形的三边长:"))
s = (a + b + c) / 2
area = math.sqrt(s * (s - a) * (s - b) * (s - c))
print("计算三角形面积值为:", area)
main()
输出:
请输入三角形的三边长:2,2,2
计算三角形面积值为: 1.7320508075688772
进程已结束,退出代码0
- 10.编写程序,确定梯子斜靠在房子上时,达到给定高度所需的长度。梯子的高度和角度作为输入。计算长度使用公式为:
length = height / sin angle
注意:角度必须以弧度表示。提示输入以度为单位的角度,并使用以下公式进行转换:
答案:
def main(): # 计算梯子靠墙需要的长度
height = float(input("请输入梯子的高度:"))
angle = float(input("请输入梯子的角度(单位:度):"))
radians = math.pi / 180 * angle
length = height / math.sin(radians)
print("计算所需的长度为:", length)
main()
输出:
请输入梯子的高度:10
请输入梯子的角度(单位:度):30
计算所需的长度为: 20.000000000000004
进程已结束,退出代码0
- 11.编写计算前n个自然数的和,其中n的值由用户提供。
答案:
def main(): # 计算前n个数的和
n = int(input("请输入n的值:"))
s = 0
for i in range(n + 1):
s = s + i
print("计算前", n, "个数的和为:", s)
main()
输出:
请输入n的值:2
计算前 2 个数的和为: 3
进程已结束,退出代码0
- 12.编程计算前n个自然数的立方和,其中n的值由用户提供。
答案:
def main(): # 计算前n个数的和
n = int(input("请输入n的值:"))
s = 0
for i in range(n + 1):
s = s + i**3
print("计算前", n, "个数的立方和为:", s)
main()
输出:
请输入n的值:100
计算前 100 个数的立方和为: 25502500
进程已结束,退出代码0
- 13.编程对用户输入的一系列数字求和。程序应该首先提示用户有多少数字需要求和,然后依次提示用户输入每一个数字,并在输入所有数字后打印出总和。(提示:在循环体中使用输入语句。)
答案:
def main(): # 计算求和
n = int(input("请输入要求和的数的个数:"))
m = 0
for i in range(n):
print("请输入第", i+1, "个数的值")
s = eval(input())
m = m + s
print("求和的结果为:", m)
main()
输出:
请输入要求和的数的个数:3
请输入第 1 个数的值
192.3
请输入第 2 个数的值
2013.2
请输入第 3 个数的值
10
求和的结果为: 2215.5
进程已结束,退出代码0
- 14.编程计算用户输入的一系列数字的平均值。与前面的问题一样,程序会首先询问用户有多少个数字。注意:平均值应该始终为float,即使用户输入的值都是int。
答案:
def main(): # 计算平均值
n = int(input("请输入要计算的数的个数:"))
m = 0
for i in range(n):
print("请输入第", i+1, "个数的值")
s = float(input())
m = m + s
print("计算的平均值的结果为:", m / n)
main()
输出:
请输入要计算的数的个数:5
请输入第 1 个数的值
1
请输入第 2 个数的值
56
请输入第 3 个数的值
11.236
请输入第 4 个数的值
562.0
请输入第 5 个数的值
0
计算的平均值的结果为: 126.0472
进程已结束,退出代码0
- 15.编写程序,通过对这个级数的项进行求和来求近似的π值:4/1 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 +…程序应该提示用户输入n,要求和的项数,然后输出该级数的前n个项的和。让你的程序从math.pi的值中减去近似值,看看它的准确性。
答案:
def main(): # 计算近似π值
n = int(input("请输入计算级数:"))
s = 0
for i in range(n):
if i % 2 == 0:
s = s + (2 * i + 1)
else:
s = s - (2 * i + 1)
f = math.pi - s/4
print("计算的近似值的结果为:", s/4)
print("近似值与π值的差值为:", f)
main()
输出:
请输入计算级数:6
计算的近似值的结果为: -1.5
近似值与π值的差值为: 4.641592653589793
进程已结束,退出代码0
由于运算的级数较少,逼近并不明显。
- 16.斐波那契数列是数字序列,其中每个连续数字是前两个数字的和。经典的斐波那契序列开始于1,1,2,3,5,8,13,……。编写计算第n个斐波那契数的程序,其中n是用户输入的值。例如,如果n=6 ,则结果为8.
答案:
def main(): # 计算斐波那契数列
n = int(input("请输入需要计算第几位斐波那契数:"))
a, b = 1, 1
for i in range(n - 1):
a, b = b, a + b
print("第", n, "位斐波那契数为", a)
main()
输出:
请输入需要计算第几位斐波那契数:6
第 6 位斐波那契数为 8
进程已结束,退出代码0
- 17.你已经看到math库包含了一个计算数字平方根的函数。在本练习中,你将编写自己的算法来计算平方根。解决这个问题的一种方法是使用猜测和检查。你首先猜测平方根可能是什么,然后看看你的猜测是多么的接近。你可以使用此信息进行另一个猜测,并继续猜测,直到找到平方根(或其近似)。一个特别好的猜测方法是使用牛顿法。假设X是我们希望的根,guess是我们当前猜测的答案。猜测可以通过使用计算下一个猜测来改进:
[guess + (X/guess)] / 2 编程实现牛顿方法。程序应提示用户找到值的平方根(X)和改进猜测的次数。从猜测值 x/2 开始,你的程序应该循环指定的次数,应用牛顿的方法,并报告猜测的最终值。你还应该从math.sprt(x) 的值中减去你的估计值,以显示它的接近程度。
答案:
def main(): # 猜测平方根的值
x = float(input("请输入要计算平方根的数:"))
n = int(input("请输入改进猜测的次数:"))
guess = x / 2
for i in range(n):
guess = (guess + x / guess) / 2
f = math.sqrt(x) - guess
print("计算的猜测值的结果为:", guess)
print("猜测值与实际值的差值为:", f)
main()
输出:
请输入要计算平方根的数:10
请输入改进猜测的次数:5
计算的猜测值的结果为: 3.162277660168379
猜测值与实际值的差值为: 4.440892098500626e-16
进程已结束,退出代码0
(如有错误,请留言指正!)