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)