实验二 程序流程控制

2023-11-20

1. 编写程序计算 1+3+5+7…+99 之和。
summ=0
for i in range(1,100):
  summ=summ+i
print('和为:',summ)
2. 编写程序 , 计算 2+4+6+8…+100 之和 .
summ=0
for i in range(2,101):
  if(i%2==0):
    summ=summ+i
print('和为:',summ)
3. 编写程序 , 使用不同的实现方法输出 2000~3000 的所有闰年 , 运行效 果如下图所示。
 
提示 :闰年包括普通闰年和世纪闰年,修改 print 函 数中的‘end’ 选项。
summ=1
for i in range(2000,3001):
  if(i%4==0 and i%100!=0):
      if (summ%8==0):
          print(i,end='\n')
          summ=summ+1
      else:
          print(i,end='\t')
          summ=summ+1
  elif(i%400==0):
      if (summ%8==0):
          print(i,end='\n')
          summ=summ+1
      else:
          print(i,end='\t')
          summ=summ+1
4. 编写程序 , 计算 Sn=1-3+5-7+9-11+…
提示 :可以使用 %2==0 的语句形式判断 i 是否为偶数。
a=int(input('请输入整数终点数:'))
summ=0
summm=0
for i in range(1,a+1,4):
  if(i%2!=0):
    summ=summ+i
for i in range(3,a+1,4):
  if(i%2!=0):
    summm=summm-i
    Sn=summ+summm
print('Sn的值为:',Sn)
5. 编写程序 , 计算 Sn=1+1/2+1/3+…
a=int(input('请输入终点值:'))
Sn=1
for i in range(2,a+1):
  Sn=Sn+1/i
print("总和为:",Sn)
6. (只要实现四种方式中的一种即可) 编写程序 , 打印九九乘法表。 要求输出九九乘法表的各种显示效果( 上三角、下三角、矩形块等方 式)
提示:\t,横向建表

for i in range(9,0,-1):
    for j in range(1,i+1):
        m=i*j
        if i==j:
            print(i,'*',j,'=',m,end='\n')
        else:
            print(i,'*',j,'=',m,end='\t')
for i in range(1,10):
    for j in range(1,i+1):
        m=i*j
        if i==j:
            print(i,'*',j,'=',m,end='\n')
        else:
            print(i,'*',j,'=',m,end='\t')

7. 编写程序输入三角形的 3 条边 , 先判断是否可以构成三角形 , 如果可以 , 则进一步求三角形的周长和面积 , 否则报错 无法构成三角形 !” 。其运行效果如图下图所示( 结果均保留1 位小数 )

提示 : (1)3 个数可以构成三角形必须满足如下条件 : 每条边的边长均大于 0, 并且任意两边之和大于第三边。

 

 (3)其中根号需要导入 math 库并调用 sqrt 函数

from math import *
while(1):
    a=eval(input('请输入三角形的第一条边:'))
    b=eval(input('请输入三角形的第二条边:'))
    c=eval(input('请输入三角形的第三条边:'))
    if (a+b>c and b+c>a and a+c>b):
        if (a>0 and b>0 and c>0):
            h=(a+b+c)/2
            area=sqrt(h*(h-a)*(h-b)*(h-c))
            print('输出三角形面积为:',area)
            break
    else :
        print('无法构成三角形,请重新输入!')
8. 编写程序 , 输入 x, 根据如下公式计算分段函数 y 的值。请分别利用单 分支语句双分支结构以及条件运算语句等方法实现。

提示:需要调用 math 模块,其中
math.sqrt() 是根号;
math.exp() 是指数 e
math.log() ln
math.sin() sin;
from math import *
x=eval(input('请输入x值:'))
if(x>=0):
    y=(x**2-3*x)/(x+1)+2*pi+sin(x)
elif(x<0):
    y=log10(-5*x)+6*sqrt(abs(x)+exp(4))-(x+1)**3
print('分段函数y的值为:',y)
9. 编写程序 , 输入一元二次方程的 3 个系数 a b c, ax 2 +bx+c=0
程的解。结果如下图所示
提示:
(1) 方程 ax 2 +bx+c=0 的解有以下几种情况。
a=0 and b=0, 无解。
a=0andb!=0, 有一个实根
b2-4ac=0, 有两个相等实根 ○
4. b2-4ac>0,有两个不等实根
b2-4ac<0, 有两个共轭复根
(2) 可以利用 “ print(str. format(" 此方程有两个不等实根 :{0}+{1} 和 {0}-{1}",realPart, imag Part,)”的语句形式输出方程的两个共轭复根。
from math import *
a=float(input('请输入一元二次方程的a值:'))
b=float(input('请输入一元二次方程的b值:'))
c=float(input('请输入一元二次方程的c值:'))
m=b**2-4*a*c
if (a==0 and b==0):#只有c值,无解
    print('方程无解')
elif(a==0 and b!=0):
    x=-c/b
    print('方程有一个实根:',x)#一元一次方程形式
elif(m==0):#二元一次方程形式,b2-4ac=0,有两个相等实根
    x=-b/(2*a)
    print('方程有两个相等实根为:',x)
elif(m>0):#b2-4ac>0,有两个不等实根
    x1=(-b+m)/(2*a)
    x2=(-b-m)/(2*a)
elif(m<0):#方程无解,但可求两个共轭复根
    real=-b/(2*a)
    image=sqrt(-m)
    print(str.format("此方程有两个不等实根:{0}+{1}和{0}-{1}",real,image))
10. 编写程序 , 输入整数 n(n≥0), 分别利用 for 循环和 while 循环求 n!
提示:
(1) n!=n×(n-1)×(n-2)×…×2×1 。例如 5!=5×4×3×2×1=120, 特别地 ,0!=1
(2) 一般情况下 , 累乘的初值为 1, 累加的初值为 0
(3) 如果输入的是负整数 , 则继续提示输入非负整数 , 直到 n≥0
n=int(input('请输入整数:'))
Sn=1
if n==0:
    print('0!=1')
else:
    for i in range(1,n+1):
        Sn=Sn*i
    print('结果为:',Sn)
11.编写程序,产生两个 0~100(包含 0 和 100)的随机整数 a 和 b,求这两个整数的最大公约数和最小公倍数。
提示:(1)可以利用“ random, randint(0,100)”的语句形式生成 0-100(包 含 0 和 100)的随机整数。
(2)利用“辗转相除法”求最大公约数,具体算法如下。
①对于已知的两个正整数 m、n,使得 m>n
②m除以n得余数r 
③若r≠0,则令m+n,n←r,继续相除得到新的余数r。若仍然 r≠0,则重复此过程,直到 r=0 为止。最后的m就是最大公约数。
(3)求得了最大公约数,最小公倍数就是已知的两个正整数之积除以最大公约数的商。

法一:

from random import *
m=randint(0,101)
n=randint(0,101)
print(m,n)
if m<n:
    m,n=n,m
    m1=m
    n1=n
else:
    m1=m
    n1=n
if n1==0:
    print('无最大公因数和最小公倍数')
while(n1!=0):
    r=m1%n1
    m1=n1
    n1=r
print('最大公因数为:', m1)
print('最小公倍数为:',m*n/m1)

法二:

import random
m=random.randint(0,100)
n=random.randint(0,100)
print(m,n)
if m>=n:
    if n==0:
        print('无最大公约数')
        print('无最小公倍数')
    else:
        m1=m
        n1=n
        while (1):
            r=m1%n1
            if r!=0:
                n1=n1%r
                m1=r
                continue
            else :
                gcd=n1
                break
    print('最大公因数为:',gcd)
    print("最小公倍数:",m*n/gcd)                
else :
    m,n=n,m
    if n==0:
        print('无最大公约数')
        print('无最小公倍数')
    else :
        m1=m
        n1=n
        while (1):
            r=m1%n1
            if r!=0:
                n1=n1%r
                m1=r
                continue
            else :
                gcd=n1
                break
    print('最大公因数为:',gcd)
    print("最小公倍数:",m*n/gcd)

 法二有错,但不知道咋改,呜呜呜,暂存一下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实验二 程序流程控制 的相关文章

随机推荐