25级数学应用三班第一次实验
2025010089张静文
判断三角形
# 输入三个数
a, b, c = map(float, input("输入三个数:").split())
# 排序,让 c 最大
a, b, c = sorted([a, b, c])
# 判断能不能构成三角形
if a + b <= c:
print("不能构成三角形")
else:
a2 = a**2
b2 = b**2
c2 = c**2
if a2 + b2 == c2:
print("直角三角形")
elif a2 + b2 > c2:
print("锐角三角形")
else:
print("钝角三角形")

2025010090殷慧湘
均方差
def mean(data):
return sum(data) / len(data)
#均方差 =标准差
def mean_square_error(data):
mu = mean(data)
variance = sum((x - mu) ** 2 for x in data) / len(data)
return variance ** 0.5
#测试
data = [2,3,4,6,8,8,9,10,11,11]
#输出
print("数据:", data)
print("均值:", mean(data))
print("均方差(标准差):",mean_square_error(data))

2025010091张译心
垂足
def get_foot(point, line):
"""
计算点到直线的垂足坐标
:param point: 目标点 (x0, y0)
:param line: 直线的两个端点 (x1, y1, x2, y2)
:return: 垂足坐标 (x, y)
"""
x0, y0 = point
x1, y1, x2, y2 = line
dx = x2 - x1
dy = y2 - y1
# 防止直线两点重合导致除零错误
if dx * dx + dy * dy < 1e-16:
return (x1, y1)
# 计算投影参数 u
u = (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy)
# 计算垂足坐标
x = x1 + u * dx
y = y1 + u * dy
return (x, y)
# --- 下面是调用部分 ---
if __name__ == "__main__":
print("--- 点到直线垂足计算程序 ---")
# 1. 获取用户输入的点坐标
# 使用 split() 分割输入的字符串,并用 map(float, ...) 转换为数字
point_input = input("请输入点的坐标 (格式: x y),例如 3 4: ")
x0, y0 = map(float, point_input.split())
my_point = (x0, y0)
# 2. 获取用户输入的直线坐标
line_input = input("请输入直线的两个端点坐标 (格式: x1 y1 x2 y2),例如 0 0 5 0: ")
x1, y1, x2, y2 = map(float, line_input.split())
my_line = (x1, y1, x2, y2)
# 3. 调用函数并传入数字
result = get_foot(my_point, my_line)
# 4. 打印结果
print(f"\n输入的点是: {my_point}")
print(f"输入的直线是: 从 {my_line[0:2]} 到 {my_line[2:4]}")
print(f"计算得到的垂足坐标是: {result}")

2025010092朱翔鸽
三角形内接圆
import math
#输入三个点坐标
x1, y1 = map(float, input("请输入点A坐标 x1 y1:").split())
x2, y2 = map(float, input("请输入点B坐标 x2 y2:").split())
x3, y3 = map(float, input("请输入点C坐标 x3 y3:").split())
# 计算三边长
a = math.hypot(x3 - x2, y3 - y2) # BC
b = math.hypot(x3 - x1, y3 - y1) # AC
c = math.hypot(x2 - x1, y2 - y1) # AB
# 半周长
p = (a + b + c) / 2
# 面积(海伦公式)
S = math.sqrt(p * (p - a) * (p - b) * (p - c))
# 内切圆半径
r = S / p
# 内切圆周长、面积
circle_c = 2 * math.pi * r
circle_s = math.pi * r ** 2
# 输出
print("=" * 30)
print(f"三边长:a={a:.2f} b={b:.2f} c={c:.2f}")
print(f"内切圆半径 r = {r:.4f}")
print(f"内切圆周长 = {circle_c:.4f}")
print(f"内切圆面积 = {circle_s:.4f}")
print("=" * 30)

2025010093惠盾
查找1-100之间素数
# 判断一个数是否是素数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 找出 0~100 之间的素数
primes = [n for n in range(101) if is_prime(n)]
# 输出结果
print("0-100 内的素数:")
print(primes)

2025010095徐雨轩
闰年的判断
def is_leap_year(year):
# 闰年规则:
# 1. 能被4整除但不能被100整除,是闰年
# 2. 能被400整除,是闰年
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
return True
else:
return False
# 测试示例
year = int(input("请输入年份:"))
if is_leap_year(year):
print(f"{year} 年是闰年")
else:
print(f"{year} 年不是闰年")

2025010097马浩
排序算法
nums = [6, 8, 10, 2, 1] nums.sort() # 直接修改原列表 print(nums) # 输出: [1, 2, 6,8 , 10] # 或者不修改原列表,返回新列表 nums = [6, 8, 10, 2, 1] sorted_nums = sorted(nums) print(sorted_nums) # 输出: [1, 2, 6, 8, 10]

2025010098韩晓媛
三角形外接圆
import math
# 输入点
def input_point(name):
while True:
try:
s = input(f"请输入点 {name} 坐标 x y(用空格分隔):")
x, y = map(float, s.split())
return (x, y)
except:
print("输入格式不对,请重新输入")
A = input_point("A")
B = input_point("B")
C = input_point("C")
x1, y1 = A
x2, y2 = B
x3, y3 = C
# 求外接圆圆心和半径
a1 = 2 * (x2 - x1)
b1 = 2 * (y2 - y1)
c1 = x2**2 + y2**2 - x1**2 - y1**2
a2 = 2 * (x3 - x2)
b2 = 2 * (y3 - y2)
c2 = x3**2 + y3**2 - x2**2 - y2**2
det = a1 * b2 - a2 * b1
if abs(det) < 1e-10:
print("三点共线,不能构成三角形")
else:
ox = (c1 * b2 - c2 * b1) / det
oy = (a1 * c2 - a2 * c1) / det
r = math.hypot(ox - x1, oy - y1)
print("\n外接圆圆心:({:.3f}, {:.3f})".format(ox, oy))
print("外接圆半径:{:.3f}".format(r))

2025010100霍延萌
姓氏排名前三
from collections import Counter #全班姓名列表
students = [ "惠盾", "谢润泽", "徐雨轩", "刘加鑫", "马浩", "张嘉诚", "袁泉", "黄俊", "许乐乐", "张中光","钟海洋", "叱干育", "黄帅豪", "王义刚", "刘司拓", "田昌盛", "千阳坤", "董晨鑫", "刘杨龙", "任鸿杰", "张静文", "殷慧湘", "张译心", "朱翔鸽", "韩晓媛", "霍延萌", "沈玉婷", "孙瑞妍", "王怡萱", "石蕊鑫", "殷佳锐", "康静茹", "李欣栎", "陈影", "淡郑雪", "郑舒萍", "胡鑫", "刘芮孜", "贾姝慧", "董玥卓", "李佳雨",]
surnames = [name[0] for name in students] #提取姓氏
surname_count = Counter(surnames) #统计姓氏出现次数
top3_surnames = surname_count.most_common(3) #按出现次数降序排序,取前三
print ("2025级数应三班姓氏排名前三:") #输出结果
for i, (surname,count ) in enumerate(top3_surnames, 1):
print(f"{i}名: {surname}姓,共{count}人")

2025010101袁泉
阶乘
n = int(input("请输入一个整数:"))
result = 1
for i in range(1, n + 1):
result *= i
print(f"{n}! = {result}")

2025010102沈玉婷
因式分解(输出因式)
def factor(n):
res = {}
# 分解 2
while n % 2 == 0:
res[2] = res.get(2, 0) + 1
n = n // 2
# 分解奇数
i = 3
while i * i <= n:
while n % i == 0:
res[i] = res.get(i, 0) + 1
n = n // i
i += 2
if n > 1:
res[n] = 1
return res
def show_factor(num):
if num < 2:
return "无法分解"
fac = factor(num)
parts = []
for p in sorted(fac):
cnt = fac[p]
if cnt == 1:
parts.append(str(p))
else:
parts.append(f"{p}^{cnt}")
return " × ".join(parts)
# 主程序
if __name__ == "__main__":
n = int(input("请输入要分解的整数:"))
print(f"{n} = {show_factor(n)}")

2025010103黄俊
找出101到200内的素数
# 找出 101~200 之间的素数
import math
primes = []
for num in range(101, 201):
is_prime = True
# 只需要检查到平方根即可
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
print("101~200之间的素数有:")
print(primes)

2025010104许乐乐
将军饮马
import math
# 1. 设定坐标(你可以随便改)
Ax, Ay = 1, 4 # 将军起点
Bx, By = 5, 1 # 军营终点
min_dist = float('inf') # 最短距离
best_x = 0 # 最好的饮马点 x
# 2. 在河上从 x=0 到 x=6,每隔 0.01 试一个点
for x in range(0, 601):
px = x / 100 # 饮马点 P(px, 0)
py = 0
# 算 AP 长度
ap = math.sqrt((Ax - px)**2 + (Ay - py)**2)
# 算 PB 长度
pb = math.sqrt((Bx - px)**2 + (By - py)**2)
total = ap + pb
# 记录最短的
if total < min_dist:
min_dist = total
best_x = px
# 3. 输出结果
print("最优饮马点 P:(" + str(round(best_x,2)) + ", 0)")
print("最短路径长度:" + str(round(min_dist,2)))

2025010107孙瑞妍
计算圆外一点到圆的切线夹角
import math
x0, y0 = 4, 0 # 圆外点 P
a, b = 0, 0 # 圆心 C
r = 2 # 半径
d = math.sqrt((x0 - a)**2 + (y0 - b)**2)
theta = math.asin(r / d)
angle_rad = 2 * theta
angle_deg = math.degrees(angle_rad)
print(f"两条切线的夹角 = {angle_deg:.2f} 度")

2025010112 王怡萱
行列式求秩
def matrix_rank(mat, tol=1e-9):
if not mat:
return 0
mat = [row[:] for row in mat]
rows = len(mat)
cols = len(mat[0]) if rows > 0 else 0
rank = 0
for col in range(cols):
pivot_row = None
for r in range(rank, rows):
if abs(mat[r][col]) > tol:
pivot_row = r
break
if pivot_row is None:
continue
mat[rank], mat[pivot_row] = mat[pivot_row], mat[rank]
pivot_val = mat[rank][col]
for r in range(rows):
if r != rank and abs(mat[r][col]) > tol:
factor = mat[r][col] / pivot_val
for c in range(col, cols):
mat[r][c] -= factor * mat[rank][c]
rank += 1
if rank == rows or rank == cols:
break
return rank
if __name__ == "__main__":
A = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
I = [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
print("矩阵 A 的秩 =", matrix_rank(A))
print("矩阵 I 的秩 =", matrix_rank(I))

2025010113石蕊鑫
向量乘法(点乘,叉乘)
点乘
v1=[1,2,3] #定义两个向量
v2=[4,5,6]
dot_product=sum(a*b for a,b in zip(v1,v2)) #计算点积
print("向量1",v1)
print("向量2",v2)
print("向量点乘结果",dot_product)

叉乘
def cross_product(v1,v2): #空间向量叉乘公式
x=v1[1]*v2[2]-v1[2]*v2[1]
y=v1[2]*v2[0]-v1[0]*v2[2]
z=v1[0]*v2[1]-v1[1]*v2[0]
return[x,y,z]
a=[1,2,3] #两个空间向量
b=[4,5,6]
result = cross_product(a,b)
print("向量a=",a)
print("向量b=",b)
print("a × b =",result)

2025010114殷佳锐
一元二次方程
import math
# 输入 a, b, c
a = float(input("请输入a: "))
b = float(input("请输入b: "))
c = float(input("请输入c: "))
if a == 0:
print("这不是一元二次方程!")
else:
# 计算判别式
delta = b**2 - 4*a*c
print(f"判别式 Δ = {delta}")
if delta > 0:
# 两个不同实根
x1 = (-b + math.sqrt(delta)) / (2*a)
x2 = (-b - math.sqrt(delta)) / (2*a)
print(f"方程有两个不同实根:x1 = {x1:.2f}, x2 = {x2:.2f}")
elif delta == 0:
# 一个实根(重根)
x = -b / (2*a)
print(f"方程有一个重根:x = {x:.2f}")
else:
# 复数根
real = -b / (2*a)
imag = math.sqrt(-delta) / (2*a)
print(f"方程有两个共轭复根:")
print(f"x1 = {real:.2f} + {imag:.2f}i")
print(f"x2 = {real:.2f} -{imag:.2f}i")

2025010115康静茹
三边长判断三角形类型
# 输入三边长度
a = float(input("请输入第一条边:"))
b = float(input("请输入第二条边:"))
c = float(input("请输入第三条边:"))
# 先排序,方便用最大边判断
sides = sorted([a, b, c])
x, y, z = sides # z 最大
# 判断能否构成三角形
if x + y > z:
# 判断角
z2 = z ** 2
xy2 = x ** 2 + y ** 2
if z2 == xy2:
print("直角三角形")
elif z2 < xy2:
print("锐角三角形")
else:
print("钝角三角形")
# 判断边的类型
if a == b == c:
print("等边三角形")
elif a == b or b == c or a == c:
print("等腰三角形")
else:
print("普通三角形")
else:
print("不能构成三角形")

2025010117李欣栎
100以内3和5的倍数
for i in range(1,101):
if i%3==0 and i%5==0:#100以内同时是3和5的倍数
print(i)

2025010118 陈影
文字倒序输出(输出文字)
#获取用户输入的文字
text=input("请输入一段文字:")
#定义空字符串存储倒序结果
reverse_text=""
#遍历每一个字符
for char in text:
#把当前字符加到结的文字果前面,实现倒序
reverse_text=char+reverse_text
#输出倒序后的文字
print("倒序结果:",reverse_text)
2025
2025010119 淡郑雪
因式分解
def factorize_show_product(n):
if not isinstance(n, int) or n < 1:
return "请输入正整数"
# 存储所有 a×b = n 的组合
product_pairs = []
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
product_pairs.append(f"{i} × {n//i}")
# 质因数分解
def prime_factors(num):
factors = []
while num % 2 == 0:
factors.append(2)
num //= 2
i = 3
while i * i <= num:
while num % i == 0:
factors.append(i)
num //= i
i += 2
if num > 1:
factors.append(num)
return " × ".join(map(str, factors))
prime_product = prime_factors(n)
# 输出结果
print(f"{n} 的所有乘法组合:")
print(" " + ", ".join(product_pairs))
print(f"{n} 的质因数分解乘积:")
print(f" {n} = {prime_product}")
# 测试示例
test_num = 36
factorize_show_product(test_num)

2025010121 郑舒萍
1000以内3和7的倍数和
sum_num = 0
for i in range(1, 1001):
if i % 3 == 0 or i % 7 == 0:
sum_num += i
print(sum_num)

2025010124 胡鑫
十个评委打分求平均分
# 输入10个评委分数
scores = []
for i in range(10):
score = float(input(f"请输入第{i+1}个评委分数:"))
scores.append(score)
# 去掉一个最高分和一个最低分
scores.remove(max(scores))
scores.remove(min(scores))
# 计算平均分
average = sum(scores) / len(scores)
# 输出结果,保留2位小数
print(f"去掉高低分后的平均分:{average:.2f}")

2025010125 刘芮孜
给十个数判断有几个直角三角形
# 从10个数中找出所有能组成直角三角形的组合
import itertools
def count_right_triangles(sides):
count = 0
# 取出所有3个不同边的组合
for tri in itertools.combinations(sides, 3):
a, b, c = sorted(tri) # 从小到大排序,c最大
# 勾股定理:a² + b² = c²
if a**2 + b**2 == c**2 and a > 0 and b > 0 and c > 0:
count += 1
return count
# 这里输入你的10个边长
nums = [3, 4, 5, 6, 8, 10, 5, 12, 13, 7]
print(f"能组成直角三角形的个数:{count_right_triangles(nums)}")

2025010128 贾姝慧
统计姓氏前三
students = [
"惠盾", "霍延萌", "殷慧湘", "钟海洋", "陈影", "孙瑞妍", "马浩", "许乐乐",
"殷佳锐", "李佳雨", "王义刚", "张译心", "李欣栎", "王怡萱", "康静茹", "石蕊鑫",
"沈玉婷", "田昌盛", "董玥卓", "胡鑫", "刘芮孜", "郑舒萍", "贾姝慧", "韩晓媛",
"刘司拓", "刘杨龙", "张静文", "张嘉诚", "袁泉", "朱翔鸽", "黄帅豪", "淡郑雪",
"黄俊", "刘加鑫", "任鸿杰", "董晨鑫", "谢润泽", "徐雨轩", "叱干育", "张中光"
]
from collections import Counter
# 提取姓氏(处理复姓)
surnames = []
for name in students:
if name.startswith("叱干"):
surnames.append("叱干")
else:
surnames.append(name[0])
# 统计并取前三名
top3 = Counter(surnames).most_common(3)
# 输出结果
print("姓氏排名前三:")
for i, (xing, num) in enumerate(top3, 1):
print(f"{i}. {xing}:{num}人")

2025010131 董玥卓
直线方程上的点做垂足
def get_foot_of_perpendicular(A, B, C, x0, y0):
"""
求点 (x0, y0) 到直线 Ax + By + C = 0 的垂足 (x, y)
:param A, B, C: 直线一般式 Ax + By + C = 0 的系数
:param x0, y0: 已知点坐标
:return: 垂足 (x, y)
"""
denominator = A**2 + B**2
if denominator == 0:
raise ValueError("A 和 B 不能同时为 0,否则不是一条直线")
# 垂足公式推导
x = (B * (B * x0 - A * y0) - A * C) / denominator
y = (A * (-B * x0 + A * y0) - B * C) / denominator
return (x, y)
# ------------------- 示例 1:点到直线的垂足 -------------------
if __name__ == "__main__":
# 直线:2x - y + 1 = 0 → A=2, B=-1, C=1
A, B, C = 2, -1, 1
# 已知点:(3, 4)
x0, y0 = 3, 4
foot = get_foot_of_perpendicular(A, B, C, x0, y0)
print(f"点 ({x0}, {y0}) 到直线 {A}x + {B}y + {C} = 0 的垂足是:{foot}")
# 示例 2:垂直于 x 轴的直线 x = 5
A2, B2, C2 = 1, 0, -5
x02, y02 = 2, 3
foot2 = get_foot_of_perpendicular(A2, B2, C2, x02, y02)
print(f"点 ({x02}, {y02}) 到直线 {A2}x + {B2}y + {C2} = 0 的垂足是:{foot2}")

2025010132 李佳雨
行列式的序
def inversion_number(perm):
"""
计算一个排列的逆序数
:param perm: 列表形式的排列 (元素为互不相同的数字)
:return: 逆序数
"""
n = len(perm)
count = 0
for i in range(n):
for j in range(i + 1, n):
if perm[i] > perm[j]:
count += 1
return count
# 示例 1:计算排列 [3, 1, 2] 的逆序数
perm1 = [3, 1, 2]
inv1 = inversion_number(perm1)
print(f"排列 {perm1} 的逆序数为: {inv1}, 符号为: {(-1)**inv1}") # 输出: 2, 1
# 示例 2:计算排列 [2, 4, 1, 3] 的逆序数
perm2 = [2, 4, 1, 3]
inv2 = inversion_number(perm2)
print(f"排列 {perm2} 的逆序数为: {inv2}, 符号为: {(-1)**inv2}") # 输出: 3, -1

2025010089张静文
# 输入三个数
a, b, c = map(float, input("输入三个数:").split())
# 排序,让 c 最大
a, b, c = sorted([a, b, c])
# 判断能不能构成三角形
if a + b <= c:
print("不能构成三角形")
else:
a2 = a**2
b2 = b**2
c2 = c**2
if a2 + b2 == c2:
print("直角三角形")
elif a2 + b2 > c2:
print("锐角三角形")
else:
print("钝角三角形")

浙公网安备 33010602011771号