本篇将通过 Python 和 Cangjie 双语实现数列求和的计算。通过这个题目,学生将学会如何通过公式法和循环法求解等差数列与等比数列的和。
sequence
关键词
- 小学奥数
- Python + Cangjie
- 数列求和
一、题目描述
编写一个程序,计算等差数列和等比数列的和。用户输入首项、公差/公比以及项数,程序将分别输出等差数列和等比数列的和。
- 等差数列和公式:
S = n * (a1 + an) / 2
其中,a1
是首项,an = a1 + (n - 1) * d
是末项,n
为项数。 - 等比数列和公式:
S = a1 * (1 - r^n) / (1 - r)
(当r ≠ 1
)
二、Python 实现
# 接收用户输入
a1 = float(input("请输入首项 a1: ")) # 输入首项
d = float(input("请输入公差 d: ")) # 输入等差数列的公差
r = float(input("请输入公比 r: ")) # 输入等比数列的公比
n = int(input("请输入项数 n: ")) # 输入项数
# 计算等差数列的和
an = a1 + (n - 1) * d # 根据公式计算等差数列的末项
arithmetic_sum = n * (a1 + an) / 2 # 等差数列求和公式
# 计算等比数列的和
if r == 1:
geometric_sum = n * a1 # 当公比为1时的求和公式
else:
geometric_sum = a1 * (1 - r ** n) / (1 - r) # 一般情况下的等比数列求和
# 输出结果,保留两位小数
print(f"等差数列的和: {arithmetic_sum:.2f}")
print(f"等比数列的和: {geometric_sum:.2f}")
三、Cangjie 实现
package cjcDemo
import std.convert.* // 导入数据转换模块
import std.console.* // 导入控制台输入输出模块
import std.format.* // 导入格式化模块
import std.math.* // 导入数学模块
// 定义函数接收并转换用户输入为 Int64
func inputInt(info: String): Int64 {
print(info) // 输出提示信息
let number: Int64 = Int64.parse(Console.stdIn.readln().getOrThrow()) // 读取并转换输入
return number
}
// 定义函数接收并转换用户输入为 Float64
func inputFloat(info: String): Float64 {
print(info) // 输出提示信息
let number: Float64 = Float64.parse(Console.stdIn.readln().getOrThrow()) // 读取并转换输入
return number
}
main(): Int64 {
// 接收用户输入的首项、公差、公比和项数
let a1 = inputFloat("请输入首项 a1: ")
let d = inputFloat("请输入公差 d: ")
let r = inputFloat("请输入公比 r: ")
let n = inputInt("请输入项数 n: ")
// 计算等差数列的末项和总和
let an = a1 + Float64(n - 1) * d
let arithmetic_sum = Float64(n) * (a1 + an) / 2.0
// 根据公比是否为1计算等比数列的和
let geometric_sum = if (r == 1.0) {
Float64(n) * a1
} else {
a1 * (1.0 - pow(r, n)) / (1.0 - r)
}
// 输出结果,保留两位小数
println("等差数列的和: ${arithmetic_sum.format("0.2")}")
println("等比数列的和: ${geometric_sum.format("0.2")}")
return 0
}
四、图形展示(扩展部分)
以下代码使用 Python 生成数列求和的可视化图形。本部分是进阶扩展内容,当前阶段不要求理解:
from PIL import Image, ImageDraw, ImageFont
# 创建画布
img = Image.new('RGB', (600, 300), color='white')
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()
# 绘制数列求和的结果
draw.text((10, 10), "等差数列的和: 25.00", fill="black", font=font)
draw.text((10, 50), "等比数列的和: 121.00", fill="black", font=font)
# 保存图像
img_path = "sequence_sum.png"
img.save(img_path)
print(f"图形已保存为 {img_path}")
生成的图像如下:
sequence_sum.png
五、示例执行
示例 1:
输入:
首项 a1: 1
公差 d: 2
公比 r: 3
项数 n: 5
输出:
等差数列的和: 25.00
等比数列的和: 121.00
示例 2:
输入:
首项 a1: 2
公差 d: 0
公比 r: 1
项数 n: 4
输出:
等差数列的和: 8.00
等比数列的和: 8.00
六、小结
通过这道数列求和的题目,学生学会了等差数列和等比数列的求和公式,并掌握了如何通过编程实现数列的计算。