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("钝角三角形")

屏幕截图 2026-03-13 210443

 

 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))

屏幕截图 2026-03-13 170108

 

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}")

屏幕截图 2026-03-13 192703

 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)

屏幕截图 2026-03-12 221426

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)

屏幕截图 2026-03-17 210440

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} 年不是闰年")

屏幕截图 2026-03-17 224618

 

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]

屏幕截图 2026-03-17 214713

 

  

 

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))

屏幕截图 2026-03-11 134441

 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}人")

屏幕截图 2026-03-12 214804

 

 

2025010101袁泉

阶乘

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

 屏幕截图 2026-03-11 111748

 

 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)}")

609faf7526160577dbd28bfbcc405d22

 

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)

屏幕截图 2026-03-14 184725

 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)))

 

 

image

 

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} 度")

屏幕截图 2026-03-11 180017

 

 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))

image

 

 

 

 

 

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)

屏幕截图 2026-03-11 151142

叉乘

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)

屏幕截图 2026-03-11 151113

 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")

联想截图_20260311214626

 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("不能构成三角形")

局部截取_20260311_220439

 2025010117李欣栎

100以内3和5的倍数

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

  

屏幕截图 2026-03-11 222555

 

 

2025010118  陈影

文字倒序输出(输出文字)

#获取用户输入的文字
text=input("请输入一段文字:")
#定义空字符串存储倒序结果
reverse_text=""
#遍历每一个字符
for char in text:
    #把当前字符加到结的文字果前面,实现倒序
    reverse_text=char+reverse_text
#输出倒序后的文字
print("倒序结果:",reverse_text)

2025屏幕截图 2026-03-11 220238

 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)

 屏幕截图 2026-03-17 210440

 

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)

屏幕截图 2026-03-12 223512

 

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}")

截屏2026-03-12 22.16.39

 

 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)}")

image

 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}人")

 屏幕截图 2026-03-12 214509

 

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}")

  屏幕截图 2026-03-12 222555

 

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

屏幕截图 2026-03-12 221252

 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("钝角三角形")
屏幕截图 2026-03-12 222004

 


 

posted @ 2026-03-18 20:02  szmtjs10  阅读(3)  评论(0)    收藏  举报