跳转至

专项练习 — 程序设计题

练习说明

  • 共 8 道程序设计题,难度与模拟考试相当
  • 建议每题用时 10~15 分钟
  • 注意边界条件和输入验证

💻 程序设计题

第1题:回文数判断与生成

题目: 编写程序,判断一个整数是否为回文数,并找出指定范围内的所有回文数。

要求: - 编写函数 is_palindrome(n),判断整数 n 是否为回文数(正读反读相同) - 编写函数 find_palindromes(start, end),找出 [start, end] 范围内的所有回文数 - 负数不是回文数;个位数是回文数 - 不将数字转为字符串,使用数值方法实现

示例:

Text Only
1
2
3
4
is_palindrome(121) -> True
is_palindrome(-121) -> False
is_palindrome(12321) -> True
find_palindromes(100, 200) -> [101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

第2题:素数筛选与统计

题目: 编写程序,使用筛选法找出指定范围内的所有素数,并统计素数个数及占比。

要求: - 编写函数 is_prime(n),判断 n 是否为素数 - 编写函数 prime_sieve(limit),使用埃拉托斯特尼筛法找出 [2, limit] 内所有素数 - 统计素数个数及占所有数字的比例 - 找出指定范围内最大的素数

示例:

Text Only
1
2
3
4
5
is_prime(7) -> True
is_prime(1) -> False
prime_sieve(30) -> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
范围[2,30]内素数个数: 10, 占比: 33.3%
最大素数: 29

第3题:数字拆分与重组

题目: 编写程序,对输入的正整数进行数字拆分、排序和重组操作。

要求: - 编写函数 split_digits(n),将整数拆分为各位数字列表 - 编写函数 sort_digits(n),将各位数字升序排列并组成新的整数 - 编写函数 reverse_number(n),将整数各位数字反转 - 编写函数 max_min_diff(n),将数字重排为最大数和最小数,计算差值

示例:

Text Only
1
2
3
4
split_digits(52341) -> [5, 2, 3, 4, 1]
sort_digits(52341) -> 12345
reverse_number(52341) -> 14325
max_min_diff(52341) -> 54321 - 12345 = 41976

第4题:字符串加密与解密

题目: 编写程序,实现两种字符串加密方式,并支持对应的解密。

要求: - 方式一:字母替换加密。将每个字母替换为字母表中后第 k 个字母(凯撒密码,k 由用户输入) - 方式二:反转加密。先将字符串反转,再对每个字符的 ASCII 码加 1 - 分别实现两种加密和解密函数 - 非字母字符保持不变(方式一);数字和标点也参与 ASCII 加 1(方式二)

示例:

Text Only
1
2
3
4
凯撒加密: encrypt_caesar("Hello", 3) -> "Khoor"
凯撒解密: decrypt_caesar("Khoor", 3) -> "Hello"
反转加密: encrypt_reverse("Ab1") -> "2cB"  (反转得"1bA",ASCII各+1得"2cB")
反转解密: decrypt_reverse("2cB") -> "Ab1"

第5题:列表数据筛选与统计

题目: 编写程序,对一组学生成绩数据进行筛选、排序和统计分析。

要求: - 给定学生成绩列表:[("张三", 85), ("李四", 92), ("王五", 78), ("赵六", 95), ("钱七", 60), ("孙八", 88), ("周九", 45), ("吴十", 73)] - 找出成绩最高和最低的学生 - 筛选出成绩及格(>=60)的学生,按成绩降序排列 - 计算平均分、及格率 - 按成绩分等级:优秀(>=90)、良好(>=80)、中等(>=70)、及格(>=60)、不及格(<60),统计各等级人数

示例:

Text Only
1
2
3
4
5
6
最高分: 赵六 95
最低分: 周九 45
及格学生(降序): [('赵六', 95), ('李四', 92), ('孙八', 88), ('张三', 85), ('王五', 78), ('吴十', 73), ('钱七', 60)]
平均分: 77.0
及格率: 87.5%
等级统计: 优秀2人, 良好2人, 中等1人, 及格2人, 不及格1人

第6题:斐波那契数列与最大公约数

题目: 编写程序,实现斐波那契数列生成和最大公约数/最小公倍数计算。

要求: - 编写函数 fibonacci(n),返回前 n 个斐波那契数列表(F(1)=1, F(2)=1) - 编写函数 gcd(a, b),使用辗转相除法求最大公约数 - 编写函数 lcm(a, b),利用 GCD 求最小公倍数 - 找出斐波那契数列前 20 项中相邻两项的最大公约数

示例:

Text Only
1
2
3
4
fibonacci(10) -> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
gcd(48, 36) -> 12
lcm(48, 36) -> 144
斐波那契前10项相邻GCD: gcd(1,1)=1, gcd(1,2)=1, gcd(2,3)=1, gcd(3,5)=1, ...

第7题:CSV 文件读取与成绩排名

题目: 编写程序,从 CSV 文件中读取学生成绩,计算总分和平均分,按总分排名后写入新文件。

要求: - 读取文件 scores.csv,格式为:姓名,语文,数学,英语(首行为表头) - 计算每位学生的总分和平均分(保留1位小数) - 按总分从高到低排序,添加排名列 - 计算每门课程的平均分 - 将排名结果和课程统计写入 rank.csv

输入文件 scores.csv 示例:

Text Only
1
2
3
4
5
姓名,语文,数学,英语
张三,85,92,78
李四,90,88,95
王五,72,80,76
赵六,88,95,82

输出文件 rank.csv 示例:

Text Only
1
2
3
4
5
6
7
排名,姓名,语文,数学,英语,总分,平均分
1,李四,90,88,95,273,91.0
2,赵六,88,95,82,265,88.3
3,张三,85,92,78,255,85.0
4,王五,72,80,76,228,76.0

课程平均分: 语文83.8, 数学88.8, 英语82.8

第8题:图案打印

题目: 编写程序,根据输入的行数 n,打印多种对称图案。

要求: - 编写函数 print_triangle(n),打印 n 行直角三角形 - 编写函数 print_diamond(n),打印 2n-1 行菱形(最宽处 2n-1 个字符) - 编写函数 print_hollow_diamond(n),打印空心菱形 - 所有图案使用 * 字符,其余位置用空格

示例:

Text Only
print_triangle(4):
*
**
***
****

print_diamond(3):
  *
 ***
*****
 ***
  *

print_hollow_diamond(3):
  *
 * *
*   *
 * *
  *