计算机导论课作业 02(基于Python)

2、(10 points)(A)请写个函数用纯加法实现对参数x平方的计算(x 是整数)-- 函数sqr(x)。你不能用乘法。(B)写个函数计算x的3次方,称此函数为cube(x),函数中可调用sqr(x)一次。你不能用乘法,可以用加法。 © 再写个函数计算x的4次方,称此函数为quad(x)。用最简单的方式完成,函数中可以调用sqr(x),你不能用乘法或加法。

def sqr1(a):
    if a < 0:

        b = 1 
        sum = 0 
        while b <= abs(a):
            sum += -a
            b += 1
    else:
        b = 1 
        sum = 0 
        while b <= abs(a):
            sum += a
            b += 1
    
    return sum;

def cube(x):
     a = 1
     b = sqr1(x)
     sum = 0
     if x < 0:
         while a <= x:
             sum += -b
             a += 1
     else:
         while a <= x:
             sum += b
             a += 1
     return sum;

def qand(x):
     a = 1
     b = sqr1(x)
     sum = sqr1(b)
     return sum;

x = int(input())
print(qand(x))

3、(10 points)书本的练习题1.2.5,1.2.6

#(1)
def factor(x):
    a = 1
    for i in range(1,x+1):
        a *= i
    return a;

x = int(input())
print(factor(x))

#(2)
def factorial(x):
    a = 1
    for i in range(1,x+1):
        a *= i
    return a;

def factor(x,y):
    
    if x > y or x<0 or y<0:
        d = "no answer"
    elif y == 0:
        d = 1
    else:
        a = factorial(x)
        b = factorial(y)
        c = factorial(x-y)
        d = (a/b/c)
return d

4、(5 points)请用Python试验以下代码。

x=9876543210987654321
3/x+1 == 1
x=9876543210
3/x+1 == 1
请解释为什么3/x+1有时候会等于 1?有时候会不等于1?

浮点小数部分数据精度不够

6、(10 points)类似练习题1.3.4。 请将第一种Python程序的for循环改写为while循环,使得一旦找到所要的g就跳出循环。这样可以减少不必要的循环。请你的回答不要用到break语句。

def square4():
    c = 10
    i = 0
    g = 0
    j = 0
    while j*j < c:
        j += 1
        g = j - 1
    while(abs(g * g - c) > 0.0001):
        g += 0.00001 
        i += 1
        print("%d:g = %.5f"%(i,g))

7、(5 points)类似练习题1.3.3, 如何改写第二种“二分法”的Python程序,使得当c<1时,例如c=0.9,也能算出正确的平方根。提示:更改m_max的起始值。

def square2():#2分
    i = 0
    c = 0.01
    max = 10*c
    min = 0
    g = (min + max)/2
    while(abs(g*g-c)>1e-14):
        if(g * g < c ):
            min = g
        else:
            max = g
        g = (min + max) /2
        i += 1
        print("%d:%.13f"%(i,g))

8、(20 points)完成Python程序,计算出正确的x值,使得x3+x2-10=0,找出介于1与2之间的x值,精确到小数点下12位,请分别用
(a)二分法
(b)牛顿迭代法
完成程序,也请打印出这两种方法所需要用到的迭代次数。

#(a)
def cuberoot1():
    i = 0
    c = 10
    max = c
    min = 0
    x = (max + min)/2
    while(abs(x ** 3 + x ** 2 - c)>1e-13):
        if(x ** 3 + x ** 2  >c):
            max = x
        else:
            min = x
        x = (max + min)/2
        i += 1
        print("%d : %.13f"%(i,x)) 

#(B)
def cuberoot2():
    i = 0
    c = 10
    x = c/2
    while (abs(x**3 + x**2 - c) > 1e-13 ):
        x = (2*x**3+x**2+c)/(3*x**2+2*x)
        i += 1
        print("%d : %.13f"%(i,x))
cuberoot1()        
cuberoot2()

9、(10 points)编程导论书的习题1.14,请写出Python程序能解出任意输入的二元一次方程组,并且要测试,各种情况都要兼顾。

def equation():
    x1 = 0
    x2 = 0
    print("请输入二元一次方程的二次项系数")
    a = int(input())
    print("请输入二元一次方程的一次项系数")
    b = int(input())
    print("请输入二元一次方程的常数")
    c = int(input())
    if(b**2-4*a*c<0):
        print("该方程无实数解")
        
    else:
        d = pow(b**2-4*a*c,0.5)
        x1 = (-b+(d))/2*a
        x2 = (-b-(d))/2*a
        print("该二元一次方程组的解分别为%f %f"%(x1,x2))
equation()

10、(10 points)类似编程导论书的练习题1.4.9,但是只将非空格的单词倒序输出为列表,也就是不理会空格,例如,输入:“I am a Chinese”,输出四个元素的列表:[“Chinese”,“a”,“am”,“I”],完成Python程序。输入的字符串的单词之间假设用空格分开,注意有可能是多个空格喔。重点是要正确抓出每一个单词出来。注意,最后一个单词的后面可能有空格,也可能没有空格。

L = list(input().split())
L.reverse()
print(L)

11、(10 points)编程导论书的习题1.33,判断一个字符串是否为回文字符串。

a = input()
left = 0
right = len(a)-1
b = 1
while(b < len(a)/2):
    if (a[left] == a[right]):
        left += 1
        right -=1
        b += 1
        
    else:
        print("%s字符串不是回文字符串" %a)
        break
if(b >= len(a)/2):
            print("%s字符串为回文字符串" %a)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值